É possível configurar seu cluster do Google Distributed Cloud para que os nós de trabalho
usem registros particulares, incluindo o Artifact Registry. Os registros particulares no nível do nó são destinados ao uso com suas cargas de trabalho para dar mais controle sobre envios de imagem e a segurança relacionada. Quando você configura um cluster com os registros particulares, conforme descrito
neste documento, o Google Distributed Cloud faz as atualizações necessárias na configuração do containerd. Depois que o cluster é configurado, todos os pods em nós qualificados podem
usar os registros sem precisar especificar imagePullSecrets
na especificação.
Esse recurso pode ser ativado ou desativado a qualquer momento no ciclo de vida do cluster.
A lista a seguir mostra a fase de lançamento desse recurso por versão:
- 1.30 e versões mais recentes: GA
- 1.29: pré-lançamento
Pré-requisitos
1.30 e versões mais recentes
Para usar esse recurso GA, seu cluster precisa atender aos seguintes requisitos:
- A versão do cluster precisa ser 1.30 ou mais recente.
- A versão do pool de nós precisa ser 1.29 ou mais recente. Um cluster 1.30 pode ter pools de nós na versão 1.28, mas o recurso só funciona para pools de nós na versão 1.29 ou mais recente.
Esse recurso é para clusters de usuário e autogerenciados (híbridos e autônomos) com pools de nós de trabalho, conforme mostrado na tabela a seguir:
Modelo de implantação Tipos de cluster compatíveis Implantação de clusters de administrador e usuário Cluster de administrador
Cluster de usuário 1
Cluster de usuário 2
Implantação de clusters híbridos Cluster híbrido
Cluster de usuário 1
Cluster de usuário 2
Implantação de clusters autônomos Cluster autônomo
1,29
Para usar esse recurso de prévia, seu cluster precisa atender aos seguintes requisitos:
- A versão do cluster precisa ser 1.29.
- A versão do pool de nós precisa ser 1.29.Nem todos os pools de nós precisam estar na versão 1.29, mas o recurso só funciona para pools de nós nessa versão.
- O cluster precisa ter a anotação de recurso
preview.baremetal.cluster.gke.io/private-registry: "enable"
em prévia. Esse recurso é para clusters de usuário e autogerenciados (híbridos e autônomos) com pools de nós de trabalho, conforme mostrado na tabela a seguir:
Modelo de implantação Tipos de cluster compatíveis Implantação de clusters de administrador e usuário Cluster de administrador
Cluster de usuário 1
Cluster de usuário 2
Implantação de clusters híbridos Cluster híbrido
Cluster de usuário 1
Cluster de usuário 2
Implantação de clusters autônomos Cluster autônomo
Configurar um cluster autogerenciado para registros particulares
Para configurar um cluster autônomo ou híbrido para usar registros particulares no nível do nó:
Edite o arquivo de configuração do cluster para adicionar o bloco
privateRegistries
na seção de credenciais:--- gcrKeyPath: baremetal/gcr.json sshPrivateKeyPath: .ssh/id_rsa ... privateRegistries: - host: REGISTRY_HOST caCertPath: CA_CERT_PATH pullCredentialConfigPath: CREDENTIALS_FILE_PATH ... --- apiVersion: v1 kind: Namespace metadata: name: cluster-hybrid-basic --- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: hybrid-basic namespace: cluster-hybrid-basic annotations: preview.baremetal.cluster.gke.io/private-registry: "enable" # Version 1.29 clusters only ... spec: type: hybrid ...
Substitua:
REGISTRY_HOST
: o nome de domínio ou endereço IP do registro particular e a porta. Por exemplo,10.200.0.2:5007
.CA_CERT_PATH
: o caminho do arquivo de certificado da AC (AC raiz do servidor). Por exemplo,/root/cert.pem
. Se o registro particular não exigir um certificado TLS particular, omita esse campo.CREDENTIALS_FILE_PATH
: o caminho do arquivo de configuração,config.json
(por exemplo,$HOME/.docker/config.json
). Para autenticar o containerd e acessar seu registro particular,config.json
precisa conter uma versão codificada em base64 das suas credenciais na seçãoauths
do arquivo.Para o Artifact Registry, faça a autenticação usando uma chave JSON de conta de serviço com os seguintes valores:
username
:_json_key
password
: o conteúdo inteiro do arquivo de chave JSON da conta de serviço. Coloque o conteúdo da chave JSON colada entre aspas simples ('
) para evitar erros de análise.
Para mais informações sobre como gerar esse arquivo, consulte Configurar a autenticação no Artifact Registry para Docker na documentação do Artifact Registry.
Para outros registros particulares, a string
auth
codificada em base64 geralmente é formada deUSERNAME:PASSWORD
, usando suas credenciais específicas de registro. Se o servidor de registro particular não exigir credenciais para autenticação, omita o campopullCredentialConfigPath
.Para proteger dados sensíveis, use
chown
echmod
para restringir o acesso ao arquivo de configuração.
Aplique as mudanças ao cluster:
bmctl update cluster -c CLUSTER_NAME --kubeconfig=CLUSTER_KUBECONFIG
Substitua:
CLUSTER_NAME
: o nome do cluster que você quer atualizar.CLUSTER_KUBECONFIG
: caminho do arquivo kubeconfig do cluster autogerenciado (híbrido ou independente).
Configurar um cluster de usuário para registros particulares
Com os clusters de usuário, a configuração do registro particular é especificada na especificação de recurso do cluster de usuário, que está localizada no cluster de administrador. Além disso, você precisa armazenar as credenciais do registro particular em um Secret, que também está localizado no cluster de administrador:
Crie um secret do Kubernetes do tipo
kubernetes.io/dockerconfigjson
para as credenciais do registro:Se você quiser restringir o secret a um namespace específico, adicione a flag
--namespace
ao comando a seguir para especificar o nome do namespace. Se o secret não estiver no mesmo namespace do cluster, adicione a anotaçãobaremetal.cluster.gke.io/mark-source: "true"
, conforme mostrado no exemplo ao final desta etapa.kubectl create secret docker-registry CREDS_SECRET_NAME \ --from-file=.dockerconfigjson=CREDENTIALS_FILE_PATH \ --kubeconfig=ADMIN_KUBECONFIG
Substitua:
CREDS_SECRET_NAME
: o nome do secret.CREDENTIALS_FILE_PATH
: o caminho do arquivo de configuração,config.json
(por exemplo,$HOME/.docker/config.json
). Para autenticar o containerd e acessar seu registro particular,config.json
precisa conter uma versão codificada em base64 das suas credenciais na seçãoauths
do arquivo.Para o Artifact Registry, faça a autenticação usando uma chave JSON de conta de serviço com os seguintes valores:
username
:_json_key
password
: o conteúdo inteiro do arquivo de chave JSON da conta de serviço. Coloque o conteúdo da chave JSON colada entre aspas simples ('
) para evitar erros de análise.
Para mais informações sobre como gerar esse arquivo, consulte Configurar a autenticação no Artifact Registry para Docker na documentação do Artifact Registry.
Para outros registros particulares, a string
auth
codificada em base64 geralmente é formada deUSERNAME:PASSWORD
, usando suas credenciais específicas de registro. Se o servidor de registro particular não exigir credenciais para autenticação, omita o campopullCredentialSecretRef
.Para proteger dados sensíveis, use
chown
echmod
para restringir o acesso ao arquivo de configuração.
O secret vai ser semelhante ao exemplo abaixo:
apiVersion: v1 data: .dockerconfigjson: ewoJImF1dGhzIjogewoJ...clpYSXdNak14IgoJCX0KCX0KfQ== kind: Secret metadata: creationTimestamp: "2024-04-28T22:06:06Z" name: private-registry-secret namespace: default resourceVersion: "5055821" ... annotations: ... baremetal.cluster.gke.io/mark-source: "true" type: kubernetes.io/dockerconfigjson
Se aplicável, armazene o certificado da CA do registro em um Secret.
A resposta será semelhante a:
apiVersion: v1 kind: Secret metadata: annotations: baremetal.cluster.gke.io/mark-source: "true" name: ca-9dd74fd308bac6df562c7a7b220590b5 namespace: some-namespace type: Opaque data: ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR2RENDQXFTZ0F3SUJBZ0lVQi 3UGxjUzVFVk8vS0xuYjZiMHRhRFVleXJvd0RRWUpLb1pJaHZjTkFRRUwKQlFBd2ZqRUxNQWtHQ ... QnpPTkxTRFZJVk5LMm9YV1JvNEpJY0ZoNFZ4MWRMRHpqMldEaHhrUEljWEhLdGR3dk5iS2tocU LUVORCBDRVJUSUZJQ0FURS0tLS0tCg== ```
Edite o arquivo de configuração do cluster de usuário para ativar e configurar o registro privado:
Para clusters da versão 1.29, adicione a anotação de recurso Prévia
preview.baremetal.cluster.gke.io/private-registry: "enable"
para ativar o recurso. Para clusters da versão 1.30 e mais recentes, o recurso de registro particular é ativado por padrão.apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: user-basic namespace: cluster-user-basic resourceVersion: "766027" annotations: ... preview.baremetal.cluster.gke.io/private-registry: "enable" ...
Na seção
nodeConfig
do arquivo de configuração do cluster de usuário, adicione o blocoprivateRegistries
:apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: user-basic ... spec: bypassPreflightCheck: false ... nodeConfig: containerRuntime: containerd podDensity: maxPodsPerNode: 250 privateRegistries: - caCertSecretRef: name: CA_CERT_SECRET_NAME namespace: CA_CERT_SECRET_NAMESPACE host: REGISTRY_HOST pullCredentialSecretRef: name: CREDS_SECRET_NAME namespace: CREDS_SECRET_NAMESPACE
Substitua:
CA_CERT_SECRET_NAME
: o nome do secret que você criou para armazenar o certificado da CA. Se você não criou esse secret, remova o blococaCertSecretRef
.CA_CERT_SECRET_NAMESPACE
: o nome do namespace do secret do certificado da CA, se você o criou.REGISTRY_HOST
: o nome de domínio ou endereço IP do registro particular e a porta. Por exemplo,10.200.0.2:5007
.CREDS_SECRET_NAME
: o nome do secret do tipokubernetes.io/dockerconfigjson
para as credenciais do registro.CREDS_SECRET_NAMESPACE
: o nome do namespace do secret para as credenciais do registro.
Aplique as mudanças ao cluster:
bmctl update cluster -c USER_CLUSTER_NAME --kubeconfig=ADMIN_KUBECONFIG
Substitua:
USER_CLUSTER_NAME
: o nome do cluster que você está atualizando.ADMIN_KUBECONFIG
: caminho do arquivo kubeconfig do cluster de administrador.