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:
Ve a la página Google Kubernetes Engine en la consola de Google Cloud .
En la lista de clústeres, haz clic en el nombre del clúster.
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:
- En la página de detalles del clúster, haz clic en Editar identidad de carga de trabajo.
- En el cuadro de diálogo Editar Workload Identity, selecciona la casilla Habilitar Workload Identity.
- 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
Con el proyecto de tu clúster seleccionado, ve a la página IAM y administración de la Google Cloud consola.
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
Para conceder el rol
gkehub.serviceAgent
agcp-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
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
Ejecuta el siguiente comando para conceder a la cuenta de servicio el rol
roles/gkehub.serviceAgent
en ambos proyectos y el rolroles/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.
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
ygkehub.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
Crea una cuenta de servicio de la siguiente manera:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME --project=FLEET_HOST_PROJECT_ID
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].
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
Asegúrate de haber instalado el complemento Config Connector. Debes tener una versión de Config Connector superior a 1.47.0.
Sigue las instrucciones de Config Connector para crear una cuenta de servicio.
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].
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.