Puedes configurar tu clúster de Google Distributed Cloud para que sus nodos de trabajador puedan usar registros privados, incluido Artifact Registry. Los registros privados a nivel de nodo están pensados para usarse con tus cargas de trabajo y te permiten tener más control sobre las extracciones de imágenes y su seguridad relacionada. Cuando configuras un clúster con los registros privados tal como se describe en este documento, Google Distributed Cloud actualiza la configuración de containerd en consecuencia. Una vez configurado el clúster, todos los pods de los nodos aptos pueden usar los registros sin tener que especificar imagePullSecrets
en las especificaciones del pod.
Esta función se puede habilitar o inhabilitar en cualquier momento del ciclo de vida del clúster.
En la siguiente lista se muestra la fase de lanzamiento de esta función por versión:
- 1.30 y versiones posteriores: GA
- 1.29: Vista previa
Requisitos previos
1.30 y versiones posteriores
Para usar esta función de GA, tu clúster debe cumplir los siguientes requisitos:
- La versión del clúster debe ser la 1.30 o una posterior.
- La versión del grupo de nodos debe ser la 1.29 o una posterior (un clúster 1.30 puede tener grupos de nodos con la versión 1.28, pero la función solo funciona con grupos de nodos con la versión 1.29 o una posterior).
Esta función está disponible para clústeres de usuario y clústeres autogestionados (híbridos y independientes) con grupos de nodos de trabajador, tal como se muestra en la siguiente tabla:
Modelo de implementación Tipos de clúster admitidos Despliegue de clústeres de administrador y de usuario Clúster de administrador
Clúster de usuarios 1
Clúster de usuarios 2
Despliegue de clúster híbrido Clúster híbrido
Clúster de usuarios 1
Clúster de usuarios 2
Despliegue de clústeres independientes Clúster independiente
1,29
Para usar la función Vista previa, tu clúster debe cumplir los siguientes requisitos:
- La versión del clúster debe ser 1.29.
- La versión del grupo de nodos debe ser 1.29 (no es necesario que todos los grupos de nodos tengan la versión 1.29, pero la función solo funciona con los grupos de nodos que tengan la versión 1.29).
- El clúster debe tener la anotación de la función de
preview.baremetal.cluster.gke.io/private-registry: "enable"
vista previa. Esta función está disponible para clústeres de usuario y clústeres autogestionados (híbridos y independientes) con grupos de nodos de trabajador, tal como se muestra en la siguiente tabla:
Modelo de implementación Tipos de clúster admitidos Despliegue de clústeres de administrador y de usuario Clúster de administrador
Clúster de usuarios 1
Clúster de usuarios 2
Despliegue de clúster híbrido Clúster híbrido
Clúster de usuarios 1
Clúster de usuarios 2
Despliegue de clústeres independientes Clúster independiente
Configurar un clúster autogestionado para registros privados
Para configurar un clúster independiente o híbrido para que use registros privados a nivel de nodo, sigue estos pasos:
Edita el archivo de configuración del clúster para añadir el bloque
privateRegistries
en la sección de credenciales:--- 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 ...
Haz los cambios siguientes:
REGISTRY_HOST
: el nombre de dominio o la dirección IP del registro privado y el puerto. Por ejemplo:10.200.0.2:5007
.CA_CERT_PATH
: ruta del archivo de certificado de la AC (AC raíz del servidor). Por ejemplo:/root/cert.pem
. Si tu registro privado no requiere un certificado TLS privado, puedes omitir este campo.CREDENTIALS_FILE_PATH
: la ruta del archivo de configuración,config.json
(por ejemplo,$HOME/.docker/config.json
). Para autenticar containerd y acceder a tu registro privado,config.json
debe contener una versión codificada en base64 de tus credenciales en la secciónauths
del archivo.En Artifact Registry, autentícate con una clave JSON de cuenta de servicio con los siguientes valores:
username
:_json_key
password
: el contenido completo del archivo de clave JSON de la cuenta de servicio. Encierra entre comillas simples ('
) el contenido de la clave JSON pegada para evitar errores de análisis.
Para obtener más información sobre cómo generar este archivo, consulta el artículo Configurar la autenticación en Artifact Registry para Docker de la documentación de Artifact Registry.
En el caso de otros registros privados, la cadena
auth
codificada en Base64 se suele formar a partir deUSERNAME:PASSWORD
, con las credenciales de tu registro específico. Si tu servidor de registro privado no requiere credenciales para la autenticación, puedes omitir el campopullCredentialConfigPath
.Para proteger los datos sensibles, puedes usar
chown
ychmod
para restringir el acceso al archivo de configuración.
Aplica los cambios al clúster:
bmctl update cluster -c CLUSTER_NAME --kubeconfig=CLUSTER_KUBECONFIG
Haz los cambios siguientes:
CLUSTER_NAME
: el nombre del clúster que quieras actualizar.CLUSTER_KUBECONFIG
: ruta del archivo kubeconfig del clúster autogestionado (híbrido o independiente).
Configurar un clúster de usuarios para registros privados
Con los clústeres de usuarios, la configuración del registro privado se especifica en la especificación del recurso usercluster, que se encuentra en el clúster de administrador. Además, debes almacenar las credenciales del registro privado en un secreto, que también se encuentra en el clúster de administrador:
Crea un secreto de Kubernetes de tipo
kubernetes.io/dockerconfigjson
para las credenciales del registro:Si quieres limitar el ámbito del secreto a un espacio de nombres específico, añade la marca
--namespace
al siguiente comando para especificar el nombre del espacio de nombres. Si el secreto no está en el mismo espacio de nombres que el clúster, añade la anotaciónbaremetal.cluster.gke.io/mark-source: "true"
, como se muestra en el ejemplo al final de este paso.kubectl create secret docker-registry CREDS_SECRET_NAME \ --from-file=.dockerconfigjson=CREDENTIALS_FILE_PATH \ --kubeconfig=ADMIN_KUBECONFIG
Haz los cambios siguientes:
CREDS_SECRET_NAME
: el nombre del secreto.CREDENTIALS_FILE_PATH
: la ruta del archivo de configuración,config.json
(por ejemplo,$HOME/.docker/config.json
). Para autenticar containerd y acceder a tu registro privado,config.json
debe contener una versión codificada en base64 de tus credenciales en la secciónauths
del archivo.En Artifact Registry, autentícate con una clave JSON de cuenta de servicio con los siguientes valores:
username
:_json_key
password
: el contenido completo del archivo de clave JSON de la cuenta de servicio. Encierra entre comillas simples ('
) el contenido de la clave JSON pegada para evitar errores de análisis.
Para obtener más información sobre cómo generar este archivo, consulta el artículo Configurar la autenticación en Artifact Registry para Docker de la documentación de Artifact Registry.
En el caso de otros registros privados, la cadena
auth
codificada en Base64 se suele formar a partir deUSERNAME:PASSWORD
, con las credenciales de tu registro específico. Si tu servidor de registro privado no requiere credenciales para la autenticación, puedes omitir el campopullCredentialSecretRef
.Para proteger los datos sensibles, puedes usar
chown
ychmod
para restringir el acceso al archivo de configuración.
Tu secreto debería tener un aspecto similar al del siguiente ejemplo:
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
Si procede, almacena el certificado de CA del registro en un secreto.
El secreto tiene un aspecto similar al siguiente:
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== ```
Edita el archivo de configuración del clúster de usuario para habilitar y configurar el registro privado:
Solo en los clústeres de la versión 1.29, añade la anotación de la función Vista previa
preview.baremetal.cluster.gke.io/private-registry: "enable"
para habilitar la función. En los clústeres de la versión 1.30 y posteriores, la función de registro privado está habilitada de forma predeterminada.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" ...
En la sección
nodeConfig
del archivo de configuración del clúster de usuarios, añade el bloqueprivateRegistries
: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
Haz los cambios siguientes:
CA_CERT_SECRET_NAME
: el nombre del secreto que has creado para almacenar el certificado de CA. Si no has creado este secreto, elimina el bloquecaCertSecretRef
.CA_CERT_SECRET_NAMESPACE
: el nombre del espacio de nombres del secreto del certificado de CA, si lo has creado.REGISTRY_HOST
: el nombre de dominio o la dirección IP del registro privado y el puerto. Por ejemplo:10.200.0.2:5007
.CREDS_SECRET_NAME
: el nombre del tipo Secret del registro dekubernetes.io/dockerconfigjson
credenciales.CREDS_SECRET_NAMESPACE
: nombre del espacio de nombres del secreto de las credenciales del registro.
Aplica los cambios al clúster:
bmctl update cluster -c USER_CLUSTER_NAME --kubeconfig=ADMIN_KUBECONFIG
Haz los cambios siguientes:
USER_CLUSTER_NAME
: el nombre del clúster que vas a actualizar.ADMIN_KUBECONFIG
: ruta del archivo kubeconfig del clúster de administrador.