Configura nodos para autenticarte en un registro privado

Puedes configurar tu clúster de Google Distributed Cloud para que sus nodos trabajadores puedan usar registros privados. Los registros privados a nivel de nodo están diseñados para usarse con tus cargas de trabajo a fin de brindarte más control sobre las extracciones de imágenes y la seguridad relacionada. Cuando configuras un clúster con los registros privados como se describe en este documento, Google Distributed Cloud actualiza la configuración de containerd según corresponda. Una vez que el clúster está configurado, todos los Pods en los nodos calificados 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.

Requisitos previos

Para usar esta función de vista previa, tu clúster debe cumplir con los siguientes requisitos:

  • Esta función es para clústeres de usuario y clústeres de administración automática (híbridos e independientes) con grupos de nodo trabajador.
  • La versión del clúster debe ser 1.29.
  • La versión del grupo de nodos debe ser 1.29 (no todos los grupos de nodos deben estar en la versión 1.29, pero la función solo funciona para grupos de nodos en la versión 1.29).
  • El clúster debe tener la anotación de función de vista previa preview.baremetal.cluster.gke.io/private-registry: "enable".

Configurar un clúster de autoadministración para registros privados

Para configurar un clúster independiente o híbrido a fin de usar registros privados a nivel de nodo, sigue estos pasos:

  1. Edita el archivo de configuración del clúster para agregar 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"
        ...
    spec:
      type: hybrid
      ...
    

    Reemplaza lo siguiente:

    • REGISTRY_HOST: Es 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: Es la ruta de acceso del archivo de certificado de la AC (CA 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: Es la ruta del archivo que contiene las credenciales para acceder a tu registro privado. Por ejemplo: /root/.docker/config.json Si tu servidor de registro privado no requiere credenciales para la autenticación, puedes omitir este campo.

  2. Aplica los cambios al clúster:

    bmctl update cluster -c CLUSTER_NAME --kubeconfig=ADMIN_KUBECONFIG
    

    Reemplaza lo siguiente:

    • CLUSTER_NAME: Es el nombre del clúster que deseas actualizar.

    • ADMIN_KUBECONFIG: Es la ruta de acceso del archivo kubeconfig del clúster de administrador.

Configura un clúster de usuario para registros privados

Con los clústeres de usuario, la configuración del registro privado se especifica en la especificación de recursos del clúster. Además, para los clústeres de usuario, debes almacenar las credenciales de registro privado en un Secret:

  1. Crea un secreto de Kubernetes de tipo kubernetes.io/dockerconfigjson para las credenciales de registro:

    Si deseas definir el alcance del Secret en un espacio de nombres específico, agrega la marca --namespace al siguiente comando para especificar el nombre del espacio de nombres.

    kubectl create secret docker-registry CREDS_SECRET_NAME \
        --from-file=.dockerconfigjson=CREDENTIALS_FILE_PATH \
        --kubeconfig=ADMIN_KUBECONFIG
    

    Reemplaza lo siguiente:

    • CREDS_SECRET_NAME: Es el nombre del Secret.

    • CREDENTIALS_FILE_PATH: Es la ruta de acceso del archivo de configuración de Docker. Por ejemplo, /root/.docker/config.json

    Tu secreto debería ser similar al 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 el secreto no está en el mismo espacio de nombres que el clúster, agrega la anotación baremetal.cluster.gke.io/mark-source: "true", como se muestra en el ejemplo anterior.

  2. Si corresponde, almacena el certificado de la AC para el registro en un Secret.

    El secreto es 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==
      ```
    
  3. Edita el archivo de configuración del clúster de usuario para habilitar y configurar el registro privado:

    1. Agrega la anotación preview.baremetal.cluster.gke.io/private-registry: "enable" para habilitar el registro privado mientras se encuentra en la versión preliminar.

      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"
      ...
      
    2. En la sección nodeConfig del archivo de configuración del clúster de usuario, agrega el bloque privateRegistries:

      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
      

    Reemplaza lo siguiente:

    • CA_CERT_SECRET_NAME: Es el nombre del Secreto que creaste para almacenar el certificado de la AC. Si no creaste este secreto, quita el bloque caCertSecretRef.

    • CA_CERT_SECRET_NAMESPACE: Es el nombre del espacio de nombres para el Secreto de certificado de la AC, si lo creaste.

    • REGISTRY_HOST: Es 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: Es el nombre del Secret de tipo kubernetes.io/dockerconfigjson para las credenciales de registro.

    • CREDS_SECRET_NAMESPACE: Es el nombre del espacio de nombres del secreto de las credenciales de registro.

  4. Aplica los cambios al clúster:

    bmctl update cluster -c USER_CLUSTER_NAME --kubeconfig=ADMIN_KUBECONFIG
    

    Reemplaza lo siguiente:

    • USER_CLUSTER_NAME: Es el nombre del clúster que estás actualizando.

    • ADMIN_KUBECONFIG: Es la ruta de acceso del archivo kubeconfig del clúster de administrador.