La instalación de GKE en AWS puede acceder a imágenes públicas de forma predeterminada. En este tema, se explica cómo usar GKE en AWS con un repositorio de imágenes de contenedor privado, como Artifact Registry.
A partir de la versión 1.28, GKE en AWS proporciona una forma de extraer imágenes privadas de Artifact Registry o Container Registry sin tener que usar un Secret de Kubernetes. Para obtener más información, consulta Usa un registro de imágenes privado sin Secrets.Antes de comenzar
Para realizar los pasos de esta página, primero completa lo siguiente:
- Crea un clúster.
- Crea un grupo de nodos.
Compila una imagen de Docker y envíala a Artifact Registry. En los ejemplos de esta página, se usa el contenedor
hello-app
. A fin de compilar este contenedor, sigue los pasos para compilar una imagen de contenedor y enviar la imagen de Docker a Artifact Registry, que aparecen en la sección de GKE de la documentación de Google Cloud.
Verifica las imágenes en Artifact Registry
Para completar el resto de estos pasos, necesitas una imagen de contenedor. Sigue estos pasos para obtener el nombre de las imágenes de contenedor:
Configura la herramienta de línea de comandos de Docker para autenticarte en Artifact Registry con el SDK de Google Cloud:
gcloud auth configure-docker
La herramienta de línea de comandos de
gcloud
registra un auxiliar de credenciales para todos los registros de Docker compatibles con Google.Confirma que Artifact Registry incluye una imagen con el comando
docker images
.docker images
Docker se conecta a Artifact Registry y muestra las imágenes disponibles en el repositorio. Por ejemplo, en la siguiente respuesta, se muestra una imagen de contenedor llamada
hello-app
en el repositorioPROJECT_NAME
enus-west1-docker.pkg.dev
.REPOSITORY TAG IMAGE ID CREATED SIZE us-west1-docker.pkg.dev/PROJECT_NAME/hello-repo/hello-app v1 f7cfe0d58569 21 minutes ago 11.5MB
Si no tienes una imagen de contenedor lista, crea una mediante los pasos que se describen en Implementa una aplicación alojada en contenedores.
Crear una cuenta de servicio.
Tus clústeres de usuarios se autentican con una cuenta de servicio de Identity and Access Management (IAM).
Para crear una cuenta de servicio nueva, sigue estos pasos:
Crea una cuenta de servicio de IAM con Google Cloud CLI.
gcloud iam service-accounts create ACCOUNT_NAME
Reemplaza ACCOUNT_NAME por el nombre de la nueva cuenta de servicio de Google Cloud.
Otorga los permisos de Artifact Registry a la cuenta de servicio.
gcloud projects add-iam-policy-binding PROJECT_NAME \ --member serviceAccount:ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com \ --role roles/artifactregistry.reader
Reemplaza lo siguiente:
PROJECT_NAME
con tu proyecto de Google CloudACCOUNT_NAME
por el nombre de la cuenta de servicio de Google Cloud
Descarga la clave de la cuenta de servicio.
gcloud iam service-accounts keys create registry-access-key.json \ --iam-account ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com
Reemplaza lo siguiente:
PROJECT_NAME
ACCOUNT_NAME
Ahora estás listo para configurar el clúster de usuario a fin de conectarte a Artifact Registry.
Guarda la clave para tu clúster
A fin de proporcionar la clave para la autenticación en Artifact Registry, guarda la clave de la cuenta de servicio como un Secret de Kubernetes mediante estos pasos:
Usa
kubectl
para crear el Secret.kubectl create secret docker-registry registry-secret \ --docker-server=LOCATION-docker.pkg.dev \ --docker-username=_json_key \ --docker-email=ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com \ --docker-password="$(cat registry-access-key.json)"
Reemplaza lo siguiente:
LOCATION
: es la ubicación regional o multirregional del repositorio.PROJECT_NAME
ACCOUNT_NAME
Borra la copia local de la clave de la cuenta de servicio.
rm registry-access-key.json
Ahora puedes hacer referencia a este Secret en las cargas de trabajo.
Crea una carga de trabajo con una imagen privada
Para usar una imagen de un repositorio de contenedores privado con una carga de trabajo, establece el campo spec.imagePullSecrets
en tu nombre de Secret. Este campo está en diferentes ubicaciones para los Pods y las implementaciones.
Crea un Pod
Para crear un Pod que pueda acceder al registro de contenedores, configura el campo spec.imagePullSecrets
con el nombre del Secret.
Crea un Pod que especifique
spec.imagePullSecrets
.apiVersion: v1 kind: Pod metadata: name: POD_NAME spec: containers: - name: CONTAINER_NAME image: LOCATION-docker.pkg.dev/PROJECT_NAME/hello-repo/hello-app:v1 imagePullSecrets: - name: registry-secret
Reemplaza lo siguiente:
POD_NAME
: Es el nombre de tu Pod.CONTAINER_NAME
: Es el nombre del contenedor dentro del Pod.LOCATION
PROJECT_NAME
Por ejemplo, para extraer la imagen
hello-app
, copia el siguiente YAML en un archivo llamadohello-pod.yaml
.apiVersion: v1 kind: Pod metadata: name: hello-pod spec: containers: - name: hello-container image: us-west1-docker.pkg.dev/example-project/hello-repo/hello-app:v1 imagePullSecrets: - name: registry-secret
Aplica la configuración al clúster mediante
kubectl
:kubectl apply -f hello-pod.yaml
Confirma que el Pod esté en ejecución mediante
kubectl get
.kubectl get pod/hello-pod
La respuesta incluye un Pod con el estado
Running
.NAME READY STATUS RESTARTS AGE hello-pod 1/1 Running 0 15s
Crea un Deployment
Para usar un repositorio privado en un Deployment, especifica el
imagePullSecret
dentro de la plantilla.Por ejemplo, para configurar un objeto Deployment que use la imagen
hello-app
, crea un archivo llamadohello-deployment.yaml
con el siguiente contenido:apiVersion: apps/v1 kind: Deployment metadata: name: hello-app-deployment spec: selector: matchLabels: app: products department: sales replicas: 3 template: metadata: labels: app: products department: sales spec: containers: - name: hello image: LOCATION-docker.pkg.dev/PROJECT_NAME/hello-repo/hello-app:v1 env: - name: "PORT" value: "50001" imagePullSecrets: - name: registry-secret
Reemplaza lo siguiente:
LOCATION
PROJECT_NAME
Aplica la configuración al clúster mediante
kubectl
:kubectl apply -f hello-deployment.yaml
Confirma que el Deployment esté en ejecución mediante
kubectl pods
.kubectl get pods --selector=app=products
El resultado muestra tres Pods de
Running
.NAME READY STATUS RESTARTS AGE hello-app-deployment-67d9c6d98c-b69f2 1/1 Running 0 14m hello-app-deployment-67d9c6d98c-d6k5c 1/1 Running 0 14m hello-app-deployment-67d9c6d98c-p2md5 1/1 Running 0 14m
Limpia
Para quitar los recursos que creaste en esta página, ejecuta estos comandos:
kubectl apply -f hello-pod.yaml
kubectl delete -f hello-deployment.yaml