Implementar contenedores (GKE, clústeres de Anthos)

En esta página, se explica cómo implementar una imagen de contenedor en un clúster de Google Kubernetes Engine (GKE) o en un clúster de Anthos en el que está habilitada la autorización binaria. Los comandos de kubectl que usas a fin de implementar la imagen son los mismos que usas para implementar imágenes en clústeres que no usan la autorización binaria.

Antes de comenzar

Asegúrate de tener habilitada la API de Binary Authorization en tu proyecto y un clúster de GKE con la Autorización binaria habilitada. Consulta cómo realizar la configuración en Google Kubernetes Engine o cómo realizar la configuración en clústeres de Anthos.

Instala kubectl para interactuar con GKE.

Configura kubectl

Debes actualizar el archivo local kubeconfig de tu instalación de kubectl. Esto proporciona las credenciales y la información del extremo necesarias para acceder al clúster en clústeres de GKE o Anthos.

Para configurar kubectl, ejecuta el siguiente comando de gcloud:

GKE

gcloud container clusters get-credentials \
    --zone ZONE \
    CLUSTER_NAME

Reemplaza lo siguiente:

  • ZONE: Es el nombre de la zona de GKE en la que se ejecuta el clúster, por ejemplo, us-central1-a.
  • CLUSTER_NAME: es el nombre del clúster

clústeres de Anthos

gcloud container fleet memberships get-credentials \
    --location LOCATION \
    MEMBERSHIP_NAME

Reemplaza lo siguiente:

  • LOCATION: Es la ubicación de la membresía de la flota del clúster de Anthos, por ejemplo, global.
  • MEMBERSHIP_NAME: Es el nombre de la membresía de la flota del clúster de Anthos.

Implementa la imagen de contenedor

Implementa tu imagen de contenedor de la siguiente manera:

  1. Configure las variables de entorno:

    POD_NAME=POD_NAME
    IMAGE_PATH=IMAGE_PATH
    IMAGE_DIGEST=IMAGE_DIGEST
    

    Reemplaza lo siguiente:

    • POD_NAME: es el nombre que deseas usar para la carga de trabajo de GKE
    • IMAGE_PATH: es la ruta de acceso de la imagen en Artifact Registry, Container Registry o algún otro registro.
    • IMAGE_DIGEST: Es el resumen del manifiesto de la imagen. Estos son algunos ejemplos:

      • Artifact Registry:
        • Ruta de acceso: us-docker.pkg.dev/google-samples/containers/gke/hello-app
        • Resumen: sha256:37e5287945774f27b418ce567cd77f4bbc9ef44a1bcd1a2312369f31f9cce567
      • Container Registry:
        • Ruta de acceso: gcr.io/google-samples/hello-app
        • Resumen: sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4

      Para aprender a obtener el resumen de una imagen en Artifact Registry, consulta Administra imágenes. Para obtener una imagen en Container Registry, consulta Enumera las versiones de una imagen.

  2. Implementa la imagen con el comando kubectl run.

    Debes implementar la imagen mediante el resumen en lugar de una etiqueta como 1.0 o latest, ya que la autorización binaria usa la ruta de la imagen y el resumen para buscar certificaciones.

    Para implementar la imagen, ejecuta el siguiente comando de kubectl:

    kubectl run ${POD_NAME} \
        --image ${IMAGE_PATH}@${IMAGE_DIGEST}
    

    Ahora, verifica que la autorización binaria haya bloqueado la implementación:

    kubectl get pods
    

    Verás el Pod en la lista.

Fail open

El proceso de aplicación falla si los clústeres de GKE o Anthos no pueden acceder al servidor de la autorización binaria por algún motivo. Por ejemplo, si implementas una imagen de contenedor y no se puede acceder al ejecutor de la autorización binaria debido a una interrupción de la red, la imagen se implementa aunque el ejecutor la haya bloqueado. Si los registros de auditoría de Cloud están habilitados, la entrada de registro indica la imagen implementada con una condición del tipo “Fallo de apertura”.

Implementa imágenes que incumplan la política

La autorización binaria admite una función conocida como de emergencia que permite que se implemente una imagen, incluso si infringe la política.

Para obtener más información, consulta Usa flujos de trabajo de emergencia.

Limpia

Para realizar una limpieza, borra el Pod mediante la ejecución del siguiente comando:

  kubectl delete pod ${POD_NAME}
  

¿Qué sigue?