En esta guía, se describe cómo extraer imágenes de Artifact Registry para implementarlas en Google Kubernetes Engine. Si deseas realizar implementaciones en servicios de Kubernetes alojados por ti o de terceros, debes configurar la autenticación en Google Cloud antes de extraer imágenes de Artifact Registry. Para autenticarte en Google Cloud desde cargas de trabajo de Kubernetes fuera de Google Cloud, consulta Configura la federación de identidades para cargas de trabajo con Kubernetes.
Google Kubernetes Engine puede extraer imágenes directamente de los repositorios de Docker. Algunas versiones incluyen compatibilidad preconfigurada para extraer imágenes de los repositorios de Docker de Artifact Registry.
Requisitos
En esta sección, se describen los requisitos para la integración con GKE.
Permisos
GKE usa los siguientes valores predeterminados cuando creas grupos de nodos o clústeres:
- La cuenta de servicio predeterminada de Compute Engine es la identidad de los nodos.
-
Según la configuración de la política de la organización, es posible que a la cuenta de servicio predeterminada se le otorgue automáticamente el rol de editor en tu proyecto. Te recomendamos inhabilitar la concesión automática de roles; para ello, aplica la restricción de la política de la organización
iam.automaticIamGrantsForDefaultServiceAccounts
. Si creaste tu organización después del 3 de mayo de 2024, esta restricción se aplica de forma predeterminada.Si inhabilitas la concesión automática de roles, debes decidir qué roles se deben otorgar a las cuentas de servicio predeterminadas y, luego, otorgar estos roles a ti mismo.
Si la cuenta de servicio predeterminada ya tiene el rol de editor, te recomendamos que reemplaces el rol de editor por roles menos permisivos.Para modificar de forma segura los roles de la cuenta de servicio, usa Policy Simulator para ver el impacto del cambio y, luego, otorga y revoca los roles adecuados.
- Los nodos que creas con la cuenta de servicio predeterminada tienen los permisos de acceso predeterminados de Compute Engine, incluido el acceso de solo lectura al almacenamiento. No puedes cambiar los permisos de acceso en los nodos existentes.
Si inhabilitaste el otorgamiento del rol de editor básico, otorga a la cuenta de servicio predeterminada de Compute Engine el rol de lector de Artifact Registry (roles/artifactregistry.reader
).
Si usas estos valores predeterminados y otorgas a la cuenta de servicio predeterminada de Compute Engine
el rol de lector de Artifact Registry (roles/artifactregistry.reader
), entonces
GKE puede extraer imágenes de los
repositorios de Artifact Registry en el mismo Google Cloud proyecto. 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 la configuración predeterminada no admite, consulta la documentación de control de acceso para obtener información sobre cómo configurar el acceso.
Si encuentras errores de “permiso denegado”, consulta Errores 4xx.
Versión de GKE
En la siguiente tabla, se enumeran las versiones mínimas requeridas de GKE para crear clústeres que tengan permisos predeterminados para extraer contenedores de los repositorios de Docker en el mismo proyecto.
Versión | Parche mínimo requerido |
---|---|
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 imagePullSecrets de Kubernetes para permitir que GKE extraiga imágenes.
Si GKE se encuentra en un proyecto distinto de Artifact Registry, otorga permisos de Artifact Registry a la cuenta de servicio que usa tu nodo de GKE. De forma predeterminada, los nodos usan la cuenta de servicio predeterminada de Compute Engine.
Ejecuta 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.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE:TAG
Donde:
-
LOCATION
es la ubicación regional o multirregional del repositorio. PROJECT
es el ID de tu proyecto de la consola de Google Cloud. Si el ID de tu proyecto contiene dos puntos (:
), consulta Proyectos con alcance de dominio.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 deseas extraer.
Para obtener más información sobre los comandos de Kubernetes, consulta la página de descripción general de kubectl.
Soluciona problemas de imágenes de nodos containerd
A partir de la versión 1.19 de nodo de GKE, la imagen de nodo predeterminada para los nodos de Linux es la variante Container-Optimized OS con containerd (cos_containerd
), en lugar de la variante Container-Optimized OS con Docker (cos
).
Si bien el objeto binario de Docker está disponible en nodos de Linux que usan containerd como entorno de ejecución, no recomendamos usarlo. Docker no administra los contenedores que Kubernetes ejecuta en los nodos en Containerd, por lo que no puedes usarlo para ver o interactuar con contenedores de Kubernetes en ejecución mediante los comandos de Docker o la API de Docker.
Para depurar o solucionar problemas en el nodo de Linux, puedes interactuar con containerd mediante la herramienta de línea de comandos portátil creada para entornos de ejecución de contenedor de Kubernetes: crictl
. crictl
admite funcionalidades comunes para ver imágenes y contenedores, 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.
Para los nodos de Windows Server, el daemon 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"
.
Extrae desde un repositorio público de Artifact Registry
Una vez que hayas implementado y creado una imagen en un clúster de GKE con
nudos en contenedores, puedes conectarte a una instancia de VM con SSH y ejecutar comandos crictl
para solucionar problemas.
Los repositorios públicos de Artifact Registry no requieren autenticación. crictl
también se puede usar para extraer imágenes en repositorios privados de Artifact Registry.
Console
En la consola de Google Cloud, ve a la página Instancias de VM.
En la lista de instancias de máquinas virtuales, haz clic en la flecha junto a SSH en la fila de la instancia a la que deseas conectarte.
Selecciona "Abrir en la ventana del navegador" o el método de conexión que prefieras en las opciones del menú desplegable.
La consola de Google Cloud abre una nueva ventana de terminal. Usa
crictl
para extraer una imagen de Artifact Registry:crictl pull IMAGE_LOCATION:TAG
El resultado luce de la siguiente manera:
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
Asegúrate de tener la versión más reciente de Google Cloud CLI
gcloud components update
Conéctate a la VM.
gcloud compute ssh --project=PROJECT_ID \ --zone=ZONE \ VM_NAME
Reemplaza lo siguiente:
PROJECT_ID
: El ID del proyecto que contiene la VMZONE
: El nombre de la zona en la que se encuentra la VMVM_NAME
: El nombre de la VM
Si estableciste propiedades predeterminadas para Google Cloud CLI, puedes omitir las marcas
--project
y--zone
de este comando. Por ejemplo:gcloud compute ssh VM_NAME
Si aún no creaste una clave SSH, SSH keygen te generará una. Ingresa una frase de contraseña o déjala en blanco cuando se te solicite.
Usa
crictl
para extraer una imagen de Artifact Registry:crictl pull IMAGE_LOCATION:TAG
El resultado luce de la siguiente manera:
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.
Extrae desde un repositorio privado de Artifact Registry
Console
En la consola de Google Cloud, ve a la página Instancias de VM.
En la lista de instancias de máquinas virtuales, haz clic en la flecha junto a SSH en la fila de la instancia a la que deseas conectarte.
Selecciona "Abrir en otra ventana del navegador" en las opciones del menú desplegable.
La consola de Google Cloud abre una nueva ventana de terminal. Genera un token de acceso de la 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"
El resultado se ve como en el siguiente ejemplo:
"access_token":"ya29.c.KpkBCQgdwv6LrZ2tjrCpG6snWwPMX29LzMeUmAV_Hq_XaxUurfXcCfGZfASGh_KbdmUYTvkuV3sh-WaSBplEskdP6Tc HDsTv4B9hMyvoL4M9HrzKHuKTa1ZGj_3iQ1lwq_dAMxAPGjxEVKexatwN2KP0EAWyb6R55Cuu8ItgLf9f4pm9lC5zH4Qo0fkxPUsnCGRBe4AYxEpN6T sh","expires_in":3526,"token_type":"Bearer"}
Copia el valor de
access_token
del resultado que se muestra sin las comillas.Extrae la imagen con
crictl pull --creds
y el valoraccess_token
que copiaste en el paso anterior.crictl pull --creds "oauth2accesstoken:ACCESS_TOKEN" IMAGE_LOCATION:TAG
El resultado luce de la siguiente manera:
Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5
gcloud
Asegúrate de tener la versión más reciente de Google Cloud CLI
gcloud components update
Conéctate a la VM.
gcloud compute ssh --project=PROJECT_ID \ --zone=ZONE \ VM_NAME
Reemplaza las siguientes variables:
PROJECT_ID
: El ID del proyecto que contiene la VMZONE
: El nombre de la zona en la que se encuentra la VMVM_NAME
: El nombre de la VM
Si estableciste propiedades predeterminadas para Google Cloud CLI, puedes omitir las marcas
--project
y--zone
de este comando. Por ejemplo:gcloud compute ssh VM_NAME
Si aún no creaste una clave SSH, SSH keygen te generará una. Ingresa una frase de contraseña o déjala en blanco cuando se te solicite.
Genera un token de acceso de la 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"
El resultado luce de la siguiente manera:
"access_token":"ya29.c.KpkBCQgdwv6LrZ2tjrCpG6snWwPMX29LzMeUmAV_Hq_XaxUurfXcCfGZfASGh_KbdmUYTvkuV3sh-WaSBplEskdP6Tc HDsTv4B9hMyvoL4M9HrzKHuKTa1ZGj_3iQ1lwq_dAMxAPGjxEVKexatwN2KP0EAWyb6R55Cuu8ItgLf9f4pm9lC5zH4Qo0fkxPUsnCGRBe4AYxEpN6T sh","expires_in":3526,"token_type":"Bearer"}
Copia el valor de
access_token
del resultado que se muestra sin las comillas.Extrae la imagen con
crictl pull --creds
y el valoraccess_token
que copiaste en el paso anterior.crictl pull --creds "oauth2accesstoken:ACCESS_TOKEN" IMAGE_LOCATION:TAG
El resultado luce de la siguiente manera:
Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5
crictl
permite que los desarrolladores depuren su entorno de ejecución sin necesidad de configurar componentes de Kubernetes. Para obtener una lista completa de los comandos, consulta la documentación de crictl
y la documentación de depuración de Kubernetes.