Utilice un registro de imágenes privado

Su instalación de GKE en AWS puede acceder a imágenes de contenedores públicos de forma predeterminada. Este tema explica cómo usar GKE en AWS con un repositorio de imágenes de contenedores privado, como Artifact Registry .

A partir de la versión 1.28, GKE en AWS ofrece una forma de extraer imágenes privadas de Artifact Registry o Container Registry sin tener que usar un secreto de Kubernetes. Para obtener más información, consulte Usar un registro de imágenes privado sin secretos .

Antes de empezar

Para realizar los pasos de esta página, primero complete lo siguiente:

Busque imágenes en Artifact 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 Artifact Registry con Google Cloud SDK:

    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.

  2. Confirme que su Registro de artefactos incluya una imagen con el comando docker images .

    docker images
    

    Docker se conecta al Registro de Artefactos 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_NAME en us-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 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 se autentican mediante una cuenta de servicio de administración de identidad y acceso (IAM).

Para crear una nueva cuenta de servicio, siga estos 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 permisos de Registro de artefactos .

    gcloud projects add-iam-policy-binding PROJECT_NAME \
      --member serviceAccount:ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com \
      --role roles/artifactregistry.reader
    

    Reemplace lo siguiente:

    • PROJECT_NAME con tu Google Cloud proyecto
    • ACCOUNT_NAME con tu 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 registry-access-key.json \
      --iam-account ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com
    

    Reemplace lo siguiente:

    • PROJECT_NAME
    • ACCOUNT_NAME

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

Guarde la clave en su clúster

Para proporcionar la clave para autenticarse en Artifact Registry, guarde la clave de la cuenta de servicio como un secreto de Kubernetes con estos pasos:

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

    Reemplace lo siguiente:

    • LOCATION : la ubicación regional o multirregional del repositorio.
    • PROJECT_NAME
    • ACCOUNT_NAME
  2. Eliminar la copia local de la clave de su cuenta de servicio.

    rm registry-access-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 de secreto.

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

    Reemplace lo siguiente:

    • POD_NAME : el nombre de tu Pod
    • CONTAINER_NAME : el nombre del contenedor dentro del Pod
    • LOCATION
    • PROJECT_NAME

    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: us-west1-docker.pkg.dev/example-project/hello-repo/hello-app:v1
      imagePullSecrets:
      - name: registry-secret
    
  2. Aplique la configuración a su clúster con kubectl .

    kubectl apply -f hello-pod.yaml
    
  3. Confirme que el pod se esté ejecutando con kubectl get .

    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

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

    Por ejemplo, para configurar una implementación que utiliza 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: LOCATION-docker.pkg.dev/PROJECT_NAME/hello-repo/hello-app:v1
            env:
            - name: "PORT"
              value: "50001"
          imagePullSecrets:
          - name: registry-secret
    

    Reemplace lo siguiente:

    • LOCATION
    • PROJECT_NAME
  2. Aplique la configuración a su clúster con kubectl .

    kubectl apply -f hello-deployment.yaml
    
  3. Confirme que su implementación se esté ejecutando con kubectl pods .

    kubectl get pods --selector=app=products
    

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

Limpiar

Para eliminar los recursos que creó en esta página, ejecute estos comandos:

kubectl apply -f hello-pod.yaml
kubectl delete -f hello-deployment.yaml

¿Qué sigue?