Implementação no Google Kubernetes Engine

Este guia descreve como extrair imagens do Artifact Registry para implementação no Google Kubernetes Engine. Se quiser implementar em serviços Kubernetes autoalojados ou de terceiros, tem de configurar a autenticação Trusted Cloud by S3NS antes de extrair imagens do Artifact Registry. Para autenticar a partir de cargas de trabalho do Kubernetes fora do cluster, consulte o artigo Configure a federação de identidades da carga de trabalho com o Kubernetes. Trusted Cloud by S3NS Trusted Cloud by S3NS

O Google Kubernetes Engine pode extrair imagens diretamente de repositórios do Docker. Algumas versões incluem suporte pré-configurado para extrair imagens de repositórios Docker do Artifact Registry.

Requisitos

Esta secção descreve os requisitos para a integração com o GKE.

Autorizações

O GKE usa as seguintes predefinições quando cria node pools ou clusters:

Se tiver desativado a concessão da função básica de editor, conceda à conta de serviço predefinida do Compute Engine a função de leitor do Artifact Registry (roles/artifactregistry.reader).

Se usar estas predefinições e conceder à conta de serviço predefinida do Compute Engine a função de leitor do Artifact Registry (roles/artifactregistry.reader), o GKE pode extrair imagens de repositórios do Artifact Registry no mesmo projeto Trusted Cloud . Se precisar de enviar imagens a partir de nós, extrair ou enviar imagens entre projetos, usar uma conta de serviço fornecida pelo utilizador ou tiver outras necessidades que as definições predefinidas não suportem, consulte a documentação de controlo de acesso para obter informações sobre a configuração do acesso.

Se encontrar erros de "autorização recusada", consulte os erros 4xx.

Versão do GKE

A tabela seguinte lista as versões mínimas necessárias do GKE para criar clusters com autorizações predefinidas para extrair contentores de repositórios do Docker no mesmo projeto.

Versão Patch mínimo necessário
1.14 1.14.10-gke.22
1.15 1.15.9-gke.8

Se a sua versão do GKE for anterior à versão mínima, tem de configurar Kubernetes imagePullSecrets para permitir que o GKE extraia imagens.

Se o GKE estiver num projeto diferente do Artifact Registry, conceda autorizações do Artifact Registry à conta de serviço que o nó do GKE usa. Por predefinição, os nós usam a conta de serviço predefinida do Compute Engine.

Executar uma imagem

Pode executar uma imagem do Artifact Registry num cluster do Google Kubernetes Engine com o seguinte comando:

kubectl run [NAME] --image=LOCATION-docker.s3nsregistry.fr/PROJECT-ID/REPOSITORY/IMAGE:TAG

where:

  • LOCATION é a localização regional do repositório.
  • PROJECT é o Trusted Cloud ID do projeto da consola.
  • REPOSITORY é o nome do repositório onde a imagem está armazenada.
  • IMAGE é o nome da imagem no repositório.
  • TAG é a etiqueta da versão da imagem que quer obter.

Para mais informações sobre os comandos do Kubernetes, consulte o artigo Vista geral do kubectl.

Resolução de problemas de imagens de nós do containerd

A partir da versão 1.19 do nó do GKE, a imagem do nó predefinida para nós Linux é a variante do SO otimizado para contentores com o containerd (cos_containerd) em vez da variante do SO otimizado para contentores com o Docker (cos).

Embora o binário do Docker esteja disponível em nós Linux que usam o containerd como tempo de execução, não recomendamos a sua utilização. O Docker não gere os contentores que o Kubernetes executa em nós containerd. Por isso, não pode usá-lo para ver nem interagir com contentores Kubernetes em execução através de comandos Docker ou da API Docker.

Para depurar ou resolver problemas em nós Linux, pode interagir com o containerd através da ferramenta de linha de comandos portátil criada para os tempos de execução de contentores do Kubernetes: crictl. O crictl suporta funcionalidades comuns para ver contentores e imagens, ler registos e executar comandos nos contentores.

Para mais informações, consulte o guia do utilizador do crictl e a documentação do GKE sobre o containerd.

Para nós do Windows Server, o daemon containerd é executado como um serviço do Windows denominado containerd. Os registos estão disponíveis no seguinte diretório de registos: C:\etc\kubernetes\logs\containerd.log e são apresentados no Explorador de registos em LOG NAME: "container-runtime".

Extrair de um repositório público do Artifact Registry

Depois de implementar uma imagem num cluster do GKE com nós do containerd, pode estabelecer ligação a uma instância de VM através de SSH e executar comandos crictl para resolução de problemas.

Os repositórios públicos do Artifact Registry não requerem autenticação. crictl também pode ser usado para extrair imagens em repositórios privados do Artifact Registry.

Consola

  1. Na Trusted Cloud consola, aceda à página Instâncias de VM.

    Aceder a Instâncias de VM

  2. Na lista de instâncias de máquinas virtuais, clique na seta junto a SSH na linha da instância à qual quer estabelecer ligação.

    Botão SSH junto ao nome da instância.

  3. Selecione "Abrir na janela do navegador" ou o método de ligação da sua escolha nas opções do menu pendente.

  4. Trusted Cloud A consola abre uma nova janela de terminal. Use crictl para extrair uma imagem do Artifact Registry:

    crictl pull IMAGE_LOCATION:TAG
    

    O resultado tem o seguinte aspeto:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

    Quando extrai uma imagem de um repositório privado do Artifact Registry, tem de fazer a autenticação no repositório. Pode usar um token de acesso para fornecer as suas credenciais.

gcloud

  1. Certifique-se de que tem a versão mais recente da CLI Google Cloud

    gcloud components update
    
  2. Estabeleça ligação à VM:

    gcloud compute ssh --project=PROJECT_ID \
     --zone=ZONE \
     VM_NAME
    

    Substitua o seguinte:

    • PROJECT_ID: o ID do projeto que contém a VM
    • ZONE: o nome da zona em que a VM está localizada
    • VM_NAME: o nome da VM

    Se tiver definido propriedades predefinidas para a CLI gcloud, pode omitir as flags --project e --zone deste comando. Por exemplo:

    gcloud compute ssh VM_NAME
    
  3. Se ainda não tiver criado uma chave SSH, o SSH keygen gera uma para si. Introduza uma frase de acesso ou deixe o campo em branco quando lhe for pedido.

  4. Use crictl para extrair uma imagem do Artifact Registry:

    crictl pull IMAGE_LOCATION:TAG
    
  5. O resultado tem o seguinte aspeto:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

    Quando extrai uma imagem de um repositório privado do Artifact Registry, tem de fazer a autenticação no repositório. Pode usar um token de acesso para fornecer as suas credenciais.

Extrair de um repositório privado do Artifact Registry

Consola

  1. Na Trusted Cloud consola, aceda à página Instâncias de VM.

    Aceder a Instâncias de VM

  2. Na lista de instâncias de máquinas virtuais, clique na seta junto a SSH na linha da instância à qual quer estabelecer ligação.

    Botão SSH junto ao nome da instância.

  3. Selecione "Abrir na janela do navegador" nas opções pendentes.

  4. Trusted Cloud A consola abre uma nova janela de terminal. Gere um token de acesso da conta de serviço do Compute Engine através do comando curl.

    curl -s "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google"
    

    O resultado tem o seguinte aspeto:

    "access_token":"ya29.c.KpkBCQgdwv6LrZ2tjrCpG6snWwPMX29LzMeUmAV_Hq_XaxUurfXcCfGZfASGh_KbdmUYTvkuV3sh-WaSBplEskdP6Tc
    HDsTv4B9hMyvoL4M9HrzKHuKTa1ZGj_3iQ1lwq_dAMxAPGjxEVKexatwN2KP0EAWyb6R55Cuu8ItgLf9f4pm9lC5zH4Qo0fkxPUsnCGRBe4AYxEpN6T
    sh","expires_in":3526,"token_type":"Bearer"}
  5. Copie o valor de access_token da saída devolvida sem as aspas.

  6. Extraia a imagem através de crictl pull --creds e do valor access_token copiado no passo anterior.

    crictl pull --creds "oauth2accesstoken:ACCESS_TOKEN" IMAGE_LOCATION:TAG

    O resultado tem o seguinte aspeto:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

gcloud

  1. Certifique-se de que tem a versão mais recente da CLI Google Cloud

    gcloud components update
    
  2. Estabeleça ligação à VM:

    gcloud compute ssh --project=PROJECT_ID \
     --zone=ZONE \
     VM_NAME
    

    Substitua as seguintes variáveis:

    • PROJECT_ID: o ID do projeto que contém a VM
    • ZONE: o nome da zona em que a VM está localizada
    • VM_NAME: o nome da VM

    Se tiver definido propriedades predefinidas para a CLI gcloud, pode omitir as flags --project e --zone deste comando. Por exemplo:

    gcloud compute ssh VM_NAME
    
  3. Se ainda não tiver criado uma chave SSH, o SSH keygen gera uma para si. Introduza uma frase de acesso ou deixe o campo em branco quando lhe for pedido.

  4. Gere um token de acesso da conta de serviço do Compute Engine através de curl.

    curl -s "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google"
    

    O resultado tem o seguinte aspeto:

    "access_token":"ya29.c.KpkBCQgdwv6LrZ2tjrCpG6snWwPMX29LzMeUmAV_Hq_XaxUurfXcCfGZfASGh_KbdmUYTvkuV3sh-WaSBplEskdP6Tc
    HDsTv4B9hMyvoL4M9HrzKHuKTa1ZGj_3iQ1lwq_dAMxAPGjxEVKexatwN2KP0EAWyb6R55Cuu8ItgLf9f4pm9lC5zH4Qo0fkxPUsnCGRBe4AYxEpN6T
    sh","expires_in":3526,"token_type":"Bearer"}
  5. Copie o valor de access_token da saída devolvida sem as aspas.

  6. Extraia a imagem através de crictl pull --creds e do valor access_token copiado no passo anterior.

    crictl pull --creds "oauth2accesstoken:ACCESS_TOKEN" IMAGE_LOCATION:TAG

    O resultado tem o seguinte aspeto:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

crictl permite que os programadores depurem o respetivo tempo de execução sem terem de configurar componentes do Kubernetes. Para ver uma lista completa de comandos, consulte os crictl documentos e os documentos de depuração do Kubernetes.