É possível configurar o cluster do Google Distributed Cloud para que os nós de trabalho possam usar 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 mais recentes: GA
- 1.29: Visualização
Pré-requisitos
1.30 e 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 clusters 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 visualização, 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 na versão 1.29.
- O cluster precisa ter a
preview.baremetal.cluster.gke.io/private-registry: "enable"anotação de recurso de visualização. Esse recurso é para clusters de usuário e clusters 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
privateRegistriesna 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 para acessar seu registro particular,config.jsonprecisa conter uma versão codificada em base64 das suas credenciais na seçãoauthsdo arquivo.Para o Artifact Registry, autentique usando uma chave JSON da conta de serviço com os seguintes valores:
username:_json_keypassword: todo o conteúdo do arquivo de chave JSON da conta de serviço. Coloque o conteúdo da chave JSON colado 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
authcodificada em base64 é normalmente formada porUSERNAME:PASSWORD, usando suas credenciais de registro específicas. Se o servidor de registro particular não exigir credenciais para autenticação, omita o campopullCredentialConfigPath.Para proteger dados sensíveis, use
chownechmodpara restringir o acesso ao arquivo de configuração.
Aplique as mudanças no cluster:
bmctl update cluster -c CLUSTER_NAME --kubeconfig=CLUSTER_KUBECONFIGSubstitua:
CLUSTER_NAME: o nome do cluster que você quer atualizar.CLUSTER_KUBECONFIG: caminho do arquivo kubeconfig do cluster autogerenciado (híbrido ou autônomo).
Configurar um cluster de usuário para registros particulares
Com clusters de usuário, a configuração do registro particular é especificada na especificação de recursos do cluster de usuário, que está localizada no cluster de administrador. Além disso, é necessário 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/dockerconfigjsonpara as credenciais do registro:Se você quiser definir o escopo do secret para um namespace específico, adicione a flag
--namespaceao 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 no final desta etapa.kubectl create secret docker-registry CREDS_SECRET_NAME \ --from-file=.dockerconfigjson=CREDENTIALS_FILE_PATH \ --kubeconfig=ADMIN_KUBECONFIGSubstitua:
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 para acessar seu registro particular,config.jsonprecisa conter uma versão codificada em base64 das suas credenciais na seçãoauthsdo arquivo.Para o Artifact Registry, autentique usando uma chave JSON da conta de serviço com os seguintes valores:
username:_json_keypassword: todo o conteúdo do arquivo de chave JSON da conta de serviço. Coloque o conteúdo da chave JSON colado 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
authcodificada em base64 é normalmente formada porUSERNAME:PASSWORD, usando suas credenciais de registro específicas. Se o servidor de registro particular não exigir credenciais para autenticação, omita o campopullCredentialSecretRef.Para proteger dados sensíveis, use
chownechmodpara 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/dockerconfigjsonSe aplicável, armazene o certificado da AC para o 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 particular:
Para clusters da versão 1.29, adicione a anotação de recurso de visualização
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
nodeConfigdo 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 AC. Se você não criou esse secret, remova o blococaCertSecretRef.CA_CERT_SECRET_NAMESPACE: o nome do namespace do secret do certificado da AC, 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/dockerconfigjsonpara as credenciais do registro.CREDS_SECRET_NAMESPACE: o nome do namespace do secret para as credenciais do registro.
Aplique as mudanças no cluster:
bmctl update cluster -c USER_CLUSTER_NAME --kubeconfig=ADMIN_KUBECONFIGSubstitua:
USER_CLUSTER_NAME: o nome do cluster que você está atualizando.ADMIN_KUBECONFIG: caminho do arquivo kubeconfig do cluster de administrador.