Implantar cargas de trabalho de contêiner

Nesta página, descrevemos o processo de upload de uma imagem de contêiner para o Harbor e implantação dessa imagem na sua instância do GDC Sandbox.

Preparação

  1. Siga as instruções em Conectar-se à instância para se conectar à instância com acesso à linha de comando do Linux. É possível se conectar ao gateway por área de trabalho remota ou executar sshuttle na sua máquina Linux.

  2. Verifique se o usuário tem os papéis secret-admin, namespace-admin, global-pnp-admin e project-viewer atribuídos no nível do projeto.

  3. Defina as variáveis de ambiente que serão usadas nas instruções a seguir:

    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. Para criar uma instância do registro do Harbor, siga Criar uma instância do registro do Harbor. Você também pode usar a instância do Harbor do sandbox pré-criada: o user-project padrão no sandbox do GDC vem com uma instância do Harbor já implantada, user-haas-instance, que pode ser usada para desenvolvimento.

    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
    

Fazer upload da imagem para o Harbor

  1. Crie um projeto do Harbor seguindo Criar um projeto do Harbor.

    Exemplo:

    gdcloud harbor harbor-projects create HARBOR_PROJECT  \
    --project=TENANT_PROJECT \
    --instance=HARBOR_INSTANCE_NAME
    
  2. Faça login no Docker. Comece em Fazer login no Docker ou no Helm com secrets da CLI.

  3. Faça o download ou crie a imagem do contêiner e siga as instruções do Google Distributed Cloud isolado para enviar uma imagem ao Harbor.

    Por exemplo, este é um fluxo de trabalho para extrair do GitLab e enviar para o Harbor:

    1. Faça login e extraia do registro de contêineres do 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. Envie a imagem do GitLab para o Harbor:

      export TAG=demo-image
      docker tag ${TAG} ${GITLAB_IMAGE_PATH}
      docker push ${INSTANCE_URL}/${HARBOR_PROJECT}/${TAG}
      

Implantar app em contêiner

Continue em Criar um secret de extração de imagem do Kubernetes para criar um secret e implantar o app.

Criar uma política de rede

  1. Crie uma política de rede para permitir todo o tráfego de rede para o projeto do locatário:

    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
    

Conectar-se ao aplicativo

  1. Exporte o endereço IP do serviço:

    export IP=`kubectl --kubeconfig=${KUBECONFIG} get service ${SERVICE_NAME} \
          -n TENANT_PROJECT -o jsonpath='{.status.loadBalancer.ingress[*].ip}'`
    
  2. Para se conectar da máquina local usando sshuttle, execute o comando a seguir para criar um túnel SSH. Se você tiver uma sessão sshuttle criada ao se conectar à instância, encerre essa sessão antes de executar o seguinte comando:

      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. Teste o serviço enviando uma solicitação HTTP http://${IP}`:

      curl http://${IP}