Requisitos previos para los clústeres de GKE en Google Cloud

Si registras un clúster de GKE en Google Cloud, es posible que debas realizar una o más de las siguientes acciones antes de registrar el clúster, según la opción de registro que elijas. En esta guía, se da por sentado que ya completaste los prerequisitos generales para el registro del clúster.

Habilita la federación de identidades para cargas de trabajo para GKE

Te recomendamos registrar tus clústeres de GKE con la función federación de identidades para cargas de trabajo habilitada, que proporciona una forma coherente para que las aplicaciones de los clústeres se autentiquen en las APIs y los servicios de Google Cloud. Puedes obtener más información sobre las ventajas de habilitar la función federación de identidades para cargas de trabajo en Usa la federación de identidades para cargas de trabajo de la flota.

Para usar esta función, debes asegurarte de que la federación de identidades para cargas de trabajo para GKE esté habilitada en el clúster antes del registro. Registrar un clúster de GKE con la federación de identidades para cargas de trabajo de flota sin tener habilitada esta función para GKE en el clúster puede generar incoherencias en la forma en que las cargas de trabajo del clúster confirman la identidad y no es una configuración admisible. Los clústeres de Autopilot tienen la federación de identidades para cargas de trabajo para GKE habilitada de forma predeterminada.

gcloud

Para verificar si tu clúster tiene habilitada la federación de identidades para cargas de trabajo para GKE, ejecuta el siguiente comando a fin de enumerar el grupo de identidades para cargas de trabajo del clúster. Si aún no especificaste una zona o región predeterminada para gcloud, debes especificar una marca --region o --zone cuando ejecutes este comando.

gcloud container clusters describe CLUSTER_NAME --format="value(workloadIdentityConfig.workloadPool)"

Reemplaza lo siguiente:

  • CLUSTER_NAME: Es el name del clúster de GKE.

Si ves un resultado similar al siguiente, la federación de identidades para cargas de trabajo para GKE ya está habilitada en tu clúster:

GKE_PROJECT_ID.svc.id.goog

Si no hay resultados, la federación de identidades para cargas de trabajo para GKE no está habilitada. Sigue las instrucciones en Habilita la federación de identidades para cargas de trabajo para GKE.

Console

Para verificar si tu clúster tiene habilitada la federación de identidades para cargas de trabajo para GKE, haz lo siguiente:

  1. Ve a la página de Google Kubernetes Engine en la consola de Google Cloud:

    Ir a Google Kubernetes Engine

  2. En la lista de clústeres, haz clic en el nombre de tu clúster.

  3. En la página de detalles del clúster, en la sección Seguridad, confirma que Workload Identity aparezca como Habilitada.

Si Workload Identity está Inhabilitada y deseas habilitar esta función, haz lo siguiente:

  1. En la página de detalles del clúster, haz clic en Editar Workload Identity.
  2. En el cuadro de diálogo Editar Workload Identity, selecciona la casilla de verificación Habilitar Workload Identity.
  3. Haz clic en Guardar cambios.

Otorga permisos para registrar un clúster en un proyecto diferente

El registro de un clúster de GKE en la flota de su propio proyecto no requiere ningún permiso especial además de los descritos en Otorga permisos de acceso. Sin embargo, si quieres registrar un clúster de GKE desde su propio proyecto (GKE_PROJECT) en una flota de otro proyecto (FLEET_HOST_PROJECT), la cuenta del agente de servicio gcp-sa-gkehub de FLEET_HOST_PROJECT debe tener el rol gkehub.serviceAgent en el proyecto GKE_PROJECT. Este rol otorga a la cuenta de servicio los permisos para administrar los recursos del clúster en ese proyecto.

Puedes verificar si la cuenta de servicio gcp-sa-gkehub del proyecto host de la flota tiene el rol necesario en el proyecto de tu clúster mediante la CLI de gcloud o la consola de Google Cloud de la siguiente manera.

gcloud

Ejecuta el siguiente comando:

gcloud projects get-iam-policy GKE_PROJECT_ID | grep gcp-sa-gkehub

En el ejemplo anterior, GKE_PROJECT_ID es el ID del proyecto de tu clúster.

Si el proyecto host de la flota gcp-sa-gkehub tiene los roles necesarios en el proyecto de tu clúster, debe aparecer en el resultado con el formato service-[FLEET_HOST-PROJECT-NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com. Por ejemplo:

- members:
  - serviceAccount:service-1234567890@gcp-sa-gkehub.iam.gserviceaccount.com
  role: roles/gkehub.serviceAgent

Console

  1. Con el proyecto de tu clúster seleccionado, ve a la página IAM y administración en la consola de Google Cloud.

    Ir a la página IAM y administración

  2. Selecciona la casilla de verificación Incluir asignaciones de roles proporcionados por Google para ver la política de permisos completa, incluidos los agentes de servicio.

Si la cuenta de servicio del proyecto host de la flota gcp-sa-gkehub tiene los roles necesarios en el proyecto de tu clúster, debería aparecer en esta lista con el formato service-[FLEET_HOST-PROJECT-NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com.

Si no ves el agente de servicio en la política de permisos de IAM del proyecto, haz lo siguiente para actualizar los permisos necesarios:

gcloud

  1. Para otorgar el rol gkehub.serviceAgent a gcp-sa-gkehub, primero asegúrate de que esta cuenta de servicio exista en el proyecto host de la flota. Si registraste clústeres en este proyecto anteriormente, esta cuenta de servicio ya debe existir. Puedes verificarlo si observas la política de permisos IAM para el proyecto host de la flota:

    gcloud projects get-iam-policy FLEET_HOST_PROJECT_ID | grep gcp-sa-gkehub
    
  2. Si necesitas crear la cuenta de servicio gcp-sa-gkehub, ejecuta el siguiente comando:

    gcloud beta services identity create --service=gkehub.googleapis.com --project=FLEET_HOST_PROJECT_ID
    

    Este comando debería mostrar el resultado:

    Service identity created: service-[FLEET_HOST_PROJECT_NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com
    
  3. Ejecuta el siguiente comando para otorgar a la cuenta de servicio la función roles/gkehub.serviceAgent en ambos proyectos y roles/gkehub.crossProjectServiceAgent en el proyecto del clúster:

    GKE_PROJECT_ID=GKE_PROJECT_ID
    FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
    FLEET_HOST_PROJECT_NUMBER=$(gcloud projects describe "${FLEET_HOST_PROJECT_ID}" --format "value(projectNumber)")
    gcloud projects add-iam-policy-binding "${FLEET_HOST_PROJECT_ID}" \
      --member "serviceAccount:service-${FLEET_HOST_PROJECT_NUMBER}@gcp-sa-gkehub.iam.gserviceaccount.com" \
      --role roles/gkehub.serviceAgent
    gcloud projects add-iam-policy-binding "${GKE_PROJECT_ID}" \
      --member "serviceAccount:service-${FLEET_HOST_PROJECT_NUMBER}@gcp-sa-gkehub.iam.gserviceaccount.com" \
      --role roles/gkehub.serviceAgent
    gcloud projects add-iam-policy-binding "${GKE_PROJECT_ID}" \
      --member "serviceAccount:service-${FLEET_HOST_PROJECT_NUMBER}@gcp-sa-gkehub.iam.gserviceaccount.com" \
      --role roles/gkehub.crossProjectServiceAgent
    

    Donde:

  4. Para confirmar que la vinculación de función se otorgó, vuelve a ejecutar el comando siguiente:

    gcloud projects get-iam-policy GKE_PROJECT_ID
    

    Si ves el nombre de la cuenta de servicio junto con las funciones gkehub.serviceAgent y gkehub.crossProjectServiceAgent, se otorgaron las vinculaciones de funciones. Por ejemplo:

    - members:
      - serviceAccount:service-[FLEET_HOST_PROJECT_NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com
      role: roles/gkehub.serviceAgent
    - members:
      - serviceAccount:service-[FLEET_HOST_PROJECT_NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com
      role: roles/gkehub.crossProjectServiceAgent
    

Configura una cuenta de servicio para Terraform

Si deseas usar Terraform para registrar un clúster de Google Kubernetes Engine, debes crear una cuenta de servicio que Terraform pueda usar a fin de acceder a la API de Fleet para crear una membresía.

gcloud

  1. Crea una cuenta de servicio de la siguiente manera:

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME --project=FLEET_HOST_PROJECT_ID
    
  2. Vincula la función de IAM gkehub.admin a la cuenta de servicio para que Terraform pueda usarla con la API de Fleet:

    FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
    gcloud projects add-iam-policy-binding ${FLEET_HOST_PROJECT_ID} \
       --member="serviceAccount:SERVICE_ACCOUNT_NAME@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com" \
       --role="roles/gkehub.admin"
    

    Si deseas crear un clúster nuevo con Terraform y, luego, registrarlo, también debes vincular la función roles/container.admin a la cuenta de servicio para que Terraform pueda usar esta cuenta de servicio a fin de acceder a la API de GKE y crear un clúster.

    FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
    gcloud projects add-iam-policy-binding ${FLEET_HOST_PROJECT_ID} \
       --member="serviceAccount:SERVICE_ACCOUNT_NAME@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com" \
       --role="roles/container.admin"
    

    Reemplaza lo siguiente:

  3. Descarga el archivo JSON de clave privada de la cuenta de servicio, como se describe en Crea una cuenta de servicio de Google Cloud con gcloud. Necesitarás este archivo para crear y registrar clústeres con Terraform.

Crea una cuenta de servicio para Config Connector

Si deseas usar Config Connector para registrar un clúster de GKE, haz lo siguiente:

gcloud

  1. Asegúrate de haber instalado el complemento de Config Connector. Debes tener una versión de Config Connector superior a 1.47.0.

  2. Sigue las instrucciones de Config Connector para crear una cuenta de servicio.

  3. Vincula la función de IAM gkehub.admin a esta cuenta de servicio para que Config Connector pueda usar esta cuenta de servicio a fin de acceder a la API de la flota:

    FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
    gcloud projects add-iam-policy-binding ${FLEET_HOST_PROJECT_ID} \
       --member="serviceAccount:SERVICE_ACCOUNT_NAME@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com" \
       --role="roles/gkehub.admin"
    

    Si deseas crear un clúster nuevo con Config Connector y, luego, registrarlo, también debes vincular la función roles/container.admin a la cuenta de servicio para que tu controlador de Config Connector pueda usar esta cuenta de servicio a fin de acceder a la API de GKE y crear un clúster,

    FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
    gcloud projects add-iam-policy-binding ${FLEET_HOST_PROJECT_ID} \
       --member="serviceAccount:SERVICE_ACCOUNT_NAME@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com" \
       --role="roles/container.admin"
    

    Reemplaza lo siguiente:

  4. Sigue las instrucciones de Config Connector para configurar tu Config Connector con esta cuenta de servicio.

Próximos pasos

Sigue las instrucciones para registrar un clúster.