Déployer des charges de travail de conteneur

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

  1. 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.

  2. Assurez-vous que les rôles secret-admin, namespace-admin, global-pnp-admin et project-viewer sont attribués à l'utilisateur au niveau du projet.

  3. 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.
    
  4. 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

  1. 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
    
  2. Connectez-vous à Docker. Commencez par Se connecter à Docker ou Helm avec des secrets CLI.

  3. 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 :

    1. 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}
      
    2. 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

  1. 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

  1. Exportez l'adresse IP du service :

    export IP=`kubectl --kubeconfig=${KUBECONFIG} get service ${SERVICE_NAME} \
          -n TENANT_PROJECT -o jsonpath='{.status.loadBalancer.ingress[*].ip}'`
    
  2. 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 session sshuttle 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
    
  3. Testez le service en envoyant une requête HTTP http://${IP}`:

      curl http://${IP}