Desplegar en Google Kubernetes Engine

En esta guía se describe cómo extraer imágenes de Artifact Registry para desplegarlas en Google Kubernetes Engine. Si quieres implementar servicios de Kubernetes autohospedados o de terceros, debes configurar la autenticación para Trusted Cloud by S3NS antes de extraer imágenes de Artifact Registry. Para autenticarte en Trusted Cloud by S3NS desde cargas de trabajo de Kubernetes que no estén en Trusted Cloud by S3NS, consulta Configurar la federación de identidades de cargas de trabajo con Kubernetes.

Google Kubernetes Engine puede extraer imágenes directamente de repositorios de Docker. Algunas versiones incluyen compatibilidad preconfigurada para extraer imágenes de repositorios de Docker de Artifact Registry.

Requisitos

En esta sección se describen los requisitos para integrar GKE.

Permisos

GKE usa los siguientes valores predeterminados al crear grupos de nodos o clústeres:

  • La cuenta de servicio predeterminada de Compute Engine es la identidad de los nodos.
  • En función de la configuración de la política de tu organización, es posible que se conceda automáticamente el rol Editor a la cuenta de servicio predeterminada de tu proyecto. Te recomendamos que inhabilites la asignación automática de roles aplicando la restricción de la política de organización iam.automaticIamGrantsForDefaultServiceAccounts. Si has creado tu organización después del 3 de mayo del 2024, esta restricción se aplica de forma predeterminada.

    Si inhabilitas la concesión automática de roles, debes decidir qué roles quieres conceder a las cuentas de servicio predeterminadas y, a continuación, concederlos tú mismo.

    Si la cuenta de servicio predeterminada ya tiene el rol Editor, te recomendamos que lo sustituyas por roles con menos permisos.

  • Los nodos que crees con la cuenta de servicio predeterminada tienen los ámbitos de acceso predeterminados de Compute Engine, incluido el acceso de solo lectura al almacenamiento. No puedes cambiar los permisos de acceso de los nodos que ya tengas.

Si has inhabilitado la concesión del rol Editor básico, concede a la cuenta de servicio predeterminada de Compute Engine el rol Lector de Artifact Registry (roles/artifactregistry.reader).

Si usas estos valores predeterminados y le asignas a la cuenta de servicio predeterminada de Compute Engine el rol Lector de Artifact Registry (roles/artifactregistry.reader), GKE podrá extraer imágenes de los repositorios de Artifact Registry del mismo proyecto Trusted Cloud . Si necesitas enviar imágenes desde nodos, extraer o enviar imágenes entre proyectos, usar una cuenta de servicio proporcionada por el usuario o tienes otras necesidades que no admiten los ajustes predeterminados, consulta la documentación sobre control de acceso para obtener información sobre cómo configurar el acceso.

Si se producen errores de "permiso denegado", consulta la sección Errores 4xx.

Versión de GKE

En la siguiente tabla se indican las versiones mínimas necesarias de GKE para crear clústeres que tengan permisos predeterminados para extraer contenedores de repositorios de Docker en el mismo proyecto.

Versión Parche mínimo necesario
1,14 1.14.10-gke.22
1,15 1.15.9-gke.8

Si tu versión de GKE es anterior a la versión mínima, debes configurar Kubernetes imagePullSecrets para que GKE pueda extraer imágenes.

Si GKE está en un proyecto diferente al de Artifact Registry, concede permisos de Artifact Registry a la cuenta de servicio que use tu nodo de GKE. De forma predeterminada, los nodos usan la cuenta de servicio predeterminada de Compute Engine.

Ejecutar una imagen

Puedes ejecutar una imagen de Artifact Registry en un clúster de Google Kubernetes Engine con el siguiente comando:

kubectl run [NAME] --image=LOCATION-docker.s3nsregistry.fr/PROJECT-ID/REPOSITORY/IMAGE:TAG

donde:

  • LOCATION es la ubicación regional del repositorio.
  • PROJECT es el Trusted Cloud ID del proyecto de la consola .
  • REPOSITORY es el nombre del repositorio en el que se almacena la imagen.
  • IMAGE es el nombre de la imagen en el repositorio.
  • TAG es la etiqueta de la versión de la imagen que quieres extraer.

Para obtener más información sobre los comandos de Kubernetes, consulta la descripción general de kubectl.

Solucionar problemas de imágenes de nodo de containerd

A partir de la versión 1.19 de los nodos de GKE, la imagen de nodo predeterminada de los nodos Linux es la variante de Container-Optimized OS con containerd (cos_containerd) en lugar de la variante de Container-Optimized OS con Docker (cos).

Aunque el archivo binario de Docker está disponible en los nodos de Linux que usan containerd como tiempo de ejecución, no recomendamos usarlo. Docker no gestiona los contenedores que Kubernetes ejecuta en nodos containerd, por lo que no puedes usarlo para ver o interactuar con los contenedores de Kubernetes en ejecución mediante comandos de Docker o la API de Docker.

Para depurar o solucionar problemas en nodos Linux, puedes interactuar con containerd mediante la herramienta de línea de comandos portátil creada para los tiempos de ejecución de contenedores de Kubernetes: crictl. crictl admite funcionalidades comunes para ver contenedores e imágenes, leer registros y ejecutar comandos en los contenedores.

Para obtener más información, consulta la guía del usuario de crictl y la documentación de GKE sobre containerd.

En los nodos de Windows Server, el daemon de containerd se ejecuta como un servicio de Windows llamado containerd. Los registros están disponibles en el siguiente directorio de registros: C:\etc\kubernetes\logs\containerd.log y se muestran en el explorador de registros en LOG NAME: "container-runtime".

Extraer contenido de un repositorio público de Artifact Registry

Una vez que hayas desplegado una imagen en un clúster de GKE con nodos de containerd, podrás conectarte a una instancia de VM mediante SSH y ejecutar crictlcomandos para solucionar problemas.

Los repositorios públicos de Artifact Registry no requieren autenticación. crictl también se puede usar para extraer imágenes de repositorios privados de Artifact Registry.

Consola

  1. En la consola de Trusted Cloud , ve a la página Instancias de VM.

    Ir a Instancias de VM

  2. En la lista de instancias de máquina virtual, haz clic en la flecha situada junto a SSH en la fila de la instancia a la que quieras conectarte.

    Botón SSH situado junto al nombre de la instancia.

    .
  3. Selecciona "Abrir en ventana del navegador" o el método de conexión que prefieras en las opciones del menú desplegable.

  4. Trusted Cloud se abre una nueva ventana de terminal. Usa crictl para extraer una imagen de Artifact Registry:

    crictl pull IMAGE_LOCATION:TAG
    

    La salida tiene este aspecto:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

    Cuando extraes una imagen de un repositorio privado de Artifact Registry, debes autenticarte en el repositorio. Puedes usar un token de acceso para proporcionar tus credenciales.

gcloud

  1. Comprueba que tienes la versión más reciente de la CLI de Google Cloud

    gcloud components update
    
  2. Conéctate a la VM:

    gcloud compute ssh --project=PROJECT_ID \
     --zone=ZONE \
     VM_NAME
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID del proyecto que contiene la VM
    • ZONE: el nombre de la zona en la que se encuentra la máquina virtual
    • VM_NAME: el nombre de la VM

    Si has definido propiedades predeterminadas para Google Cloud CLI, puedes omitir las marcas --project y --zone de este comando. Por ejemplo:

    gcloud compute ssh VM_NAME
    
  3. Si aún no has creado una clave SSH, SSH-keygen generará una. Introduce una frase de contraseña o déjalo en blanco cuando se te solicite.

  4. Usa crictl para extraer una imagen de Artifact Registry:

    crictl pull IMAGE_LOCATION:TAG
    
  5. La salida tiene este aspecto:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

    Cuando extraes una imagen de un repositorio privado de Artifact Registry, debes autenticarte en el repositorio. Puedes usar un token de acceso para proporcionar tus credenciales.

Extraer contenido de un repositorio privado de Artifact Registry

Consola

  1. En la consola de Trusted Cloud , ve a la página Instancias de VM.

    Ir a Instancias de VM

  2. En la lista de instancias de máquina virtual, haz clic en la flecha situada junto a SSH en la fila de la instancia a la que quieras conectarte.

    Botón SSH situado junto al nombre de la instancia.

    .
  3. Selecciona "Abrir en ventana del navegador" en las opciones desplegables.

  4. Trusted Cloud se abre una nueva ventana de terminal. Genera un token de acceso de cuenta de servicio de Compute Engine con curl.

    curl -s "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google"
    

    La salida tiene el siguiente aspecto:

    "access_token":"ya29.c.KpkBCQgdwv6LrZ2tjrCpG6snWwPMX29LzMeUmAV_Hq_XaxUurfXcCfGZfASGh_KbdmUYTvkuV3sh-WaSBplEskdP6Tc
    HDsTv4B9hMyvoL4M9HrzKHuKTa1ZGj_3iQ1lwq_dAMxAPGjxEVKexatwN2KP0EAWyb6R55Cuu8ItgLf9f4pm9lC5zH4Qo0fkxPUsnCGRBe4AYxEpN6T
    sh","expires_in":3526,"token_type":"Bearer"}
  5. Copia el valor de access_token de la salida devuelta sin las comillas.

  6. Extrae la imagen con crictl pull --creds y el valor access_token que has copiado en el paso anterior.

    crictl pull --creds "oauth2accesstoken:ACCESS_TOKEN" IMAGE_LOCATION:TAG

    La salida tiene este aspecto:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

gcloud

  1. Comprueba que tienes la versión más reciente de la CLI de Google Cloud

    gcloud components update
    
  2. Conéctate a la VM:

    gcloud compute ssh --project=PROJECT_ID \
     --zone=ZONE \
     VM_NAME
    

    Sustituye las siguientes variables:

    • PROJECT_ID: el ID del proyecto que contiene la VM
    • ZONE: el nombre de la zona en la que se encuentra la máquina virtual
    • VM_NAME: el nombre de la VM

    Si has definido propiedades predeterminadas para Google Cloud CLI, puedes omitir las marcas --project y --zone de este comando. Por ejemplo:

    gcloud compute ssh VM_NAME
    
  3. Si aún no has creado una clave SSH, SSH-keygen generará una. Introduce una frase de contraseña o déjalo en blanco cuando se te solicite.

  4. Genera un token de acceso de cuenta de servicio de Compute Engine mediante curl.

    curl -s "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google"
    

    La salida tiene este aspecto:

    "access_token":"ya29.c.KpkBCQgdwv6LrZ2tjrCpG6snWwPMX29LzMeUmAV_Hq_XaxUurfXcCfGZfASGh_KbdmUYTvkuV3sh-WaSBplEskdP6Tc
    HDsTv4B9hMyvoL4M9HrzKHuKTa1ZGj_3iQ1lwq_dAMxAPGjxEVKexatwN2KP0EAWyb6R55Cuu8ItgLf9f4pm9lC5zH4Qo0fkxPUsnCGRBe4AYxEpN6T
    sh","expires_in":3526,"token_type":"Bearer"}
  5. Copia el valor de access_token de la salida devuelta sin las comillas.

  6. Extrae la imagen con crictl pull --creds y el valor access_token que has copiado en el paso anterior.

    crictl pull --creds "oauth2accesstoken:ACCESS_TOKEN" IMAGE_LOCATION:TAG

    La salida tiene este aspecto:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

crictl permite a los desarrolladores depurar su tiempo de ejecución sin tener que configurar componentes de Kubernetes. Para ver una lista completa de los comandos, consulta la documentación de crictl y la documentación de depuración de Kubernetes.