Configurar un registro privado de contenedores

En esta página se explica cómo configurar un servidor de registro de contenedores para Google Distributed Cloud (solo software) para VMware.

Esta página está dirigida a administradores, arquitectos y operadores que configuran, monitorizan y gestionan la infraestructura tecnológica. Para obtener más información sobre los roles habituales y las tareas de ejemplo a las que hacemos referencia en el contenido, consulta Roles y tareas habituales de los usuarios de GKE. Google Cloud

Información general

De forma predeterminada, durante la creación o la actualización de un clúster, Google Distributed Cloud extrae imágenes del sistema de gcr.io/gke-on-prem-release mediante la cuenta de servicio de acceso a componentes. También puedes proporcionar tu propio servidor de registro de contenedores para que las imágenes del sistema se extraigan de tu servidor de registro privado.

Google Distributed Cloud no admite registros de contenedores no seguros. Cuando inicies el servidor del registro de contenedores, debes proporcionar un certificado y una clave. El certificado puede estar firmado por una autoridad de certificación (CA) pública o puede tener una firma automática.

Crear un servidor de registro de contenedores

Para saber cómo crear un servidor de registro de contenedores, consulta Ejecutar un registro accesible externamente en la documentación de Docker.

Configurar el registro

Para usar un registro de contenedores privado, puedes usar la gkectlherramienta de línea de comandos o Terraform.

gkectl

  1. Añade la sección privateRegistry al archivo de configuración del clúster de administradores antes de crear el clúster.

    Cuando se rellena esta sección:

    • Cuando ejecutas el comando gkectl prepare antes de crear o actualizar un clúster, el comando extrae las imágenes del archivo tar especificado en el campo bundlePath del archivo de configuración del clúster de administrador y sube las imágenes a tu servidor de registro privado.

    • Durante la creación o la actualización del clúster, las imágenes del sistema se extraen del servidor de registro privado.

  2. Si tu red está detrás de un servidor proxy, rellena la sección proxy.

Terraform

  1. Sigue los pasos de la pestaña Terraform en Crear un clúster de administrador para rellenar el archivo de configuración del clúster de administrador.

  2. Añade lo siguiente al archivo de configuración del clúster de administrador:

    private_registry_config {
      address = "ADDRESS"
      ca_cert = "CA_CERT"
    }
    

    Haz los cambios siguientes:

    • ADDRESS: la dirección IP o el nombre de dominio completo (FQDN) del equipo que ejecuta tu registro privado.

    • CA_CERT: la clave pública del certificado de la AC del registro privado.

  3. Si tu red está detrás de un servidor proxy, añade lo siguiente:

    proxy {
      url: "PROXY_SERVER_ADDRESS"
      no_proxy: "BYPASS_LIST"
    }
    

    Haz los cambios siguientes:

    • PROXY_SERVER_ADDRESS: dirección HTTP de tu servidor proxy. Incluya el número de puerto aunque sea el mismo que el puerto predeterminado del esquema.

    • BYPASS_LIST: lista separada por comas de direcciones IP, intervalos de direcciones IP, nombres de host y nombres de dominio que no deben pasar por el servidor proxy.

    Ejemplo:

    url: "http://my-proxy.example.local:80"
    no_proxy: "192.0.2.0/24,my-host.example.local,198.51.100.0"
    

    Cuando Google Distributed Cloud envía una solicitud a una de estas direcciones, hosts o dominios, la solicitud omite el servidor proxy y se envía directamente al destino.

  4. Sigue los pasos que se indican en la pestaña Terraform de la sección Crear un clúster de administrador para verificar el archivo de configuración y el plan de Terraform y, a continuación, crear el clúster de arranque.

  5. Cuando ejecutas el comando gkectl register bootstrap, gkectl te pide que introduzcas el nombre de usuario y la contraseña del registro privado.

Durante la creación del clúster, las imágenes del sistema se extraen de tu servidor de registro privado.

Limitaciones de los clústeres avanzados y del paquete completo

Hay dos paquetes de Google Distributed Cloud disponibles: completo y normal. Para determinar qué paquete se encuentra en tu estación de trabajo de administrador, consulta el campo bundlePath de tu archivo de configuración de clúster de administrador. Si el nombre del archivo termina en -full, el paquete completo estará en tu estación de trabajo de administrador. Si el nombre de archivo no termina en -full, el paquete normal se encuentra en tu estación de trabajo de administrador.

Si has creado tu estación de trabajo de administrador con el comando gkeadm, este comando crea la VM de la estación de trabajo de administrador con el paquete completo y configura el campo bundlePath en el archivo de configuración del clúster de administrador.

Si la agrupación avanzada está habilitada, hay limitaciones al usar el paquete completo con un registro privado, como se indica a continuación:

  • Versión 1.31: el paquete completo no es compatible con un registro privado. Para usar un registro privado en un clúster avanzado, sigue estos pasos:

    1. Descargue el paquete de tamaño normal en su estación de trabajo de administrador.
    2. Actualiza el nombre de archivo en el campo bundlePath del archivo de configuración del clúster de administrador.
  • Versión 1.32: se admite el uso del paquete completo, pero el comando gkectl prepare descarga imágenes de gcr.io/gke-on-prem-release en lugar del archivo tar. Sin embargo, el comando sí sube las imágenes a tu registro privado para que las imágenes del sistema se extraigan de tu registro privado durante la creación o la actualización del clúster.

Diferencias entre los clústeres normales y los avanzados

Los clústeres avanzados presentan varias diferencias clave con respecto a los clústeres estándar:

  • Cuando usas un registro privado, las imágenes parecen extraerse de gcr.io, no del nombre de host de tu registro privado. Este cambio es el esperado, aunque las imágenes se extraigan de tu servidor de registro privado.
  • Las extracciones de imágenes usan las credenciales del archivo /etc/containerd/config.toml de cada máquina que se conecta al registro privado, en lugar de las del secreto private-registry-creds del clúster.
  • En el caso de todas las imágenes de gcr.io, el clúster intenta extraerlas primero del registro privado. Si la imagen no está en el registro privado, el sistema la extrae de gcr.io a través de Internet. Para detener esta alternativa, configura noProxy o usa reglas de cortafuegos para bloquear el tráfico de gcr.io.

Para comprobar que las imágenes se extraen de la fuente correcta, consulta Verificar que las imágenes se extraen del servidor de registro.

Verificar que las imágenes se extraen de tu servidor de registro

La forma de verificar que las imágenes se extraen de tu servidor de registro depende de si el clúster avanzado está habilitado.

  • Si el clúster avanzado no está habilitado, ejecuta el siguiente comando:

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get pods \
        --all-namespaces -o jsonpath="{.items[*].spec['initContainers', 'containers'][*].image}"
    

    Sustituye ADMIN_CLUSTER_KUBECONFIG por la ruta del archivo kubeconfig de tu clúster de administrador.

    La salida de este comando muestra todas las imágenes de tu clúster. Puede verificar que todas las imágenes de Google Distributed Cloud proceden de su propio servidor de registro.

  • Si el clúster avanzado está habilitado, sigue estos pasos:

    Para determinar si containerd está obteniendo imágenes de tu registro local, examina el contenido de un archivo llamado config.toml, tal como se muestra en los siguientes pasos:

    1. Inicia sesión en un nodo y examina el contenido del archivo /etc/containerd/config.toml.
    2. Comprueba el campo plugins."io.containerd.grpc.v1.cri".registry.mirrors del archivo config.toml para ver si tu servidor de registro aparece en el campo endpoint.

      A continuación, se muestra un fragmento de un archivo config.toml de ejemplo.

      version = 2
      root = "/var/lib/containerd"
      state = "/run/containerd"
      ...
      [plugins."io.containerd.grpc.v1.cri".registry]
      [plugins."io.containerd.grpc.v1.cri".registry.configs]
      [plugins."io.containerd.grpc.v1.cri".registry.configs."gcr.io"]
      [plugins."io.containerd.grpc.v1.cri".registry.configs."privateregistry2.io".tls]
      ca_file = '/etc/containerd/certs.d/privateregistry2.io/ca.crt'
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors."gcr.io"]
      endpoint = ["http://privateregistry.io", "http://privateregistry2.io"]
      ...
      
    3. Si tu réplica de registro aparece en el campo endpoint, significa que el nodo está obteniendo imágenes de tu réplica de registro en lugar de hacerlo de Artifact Registry.