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:
- A conta de serviço predefinida do Compute Engine é a identidade dos nós.
-
Consoante a configuração da política da organização, a conta de serviço predefinida pode receber automaticamente a função de editor no seu projeto. Recomendamos vivamente que desative a concessão automática de funções aplicando a restrição da política da organização
iam.automaticIamGrantsForDefaultServiceAccounts
. Se tiver criado a sua organização após 3 de maio de 2024, esta restrição é aplicada por predefinição.Se desativar a concessão automática de funções, tem de decidir que funções conceder às contas de serviço predefinidas e, em seguida, conceder estas funções.
Se a conta de serviço predefinida já tiver a função de editor, recomendamos que substitua a função de editor por funções menos permissivas.
- Os nós que criar com a conta de serviço predefinida têm os âmbitos de acesso predefinidos do Compute Engine, incluindo o acesso só de leitura ao armazenamento. Não pode alterar os âmbitos de acesso em nós existentes.
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
Na Trusted Cloud consola, aceda à página Instâncias de VM.
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.
Selecione "Abrir na janela do navegador" ou o método de ligação da sua escolha nas opções do menu pendente.
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
Certifique-se de que tem a versão mais recente da CLI Google Cloud
gcloud components update
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 VMZONE
: o nome da zona em que a VM está localizadaVM_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
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.
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.
Extrair de um repositório privado do Artifact Registry
Consola
Na Trusted Cloud consola, aceda à página Instâncias de VM.
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.
Selecione "Abrir na janela do navegador" nas opções pendentes.
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"}
Copie o valor de
access_token
da saída devolvida sem as aspas.Extraia a imagem através de
crictl pull --creds
e do valoraccess_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
Certifique-se de que tem a versão mais recente da CLI Google Cloud
gcloud components update
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 VMZONE
: o nome da zona em que a VM está localizadaVM_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
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.
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"}
Copie o valor de
access_token
da saída devolvida sem as aspas.Extraia a imagem através de
crictl pull --creds
e do valoraccess_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.