Usa un registro de imágenes privado

En este tema, se describe cómo usar los clústeres de Anthos en AWS (GKE on AWS) con un repositorio de imágenes de contenedor privado, como Container Registry (GCR).

Antes de comenzar

Antes de comenzar a usar clústeres de Anthos alojados en AWS, asegúrate de haber realizado las siguientes tareas:

  • Instalar un servicio de administración
  • Crear un clúster de usuario
  • Desde el directorio anthos-aws, usa anthos-gke para cambiar el contexto a tu clúster de usuario.
    cd anthos-aws
    env HTTPS_PROXY=http://localhost:8118 \
      anthos-gke aws clusters get-credentials CLUSTER_NAME
    Reemplaza CLUSTER_NAME por el nombre de tu clúster de usuario.
  • Debes tener una imagen de Docker compilada y enviada a Container Registry. En los ejemplos de este artículo, se usa el contenedor hello-app, que se compiló mediante los pasos de Implementa una aplicación en contenedores en la documentación de GKE en Google Cloud.

Registros de contenedores privados

Un registro de contenedores almacena y distribuye imágenes de contenedor. Tus clústeres de Anthos en la instalación de AWS pueden acceder a las imágenes públicas de forma predeterminada.

Verifica las imágenes en Container 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:

  1. Configura la herramienta de línea de comandos de Docker para que se autentique en Container Registry con Google Cloud CLI:

    gcloud auth configure-docker
    

    Google Cloud CLI registra un auxiliar de credenciales para todos los registros de Docker compatibles con Google.

  2. Confirma que Container Registry incluya una imagen con docker images.

    docker images
    

    Docker se conecta a Container Registry y muestra las imágenes disponibles en el repositorio de Container Registry. Por ejemplo, en la siguiente respuesta, se muestra 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 mediante los pasos que se describen en Implementa una aplicación en contenedores.

Cree una cuenta de servicio

Tus clústeres de usuarios se autentican con una cuenta de servicio de administración de identidades y accesos (IAM).

Para crear una cuenta de servicio nueva, sigue estos pasos:

  1. 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.

  2. Otorga 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
    

    Reemplaza lo siguiente:

    • project-id con tu proyecto de Google Cloud
    • account-name por el nombre de la cuenta de servicio de Google Cloud
  3. 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
    

    Reemplaza lo siguiente:

    • project-id con tu proyecto de Google Cloud
    • account-name por el nombre de la cuenta de servicio de Google Cloud

Ahora estás listo para configurar el clúster de usuario a fin de conectarte a Container Registry.

Define un secreto de Kubernetes

Para proporcionar la clave de autenticación a Container Registry, guarda la clave de la cuenta de servicio como un secreto de Kubernetes mediante los siguientes pasos:

  1. 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)"
    

    Reemplaza lo siguiente:

    • project-id con tu proyecto de Google Cloud
    • account-name por el nombre de la cuenta de servicio de Google Cloud
  2. Borra la copia local de la clave de la cuenta de servicio.

    rm key.json
    

Ahora puedes hacer referencia a este secreto 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 secreto. 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 secreto.

  1. 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
    

    Reemplaza lo siguiente:

    • pod-name por el nombre del Pod
    • container-name por el nombre del contenedor dentro del Pod
    • project-id con tu proyecto de Google Cloud
    • secret-name por el nombre del secreto de registro

    Por ejemplo, para extraer la imagen hello-app, copia el siguiente YAML en un archivo llamado hello-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
    
  2. Aplica la configuración al clúster mediante kubectl:

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f hello-pod.yaml
    
  3. Confirma que el Pod esté en ejecución mediante 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
    

    Crea un Deployment

  4. Para usar un repositorio privado en un Deployment, especifica el imagePullSecret dentro de la plantilla.

    Por ejemplo, para crear un Deployment de la imagen de hello-app, crea un archivo llamado hello-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
    
  5. Aplica la configuración al clúster mediante kubectl:

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f hello-deployment.yaml
    
  6. Confirma que el Deployment esté en ejecución mediante kubectl pods.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl get pods --selector=app=products
    

    El resultado contiene tres Pods con el estado 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
    

¿Qué sigue?