En este tema se describe cómo usar GKE en AWS con un repositorio de imágenes de contenedor privado, como Container Registry (GCR).
Antes de empezar
Antes de empezar a usar GKE en AWS, asegúrate de haber completado las siguientes tareas:
- Cumple los requisitos previos.
- Instala un servicio de gestión.
- Crea un clúster de usuarios.
- En tu directorio de
anthos-aws
, usaanthos-gke
para cambiar el contexto a tu clúster de usuarios. Sustituye CLUSTER_NAME por el nombre de tu clúster de usuario.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
- Tener una imagen de Docker creada y enviada a Container Registry. En los ejemplos de este tema se usa el contenedor
hello-app
, creado siguiendo los pasos de la sección Desplegar una aplicación en contenedores de la documentación de GKE en Google Cloud .
Registros privados de contenedores
Un registro de contenedores almacena y distribuye imágenes de contenedores. Tu instalación de GKE en AWS puede acceder a imágenes públicas de forma predeterminada.
Buscar imágenes en Container Registry
Para completar el resto de estos 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 Container Registry con la CLI de Google Cloud:
gcloud auth configure-docker
La CLI de Google Cloud registra un asistente de credenciales para todos los registros de Docker compatibles con Google.
Confirma que tu Container Registry incluye una imagen con
docker images
.docker images
Docker se conecta a Container Registry y devuelve las imágenes disponibles en tu repositorio de Container Registry. Por ejemplo, la respuesta que se muestra a continuación contiene una imagen de contenedor llamada
hello-app
en el repositorio project-id.REPOSITORY TAG IMAGE ID CREATED SIZE gcr.io/project-id/hello-app v1 732f02cea7cb 12 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 de usuario 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 acceso a Container Registry.
gcloud projects add-iam-policy-binding project-id \ --member serviceAccount:account-name@project-id.iam.gserviceaccount.com \ --role roles/storage.objectViewer
Haz los cambios siguientes:
- project-id con tu Google Cloud proyecto
- account-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 key.json \ --iam-account account-name@project-id.iam.gserviceaccount.com
Haz los cambios siguientes:
- project-id con tu Google Cloud proyecto
- account-name con el nombre de tu cuenta de servicio Google Cloud
Ahora ya puedes configurar tu clúster de usuario para conectarlo a Container Registry.
Definir un secreto de Kubernetes
Para proporcionar la clave para autenticarte en Container Registry, guarda la clave de la cuenta de servicio como un secreto de Kubernetes siguiendo estos pasos:
Usa
kubectl
para crear el secreto.env HTTPS_PROXY=http://localhost:8118 \ kubectl create secret docker-registry gcr-secret \ --docker-server=gcr.io \ --docker-username=_json_key \ --docker-email=account-name@project-id.iam.gserviceaccount.com \ --docker-password="$(cat key.json)"
Haz los cambios siguientes:
- project-id con tu Google Cloud proyecto
- account-name con el nombre de tu cuenta de servicio Google Cloud
Elimina la copia local de la clave de tu cuenta de servicio.
rm 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 nombre de tu secreto al campo spec.imagePullSecrets
.
Crea un pod que especifique
spec.imagePullSecrets
.apiVersion: v1 kind: Pod metadata: name: pod-name spec: containers: - name: container-name image: gcr.io/project-id/hello-app:v1 imagePullSecrets: - name: secret-name
Haz los cambios siguientes:
- pod-name con el nombre de tu Pod
- container-name con el nombre del contenedor dentro del pod
- project-id con tu Google Cloud proyecto
- secret-name con el nombre de tu secreto de registro
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: gcr.io/project-id/hello-app:v1 imagePullSecrets: - name: gcr-secret
Aplica la configuración a tu clúster con
kubectl
.env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f hello-pod.yaml
Confirma que el pod se está ejecutando con
kubectl get
.env HTTPS_PROXY=http://localhost:8118 \ 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 crear un Deployment de 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: "gcr.io/project-id/hello-app:v1" env: - name: "PORT" value: "50001" imagePullSecrets: - name: gcr-secret
Aplica la configuración a tu clúster con
kubectl
.env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f hello-deployment.yaml
Confirma que tu implementación se está ejecutando con
kubectl pods
.env HTTPS_PROXY=http://localhost:8118 \ kubectl get pods --selector=app=products
El resultado contiene 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
Siguientes pasos
- Consulta la información general de Container Registry.