Cette page décrit le processus d'importation d'une image de conteneur dans Harbor et de déploiement de cette image dans votre instance de bac à sable GDC.
Préparation
Suivez les instructions de la section Se connecter à votre instance pour vous connecter à votre instance avec un accès à la ligne de commande Linux. Vous pouvez vous connecter à votre passerelle via le Bureau à distance ou exécuter
sshuttle
sur votre machine Linux.Assurez-vous que les rôles
secret-admin
,namespace-admin
,global-pnp-admin
etproject-viewer
sont attribués à l'utilisateur au niveau du projet.Définissez les variables d'environnement qui seront utilisées dans les instructions suivantes :
export TENANT_PROJECT=TENANT_PROJECT # Intended deployment project for the container workflow. export HARBOR_INSTANCE_NAME=HARBOR_INSTANCE_NAME # Harbor Container Registry instance name. export HARBOR_PROJECT=HARBOR_PROJECT # Container registry project name for your images. export AO_USER=AO_USER # Your user name in the instance, e.g.: fop-my-user@example.com. export INSTANCE_URL=${HARBOR_INSTANCE_NAME}-${TENANT_PROJECT}.org-1.zone1.google.gdch.test. export DOCKER_CONFIG_PATH=DOCKER_CONFIG_PATH # Path to docker config file e.g.: /root/.docker/config.json.
Pour créer une instance de registre Harbor, suivez Créer une instance de registre Harbor. Vous pouvez également utiliser l'instance Harbor de bac à sable précréée : le
user-project
par défaut dans le bac à sable GDC est fourni avec une instance Harbor déjà déployée,user-haas-instance
, qui peut être utilisée pour le développement.export HARBOR_INSTANCE_NAME=user-haas-instance export TENANT_PROJECT=user-project export INSTANCE_URL=${HARBOR_INSTANCE_NAME}-${TENANT_PROJECT}.org-1.zone1.google.gdch.test
Importer une image dans Harbor
Créez un projet Harbor en suivant Créer un projet Harbor.
Exemple :
gdcloud harbor harbor-projects create HARBOR_PROJECT \ --project=TENANT_PROJECT \ --instance=HARBOR_INSTANCE_NAME
Connectez-vous à Docker. Commencez par Se connecter à Docker ou Helm avec des secrets CLI.
Téléchargez ou créez votre image de conteneur, puis suivez les instructions Google Distributed Cloud pour les environnements isolés afin de transférer une image vers Harbor.
Par exemple, voici un workflow permettant d'extraire des données de GitLab et de les transférer vers Harbor :
Connectez-vous et extrayez les données de votre registre de conteneurs GitLab.
export GITLAB_ID=GITLAB_ID export GITLAB_PROJECT_NAME=GITLAB_PROJECT_NAME export GITLAB_IMAGE_PATH=registry.gitlab.com/GITLAB_ID/GITLAB_PROJECT_NAME docker login registry.gitlab.com docker pull ${GITLAB_IMAGE_PATH}
Transférez l'image GitLab vers Harbor :
export TAG=demo-image docker tag ${TAG} ${GITLAB_IMAGE_PATH} docker push ${INSTANCE_URL}/${HARBOR_PROJECT}/${TAG}
Déployer une application de conteneur
Passez à la section Créer un secret d'extraction d'image Kubernetes pour créer un secret et déployer votre application.
Créer une règle de réseau
Créez une règle de réseau pour autoriser tout le trafic réseau vers le projet locataire :
kubectl --kubeconfig GLOBAL_API_KUBECONFIG -n TENANT_PROJECT \ create -f - <<EOF apiVersion: networking.k8s.io/v1 kind: ProjectNetworkPolicy metadata: annotations: name: allow-all spec: ingress: - from: - ipBlock: cidr: 0.0.0.0/0 podSelector: {} policyTypes: - Ingress EOF
Se connecter à l'application
Exportez l'adresse IP du service :
export IP=`kubectl --kubeconfig=${KUBECONFIG} get service ${SERVICE_NAME} \ -n TENANT_PROJECT -o jsonpath='{.status.loadBalancer.ingress[*].ip}'`
Pour vous connecter depuis votre machine locale à l'aide de
sshuttle
, exécutez la commande suivante pour créer un tunnel SSH. Si vous disposez d'une sessionsshuttle
existante que vous avez créée lorsque vous vous êtes connecté à votre instance, vous devez mettre fin à cette session avant d'exécuter la commande suivante :sshuttle -r zone1-org-1-data@GDC_SANDBOX_INSTANCE_NAME --no-latency-control \ --ssh-cmd 'gcloud compute ssh --project PROJECT_NAME --zone ZONE --tunnel-through-iap' \ 10.200.0.0/16 --dns
Testez le service en envoyant une requête HTTP http://${IP}`:
curl http://${IP}