Pode configurar o cluster do Google Distributed Cloud para que os respetivos nós de trabalho possam usar registos privados, incluindo o Artifact Registry. Os registos privados ao nível do nó destinam-se a ser usados com as suas cargas de trabalho para lhe dar mais controlo sobre as obtenções de imagens e a respetiva segurança. Quando configura um cluster com os registos privados, conforme descrito
neste documento, o Google Distributed Cloud atualiza a configuração do containerd
em conformidade. Depois de o cluster estar configurado, todos os pods em nós qualificados podem usar os registos sem ter de especificar imagePullSecrets
na especificação do pod.
Esta funcionalidade pode ser ativada ou desativada em qualquer altura no ciclo de vida do cluster.
A lista seguinte mostra a fase de lançamento desta funcionalidade por versão:
- 1.30 e posterior: GA
- 1.29: Pré-visualizar
Pré-requisitos
1.30 e posteriores
Para usar esta funcionalidade de GA, o seu cluster tem de cumprir os seguintes requisitos:
- A versão do cluster tem de ser 1.30 ou posterior.
- A versão do conjunto de nós tem de ser 1.29 ou posterior (um cluster 1.30 pode ter conjuntos de nós na versão 1.28, mas a funcionalidade só funciona para conjuntos de nós na versão 1.29 ou posterior).
Esta funcionalidade destina-se a clusters de utilizadores e clusters de gestão autónoma (híbridos e autónomos) com pools de nós de trabalho, conforme mostrado na tabela seguinte:
Modelo de implementação Tipos de clusters suportados Implementação de clusters de administrador e de utilizador Cluster de administração
User cluster 1
Cluster de utilizadores 2
Implementação de clusters híbridos Cluster híbrido
User cluster 1
Cluster de utilizadores 2
Implementação de cluster autónomo Cluster autónomo
1,29
Para usar esta funcionalidade de pré-visualização, o seu cluster tem de cumprir os seguintes requisitos:
- A versão do cluster tem de ser 1.29.
- A versão do conjunto de nós tem de ser 1.29 (nem todos os conjuntos de nós têm de estar na versão 1.29, mas a funcionalidade só funciona para conjuntos de nós na versão 1.29).
- O cluster tem de ter a anotação da funcionalidade de
preview.baremetal.cluster.gke.io/private-registry: "enable"
pré-visualização. Esta funcionalidade destina-se a clusters de utilizadores e clusters de gestão autónoma (híbridos e autónomos) com pools de nós de trabalho, conforme mostrado na tabela seguinte:
Modelo de implementação Tipos de clusters suportados Implementação de clusters de administrador e de utilizador Cluster de administração
User cluster 1
Cluster de utilizadores 2
Implementação de clusters híbridos Cluster híbrido
User cluster 1
Cluster de utilizadores 2
Implementação de cluster autónomo Cluster autónomo
Configure um cluster de autogestão para registos privados
Para configurar um cluster autónomo ou híbrido para usar registos privados ao nível do nó:
Edite o ficheiro de configuração do cluster para adicionar o bloco
privateRegistries
na secçã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 o seguinte:
REGISTRY_HOST
: o nome do domínio ou o endereço IP do registo privado e a porta. Por exemplo:10.200.0.2:5007
.CA_CERT_PATH
: o caminho do ficheiro de certificado da CA (CA raiz do servidor). Por exemplo:/root/cert.pem
. Se o seu registo privado não exigir um certificado TLS privado, pode omitir este campo.CREDENTIALS_FILE_PATH
: o caminho do ficheiro de configuração,config.json
(por exemplo,$HOME/.docker/config.json
). Para autenticar o containerd para aceder ao seu registo privado,config.json
tem de conter uma versão codificada em base64 das suas credenciais na secçãoauths
do ficheiro.Para o Artifact Registry, faça a autenticação através de uma chave JSON de conta de serviço com os seguintes valores:
username
:_json_key
password
: todo o conteúdo do ficheiro de chave JSON da conta de serviço. Inclua o conteúdo da chave JSON colado entre aspas simples ('
) para evitar erros de análise.
Para mais informações sobre como gerar este ficheiro, consulte o artigo Configure a autenticação no Artifact Registry para o Docker na documentação do Artifact Registry.
Para outros registos privados, a string
auth
codificada em base64 é normalmente formada a partir deUSERNAME:PASSWORD
, usando as credenciais específicas do seu registo. Se o seu servidor de registo privado não exigir credenciais para autenticação, pode omitir o campopullCredentialConfigPath
.Para proteger dados confidenciais, pode usar
chown
echmod
para restringir o acesso ao ficheiro de configuração.
Aplique as alterações ao cluster:
bmctl update cluster -c CLUSTER_NAME --kubeconfig=CLUSTER_KUBECONFIG
Substitua o seguinte:
CLUSTER_NAME
: o nome do cluster que quer atualizar.CLUSTER_KUBECONFIG
: caminho do ficheiro kubeconfig do cluster autogerido (híbrido ou autónomo).
Configure um cluster de utilizadores para registos privados
Com os clusters de utilizadores, a configuração do registo privado é especificada na especificação do recurso user cluster, que se encontra no cluster de administrador. Além disso, tem de armazenar as credenciais do registo privado num Secret, que também se encontra no cluster de administrador:
Crie um secret do Kubernetes do tipo
kubernetes.io/dockerconfigjson
para as credenciais do registo:Se quiser restringir o âmbito do segredo a um espaço de nomes específico, adicione a flag
--namespace
ao seguinte comando para especificar o nome do espaço de nomes. Se o segredo não estiver no mesmo espaço de nomes que o cluster, adicione a anotaçãobaremetal.cluster.gke.io/mark-source: "true"
, conforme mostrado no exemplo no final deste passo.kubectl create secret docker-registry CREDS_SECRET_NAME \ --from-file=.dockerconfigjson=CREDENTIALS_FILE_PATH \ --kubeconfig=ADMIN_KUBECONFIG
Substitua o seguinte:
CREDS_SECRET_NAME
: o nome do seu segredo.CREDENTIALS_FILE_PATH
: o caminho do ficheiro de configuração,config.json
(por exemplo,$HOME/.docker/config.json
). Para autenticar o containerd para aceder ao seu registo privado,config.json
tem de conter uma versão codificada em base64 das suas credenciais na secçãoauths
do ficheiro.Para o Artifact Registry, faça a autenticação através de uma chave JSON de conta de serviço com os seguintes valores:
username
:_json_key
password
: todo o conteúdo do ficheiro de chave JSON da conta de serviço. Inclua o conteúdo da chave JSON colado entre aspas simples ('
) para evitar erros de análise.
Para mais informações sobre como gerar este ficheiro, consulte o artigo Configure a autenticação no Artifact Registry para o Docker na documentação do Artifact Registry.
Para outros registos privados, a string
auth
codificada em base64 é normalmente formada a partir deUSERNAME:PASSWORD
, usando as credenciais específicas do seu registo. Se o seu servidor de registo privado não exigir credenciais para autenticação, pode omitir o campopullCredentialSecretRef
.Para proteger dados confidenciais, pode usar
chown
echmod
para restringir o acesso ao ficheiro de configuração.
O seu segredo deve ser semelhante ao seguinte exemplo:
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 de AC para o registo num segredo.
O segredo tem um aspeto semelhante ao seguinte:
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 ficheiro de configuração do cluster de utilizadores para ativar e configurar o registo privado:
Apenas para clusters da versão 1.29, adicione a anotação da funcionalidade Preview
preview.baremetal.cluster.gke.io/private-registry: "enable"
para ativar a funcionalidade. Para clusters da versão 1.30 e posteriores, a funcionalidade de registo privado está ativada por predefiniçã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 secção
nodeConfig
do ficheiro de configuração do cluster de utilizadores, 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 o seguinte:
CA_CERT_SECRET_NAME
: o nome do segredo que criou para armazenar o certificado da AC. Se não criou este segredo, remova o blococaCertSecretRef
.CA_CERT_SECRET_NAMESPACE
: o nome do espaço de nomes para o segredo do certificado da AC, se o tiver criado.REGISTRY_HOST
: o nome de domínio ou o endereço IP do registo privado e a porta. Por exemplo:10.200.0.2:5007
.CREDS_SECRET_NAME
: o nome do segredo do tipokubernetes.io/dockerconfigjson
para as credenciais de registo.CREDS_SECRET_NAMESPACE
: o nome do espaço de nomes para o segredo das credenciais do registo.
Aplique as alterações ao cluster:
bmctl update cluster -c USER_CLUSTER_NAME --kubeconfig=ADMIN_KUBECONFIG
Substitua o seguinte:
USER_CLUSTER_NAME
: o nome do cluster que está a atualizar.ADMIN_KUBECONFIG
: caminho do ficheiro kubeconfig do cluster de administrador.