Usar un registro de imágenes privado
Tu instalación de GKE en Azure puede acceder a imágenes de contenedor públicas de forma predeterminada. En este tema se explica cómo usar GKE en Azure con un repositorio de imágenes de contenedor privado, como Artifact Registry.
Antes de empezar
Para seguir los pasos de esta página, primero debes hacer lo siguiente:
- Crea un clúster.
- Crea un grupo de nodos.
Crea una imagen Docker y envíala a Artifact Registry. En los ejemplos de esta página se usa el contenedor
hello-app
. Para compilar este contenedor, sigue los pasos para compilar una imagen de contenedor y enviar la imagen de Docker a Artifact Registry, que forman parte de la documentación de GKE en Google Cloud .
Buscar imágenes en Artifact Registry
Para completar el resto de los pasos, necesitas una imagen de contenedor. Para obtener el nombre de tus imágenes de contenedor, sigue estos pasos:
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
gcloud
registra un asistente de credenciales para todos los registros de Docker compatibles con Google.Confirma que tu Artifact Registry incluye una imagen con el comando
docker images
.docker images
Docker se conecta a Artifact Registry y devuelve las imágenes disponibles en tu repositorio. Por ejemplo, la respuesta que se muestra a continuación contiene una imagen de contenedor llamada
hello-app
en el repositorioPROJECT_NAME
deus-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 siguiendo los pasos que se indican en Desplegar una aplicación contenerizada.
Crear una cuenta de servicio
Tus clústeres se autentican mediante una cuenta de servicio de Gestión de Identidades y Accesos (IAM).
Para crear una cuenta de servicio, sigue estos pasos:
Crea una cuenta de servicio de IAM con la CLI de Google Cloud.
gcloud iam service-accounts create ACCOUNT_NAME
Sustituye ACCOUNT_NAME por el nombre de la nueva cuenta de servicio. Google Cloud
Concede a la cuenta de servicio los permisos de Artifact Registry.
gcloud projects add-iam-policy-binding PROJECT_NAME \ --member serviceAccount:ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com \ --role roles/artifactregistry.reader
Haz los cambios siguientes:
PROJECT_NAME
con tu Google Cloud proyectoACCOUNT_NAME
con el nombre de tu cuenta de servicio 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
Haz los cambios siguientes:
PROJECT_NAME
ACCOUNT_NAME
Ahora ya puedes configurar tu clúster de usuarios para conectarte a Artifact Registry.
Guarda la clave en tu clúster
Para proporcionar la clave para autenticarte en Artifact Registry, guarda la clave de la cuenta de servicio como un secreto de Kubernetes siguiendo estos pasos:
Usa
kubectl
para crear el secreto.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)"
Haz los cambios siguientes:
LOCATION
: la ubicación regional o multirregional del repositorio.PROJECT_NAME
ACCOUNT_NAME
Elimina la copia local de la clave de tu cuenta de servicio.
rm registry-access-key.json
Ahora puedes hacer referencia a este secreto en tus cargas de trabajo.
Crear una carga de trabajo con una imagen privada
Para usar una imagen de un repositorio de contenedores privado con una carga de trabajo, asigna el nombre de tu secreto al campo spec.imagePullSecrets
. Este campo se encuentra en
ubicaciones diferentes para Pods y
Deployments.
Crear un pod
Para crear un pod que pueda acceder al registro de contenedores, asigna el valor spec.imagePullSecrets
al nombre de tu secreto.
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
Haz los cambios siguientes:
POD_NAME
: el nombre de tu PodCONTAINER_NAME
: el nombre del contenedor dentro del podLOCATION
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 a tu clúster con
kubectl
.kubectl apply -f hello-pod.yaml
Confirma que el pod se está ejecutando con
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
Creando un despliegue
Para usar un repositorio privado en una implementación, especifica el
imagePullSecret
en la plantilla.Por ejemplo, para configurar una implementación que utilice 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
Haz los cambios siguientes:
LOCATION
PROJECT_NAME
Aplica la configuración a tu clúster con
kubectl
.kubectl apply -f hello-deployment.yaml
Confirma que tu implementación se está ejecutando con
kubectl pods
.kubectl get pods --selector=app=products
El resultado muestra tres pods
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
Limpieza
Para eliminar los recursos que has creado en esta página, ejecuta estos comandos:
kubectl apply -f hello-pod.yaml
kubectl delete -f hello-deployment.yaml
Siguientes pasos
- Consulta la descripción general de Artifact Registry.