Usando un registro de imágenes privado

Este tema describe cómo usar GKE en AWS con un repositorio de imágenes de contenedores privados, como Container Registry (GCR) .

Antes de empezar

Antes de comenzar a usar GKE en AWS, asegúrese de haber realizado las siguientes tareas:

  • Instalar un servicio de gestión .
  • Crear un clúster de usuarios .
  • Desde su directorio anthos-aws , use anthos-gke para cambiar el contexto a su clúster de usuarios.
    cd anthos-aws
    env HTTPS_PROXY=http://localhost:8118 \
      anthos-gke aws clusters get-credentials CLUSTER_NAME
    Reemplace CLUSTER_NAME con el nombre de su clúster de usuarios.
  • Cree una imagen de Docker y envíela a Container Registry. Los ejemplos de este tema utilizan el contenedor hello-app , creado siguiendo los pasos de "Implementación de una aplicación en contenedores en GKE". Google Cloud documentación.

Registros de contenedores privados

Un registro de contenedores almacena y distribuye imágenes de contenedores . Su 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, necesita una imagen de contenedor. Obtenga el nombre de sus imágenes de contenedor siguiendo estos pasos:

  1. Configure la herramienta de línea de comandos de Docker para autenticarse en Container Registry con Google Cloud CLI:

    gcloud auth configure-docker
    

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

  2. Confirme que su Registro de contenedores incluye una imagen con docker images .

    docker images
    

    Docker se conecta a Container Registry y devuelve las imágenes disponibles en su repositorio. Por ejemplo, la siguiente respuesta 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 tiene una imagen de contenedor lista, cree una siguiendo los pasos que se indican en Implementar una aplicación en contenedores .

Crear una cuenta de servicio

Sus clústeres de usuarios se autentican mediante una cuenta de servicio de administración de identidad y acceso (IAM).

Para crear una nueva cuenta de servicio, realice los siguientes pasos:

  1. Cree una cuenta de servicio IAM con la CLI de Google Cloud.

    gcloud iam service-accounts create account-name
    

    Reemplace account-name con el nombre de la nueva Google Cloudcuenta de servicio.

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

    Reemplace lo siguiente:

    • project-id con su Google Cloud proyecto
    • account-name con su Google Cloud nombre de la cuenta de servicio
  3. Descargue la clave de cuenta de servicio de la cuenta.

    gcloud iam service-accounts keys create key.json \
      --iam-account account-name@project-id.iam.gserviceaccount.com
    

    Reemplace lo siguiente:

    • project-id con su Google Cloud proyecto
    • account-name con su Google Cloud nombre de la cuenta de servicio

Ahora está listo para configurar su clúster de usuarios para conectarse a Container Registry.

Definir un secreto de Kubernetes

Para proporcionar la clave para autenticarse en Container Registry, guarde la clave de la cuenta de servicio como un secreto de Kubernetes realizando los siguientes pasos:

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

    Reemplace lo siguiente:

    • project-id con su Google Cloud proyecto
    • account-name con su Google Cloud nombre de la cuenta de servicio
  2. Eliminar la copia local de la clave de su cuenta de servicio.

    rm key.json
    

Ahora puedes hacer referencia a este secreto en tus 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, configure el campo spec.imagePullSecrets con el nombre de su secreto. Este campo se encuentra en ubicaciones diferentes para pods e implementaciones .

Creando un Pod

Para crear un Pod que pueda acceder al registro de contenedores, configure el campo spec.imagePullSecrets con su nombre 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
    

    Reemplace lo siguiente:

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

    Por ejemplo, para extraer la imagen hello-app , copie 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. Aplique la configuración a su clúster con kubectl .

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f hello-pod.yaml
    
  3. Confirme 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 estado En Running .

    NAME        READY   STATUS    RESTARTS   AGE
    hello-pod   1/1     Running   0          15s
    

    Creación de una implementación

  4. Para utilizar un repositorio privado en una implementación, especifique imagePullSecret dentro de la plantilla.

    Por ejemplo, para crear una implementación de la imagen hello-app , cree 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. Aplique la configuración a su clúster con kubectl .

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f hello-deployment.yaml
    
  6. Confirme que su implementación se esté ejecutando con kubectl pods .

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

    La salida 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
    

¿Qué sigue?