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

Si vas a registrar un clúster de GKE en Google Cloud, es posible que tengas que hacer una o varias de las siguientes acciones antes de registrar el clúster, en función de la opción de registro que elijas. En esta guía se da por hecho que ya has completado los requisitos generales para registrar clústeres.

Habilitar Workload Identity Federation para GKE

Te recomendamos que registres tus clústeres de GKE con la federación de identidades de carga de trabajo de la flota habilitada, lo que proporciona una forma coherente para que las aplicaciones de los clústeres se autentiquen en las Google Cloud APIs y los servicios. Puedes consultar más información sobre las ventajas de habilitar la federación de identidades de cargas de trabajo de flotas en el artículo Usar la federación de identidades de cargas de trabajo de flotas.

Para usar esta función, debes asegurarte de que Federación de Identidad de Carga de Trabajo para GKE esté habilitada en el clúster antes del registro. Si registras un clúster de GKE con la federación de identidades de carga de trabajo de la flota sin haber habilitado la federación de identidades de carga de trabajo de GKE en el clúster, se pueden producir incoherencias en la forma en que las cargas de trabajo del clúster afirman la identidad. Por lo tanto, no es una configuración admitida. Los clústeres de Autopilot tienen habilitada de forma predeterminada la federación de Workload Identity para GKE.

gcloud

Para comprobar si tu clúster tiene habilitada la federación de Workload Identity para GKE, ejecuta el siguiente comando para enumerar el grupo de identidades de carga de trabajo del clúster. Si aún no has especificado una zona o una región predeterminada para gcloud, debes especificar un indicador --region o --zone al ejecutar este comando.

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

Haz los cambios siguientes:

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

Si ves un resultado similar al siguiente, significa que Workload Identity Federation for GKE ya está habilitado en tu clúster:

GKE_PROJECT_ID.svc.id.goog

Si no hay resultados, significa que Workload Identity Federation para GKE no está habilitada. Sigue las instrucciones de Habilitar Workload Identity Federation para GKE.

Consola

Para comprobar si tu clúster tiene habilitada la federación de Workload Identity para GKE, sigue estos pasos:

  1. Ve a la página 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 del clúster.

  3. En la página de detalles del clúster, en la sección Seguridad, comprueba que Workload Identity aparece como Habilitado.

Si Workload Identity está inhabilitado y quieres habilitar esta función, sigue estos pasos:

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

Dar permisos para registrar un clúster en otro proyecto

Para registrar un clúster de GKE en la flota de su propio proyecto, no se necesitan permisos especiales más allá de los que se describen en Conceder permisos de acceso. Sin embargo, si quieres registrar un clúster de GKE de su propio proyecto (GKE_PROJECT) en una flota de un proyecto diferente (FLEET_HOST_PROJECT), la cuenta de agente de serviciogcp-sa-gkehub de FLEET_HOST_PROJECT debe tener el rol gkehub.serviceAgent en el proyecto GKE_PROJECT. Este rol concede a la cuenta de servicio los permisos necesarios para gestionar los recursos del clúster en ese proyecto.

Puedes comprobar si la cuenta de servicio del proyecto host de la flota gcp-sa-gkehub tiene el rol necesario en el proyecto de tu clúster con la CLI de gcloud o la Google Cloud consola, como se indica a continuación.

gcloud

Ejecuta el siguiente comando:

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

donde 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, debería 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

Consola

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

    Ve a la página IAM y administración.

  2. Selecciona la casilla Incluir concesiones de roles proporcionadas 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 ve el agente de servicio en la política de permisos de gestión de identidades y accesos del proyecto, haga lo siguiente para actualizar los permisos necesarios:

gcloud

  1. Para conceder 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 ya has registrado clústeres en este proyecto de flota, esta cuenta de servicio ya debería existir. Para comprobarlo, consulta la política de permisos de gestión de identidades y accesos del 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 lo siguiente:

    Service identity created: service-[FLEET_HOST_PROJECT_NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com
    
  3. Ejecuta el siguiente comando para conceder a la cuenta de servicio el rol roles/gkehub.serviceAgent en ambos proyectos y el rol 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:

    • GKE_PROJECT_ID es el Google Cloud ID de proyecto del clúster de GKE.
    • FLEET_HOST_PROJECT_ID es el Google Cloud ID del proyecto en el que quieres registrar los clústeres. Consulta cómo encontrar este valor.
  4. Para confirmar que se ha concedido la vinculación de rol, vuelve a ejecutar el siguiente comando:

    gcloud projects get-iam-policy GKE_PROJECT_ID
    

    Si ves el nombre de la cuenta de servicio junto con los roles gkehub.serviceAgent y gkehub.crossProjectServiceAgent, significa que se han concedido las vinculaciones de roles. 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
    

Configurar una cuenta de servicio para Terraform

Si quieres usar Terraform para registrar un clúster de Google Kubernetes Engine, debes crear una cuenta de servicio que Terraform pueda usar para acceder a la API Fleet y crear una pertenencia.

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. Asigna el rol de gestión de identidades y accesos gkehub.admin a la cuenta de servicio para que Terraform pueda usarla con la API 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 quieres crear un clúster con Terraform y, a continuación, registrarlo, también debes asignar el rol roles/container.admin a la cuenta de servicio para que Terraform pueda usarla y acceder a la API de GKE para 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"
    

    Haz los cambios siguientes:

    • FLEET_HOST_PROJECT_ID es el Google Cloud ID del proyecto en el que quieres registrar los clústeres. Consulta cómo encontrar este valor.
    • SERVICE_ACCOUNT_NAME es el nombre visible que elijas para la [Service Account].
  3. Descarga el archivo JSON de la clave privada de la cuenta de servicio, tal como se describe en Crear una Google Cloud cuenta de servicio con gcloud. Necesitarás este archivo para crear y registrar clústeres con Terraform.

Configurar una cuenta de servicio para Config Connector

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

gcloud

  1. Asegúrate de haber instalado el complemento 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. Asigna el rol de IAM gkehub.admin a esta cuenta de servicio para que tu Config Connector pueda usarla para acceder a la API 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 quieres crear un clúster con Config Connector y, a continuación, registrarlo, también debes vincular el rol roles/container.admin a la cuenta de servicio para que tu controlador de Config Connector pueda usar esta cuenta de servicio para 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"
    

    Haz los cambios siguientes:

    • FLEET_HOST_PROJECT_ID es el Google Cloud ID del proyecto en el que quieres registrar los clústeres. Consulta cómo encontrar este valor.
    • SERVICE_ACCOUNT_NAME es el nombre visible que elijas para la [Service Account].
  4. Sigue las instrucciones de Config Connector para configurar Config Connector con esta cuenta de servicio.

Siguientes pasos

Sigue las instrucciones para registrar un clúster.