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:
Ve a la página de Google Kubernetes Engine en la consola de Google Cloud:
En la lista de clústeres, haz clic en el nombre de tu clúster.
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:
- En la página de detalles del clúster, haz clic en Editar Workload Identity.
- En el cuadro de diálogo Editar Workload Identity, selecciona la casilla de verificación Habilitar Workload Identity.
- 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
Con el proyecto de tu clúster seleccionado, ve a la página IAM y administración en la consola de Google Cloud.
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
Para otorgar 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 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
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
Ejecuta el siguiente comando para otorgar a la cuenta de servicio la función
roles/gkehub.serviceAgent
en ambos proyectos yroles/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 ID del proyecto de Google Cloud del clúster de GKE.
- FLEET_HOST_PROJECT_ID es el ID del proyecto de Google Cloud en el que deseas registrar los clústeres. Obtén más información para encontrar este valor.
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
ygkehub.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
Crea una cuenta de servicio de la siguiente manera:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME --project=FLEET_HOST_PROJECT_ID
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:
- FLEET_HOST_PROJECT_ID es el ID del proyecto de Google Cloud en el que deseas registrar los clústeres. Obtén más información para encontrar este valor.
- SERVICE_ACCOUNT_NAME es el nombre para mostrar que eliges para la [Cuenta de servicio].
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
Asegúrate de haber instalado el complemento de 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.
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:
- FLEET_HOST_PROJECT_ID es el ID del proyecto de Google Cloud en el que deseas registrar los clústeres. Obtén más información para encontrar este valor.
- SERVICE_ACCOUNT_NAME es el nombre para mostrar que eliges para la [Cuenta de servicio].
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.