En este documento se describe cómo configurar y usar la autenticación de clúster de Workload Identity para Google Distributed Cloud (solo software) en bare metal. En lugar de usar claves de cuentas de servicio, la autenticación de clústeres de Workload Identity usa tokens de corta duración y la federación de identidades de cargas de trabajo para crear y proteger tus clústeres. Las credenciales de corta duración de la cuenta de servicio tienen el formato de tokens de acceso de OAuth 2.0. Los tokens de acceso caducan después de 1 hora de forma predeterminada. Del mismo modo, los tokens de extracción de imágenes también caducan al cabo de una hora de forma predeterminada.
Por el contrario, el modo con clave, el método estándar para crear y proteger clústeres, utiliza claves de cuenta de servicio descargadas. Cuando creas un clúster autogestionado (administrador, híbrido o independiente), especificas la ruta a las claves descargadas. Las claves se almacenan como secretos en el clúster y en cualquier clúster de usuario gestionado. De forma predeterminada, las claves de cuentas de servicio no caducan y suponen un riesgo para la seguridad si no se gestionan correctamente. Para obtener información sobre cómo definir un tiempo de vencimiento para las claves de tu cuenta de servicio, consulta Tiempos de vencimiento de las claves gestionadas por el usuario.
La autenticación de clúster de Workload Identity ofrece dos ventajas principales con respecto al uso de claves de cuenta de servicio:
Seguridad mejorada: las claves de las cuentas de servicio suponen un riesgo para la seguridad si no se gestionan adecuadamente. Los tokens de OAuth 2.0 y la federación de identidades de cargas de trabajo se consideran alternativas recomendadas a las claves de cuentas de servicio. Para obtener más información sobre los tokens de cuentas de servicio, consulta el artículo Credenciales de cuentas de servicio de corta duración. Para obtener más información sobre la federación de identidades de cargas de trabajo, consulta Federación de identidades de cargas de trabajo.
Mantenimiento reducido: las claves de cuenta de servicio requieren más mantenimiento. Rotar y proteger estas claves con regularidad puede suponer una carga administrativa considerable.
La autenticación de clústeres de Workload Identity se introdujo en la versión preliminar con la versión 1.30 y está disponible de forma general en la versión 1.33 y posteriores. La autenticación de clúster de Workload Identity solo se puede habilitar al crear clústeres. No puedes configurar un clúster para que use la autenticación de clúster de identidad de carga de trabajo durante una actualización. Para ver más restricciones, consulta Limitaciones.
Esta página está dirigida a administradores, arquitectos y operadores que configuran, monitorizan y gestionan el ciclo de vida de la infraestructura tecnológica subyacente. Para obtener más información sobre los roles habituales y las tareas de ejemplo a las que hacemos referencia en el contenido, consulta Roles y tareas habituales de los usuarios de GKE.Google Cloud
Antes de empezar
En las siguientes secciones, creará cuentas de servicio y concederá los roles necesarios para la autenticación de clústeres de identidad de carga de trabajo. Las instrucciones de configuración de este documento no sustituyen a las de Configurar recursos Google Cloud, sino que son necesarias además de los requisitos previos de instalación estándar solo de software de Google Distributed Cloud. Las cuentas de servicio necesarias para la autenticación de clústeres de Workload Identity son similares a las cuentas de servicio descritas en Configurar recursos deGoogle Cloud , pero tienen nombres únicos, por lo que no interfieren con los clústeres que usan las claves de cuenta de servicio predeterminadas.
Las cuentas de servicio necesarias para la autenticación de clústeres de Workload Identity difieren en las ofertas de vista previa y de disponibilidad general, tal como se describe en la siguiente tabla:
1.33 y versiones posteriores
Cuenta de servicio | Finalidad | Roles |
---|---|---|
admin-sa |
Esta cuenta de servicio se usa para generar tokens. Cada token tiene los privilegios asociados a los roles de la cuenta de servicio. |
roles/gkehub.admin roles/iam.serviceAccountAdmin roles/iam.serviceAccountTokenCreator roles/logging.admin roles/monitoring.admin roles/resourcemanager.projectIamAdmin
|
baremetal-gcr |
Google Distributed Cloud usa esta cuenta de servicio para descargar imágenes de contenedor de Artifact Registry. | Ninguno |
1.30-1.32
Cuenta de servicio | Finalidad | Roles |
---|---|---|
admin-sa |
Esta cuenta de servicio se usa para generar tokens. Cada token tiene los privilegios asociados a los roles de la cuenta de servicio. |
roles/gkehub.admin roles/iam.serviceAccountAdmin roles/iam.serviceAccountTokenCreator roles/logging.admin roles/monitoring.admin
|
baremetal-controller |
Agente de Connect
usa esta cuenta de servicio para mantener una conexión entre tu clúster y
Google Cloud y para registrar tus clústeres en
una flota.
Esta cuenta de servicio también actualiza los tokens de la cuenta de servicio baremetal-gcr .
|
roles/gkehub.admin roles/monitoring.dashboardEditor roles/serviceusage.serviceUsageViewer
|
baremetal-cloud-ops |
El agente de Stackdriver usa esta cuenta de servicio para exportar registros y métricas de clústeres a Cloud Logging y Cloud Monitoring. |
roles/kubernetesmetadata.publisher roles/logging.logWriter roles/monitoring.dashboardEditor roles/monitoring.metricWriter roles/monitoring.viewer roles/opsconfigmonitoring.resourceMetadata.writer roles/serviceusage.serviceUsageViewer roles/stackdriver.resourceMetadata.writer
|
baremetal-gcr |
Google Distributed Cloud usa esta cuenta de servicio para descargar imágenes de contenedor de Artifact Registry. | Ninguno |
Configurar cuentas de servicio
En las siguientes secciones se incluyen instrucciones para crear las cuentas de servicio necesarias y asignarles los roles necesarios para la autenticación de clústeres de Workload Identity. Para ver una lista de las cuentas de servicio y los roles necesarios, consulta la tabla de la sección anterior.
Crear cuentas de servicio
Para crear las cuentas de servicio de la autenticación de clúster de Workload Identity, sigue estos pasos:
En tu estación de trabajo de administrador, inicia sesión en Google Cloud CLI:
gcloud auth login
Crea las cuentas de servicio necesarias para la autenticación de clústeres de Workload Identity:
El nombre de la cuenta de servicio
admin-sa
es arbitrario. Puedes cambiar el nombre si provoca un conflicto en tu proyecto. Las otras cuentas de servicio de la autenticación de clúster de Workload Identity tienen nombres predeterminados que se pueden personalizar si quieres.1.33 y versiones posteriores
gcloud iam service-accounts create admin-sa \ --project=PROJECT_ID gcloud iam service-accounts create baremetal-gcr \ --project=PROJECT_ID
Sustituye
PROJECT_ID
por el ID de tuGoogle Cloud proyecto.1.30-1.32
gcloud iam service-accounts create admin-sa \ --project=PROJECT_ID gcloud iam service-accounts create baremetal-controller \ --project=PROJECT_ID gcloud iam service-accounts create baremetal-cloud-ops \ --project=PROJECT_ID gcloud iam service-accounts create baremetal-gcr \ --project=PROJECT_ID
Sustituye
PROJECT_ID
por el ID de tuGoogle Cloud proyecto.
Añadir enlaces de políticas de gestión de identidades y accesos para cuentas de servicio
Sigue estos pasos para aplicar las vinculaciones de políticas de gestión de identidades y accesos necesarias a las nuevas cuentas de servicio:
1.33 y versiones posteriores
Añade enlaces de políticas de gestión de identidades y accesos para los roles necesarios de la cuenta de servicio
admin-sa
:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/gkehub.admin gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountAdmin gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/logging.admin gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/monitoring.admin gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/resourcemanager.projectIamAdmin
1.30-1.32
Añade enlaces de políticas de gestión de identidades y accesos para los roles necesarios de la cuenta de servicio
admin-sa
:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/gkehub.admin gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountAdmin gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/logging.admin gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/monitoring.admin
Añade enlaces de políticas de gestión de identidades y accesos para los roles necesarios de la cuenta de servicio
baremetal-controller
:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/gkehub.admin gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/monitoring.dashboardEditor gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/serviceusage.serviceUsageViewer
Añade enlaces de políticas de gestión de identidades y accesos para los roles necesarios de la cuenta de servicio
baremetal-cloud-ops
:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/kubernetesmetadata.publisher gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/logging.logWriter gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/monitoring.dashboardEditor gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/monitoring.metricWriter gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/monitoring.viewer gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/opsconfigmonitoring.resourceMetadata.writer gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/serviceusage.serviceUsageViewer gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/stackdriver.resourceMetadata.writer
Concede a la cuenta de servicio
baremetal-controller
la capacidad de generar tokens de acceso en nombre de la cuenta de serviciobaremetal-gcr
:gcloud iam service-accounts add-iam-policy-binding \ baremetal-gcr@PROJECT_ID.iam.gserviceaccount.com \ --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
Configurar la autenticación
En los siguientes pasos se configura el flujo de autenticación que usa un token de corta duración para autenticar las operaciones del clúster:
En tu estación de trabajo de administrador, inicia sesión en Google Cloud CLI:
gcloud auth login
En tu estación de trabajo de administrador, crea y descarga una clave para la
admin-sa
cuenta de servicio:Esta clave es necesaria para autorizar el acceso a la cuenta de servicio
admin-sa
.gcloud iam service-accounts keys create TMP_KEY_FILE_PATH \ --iam-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com
Sustituye
TMP_KEY_FILE_PATH
por la ruta, incluido el nombre de archivo, del archivo de clave descargado.En tu estación de trabajo de administrador, crea una variable de entorno
GOOGLE_APPLICATION_CREDENTIALS
con el valor de la clave de cuenta de servicio descargada:export GOOGLE_APPLICATION_CREDENTIALS=TMP_KEY_FILE_PATH
En tu estación de trabajo de administrador, crea una variable de entorno
GCP_ACCESS_TOKEN
con el valor de un token de acceso creado por la cuenta de servicioadmin-sa
:export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
De forma predeterminada, el token de acceso tiene una duración de 1 hora.
Verifica que el token lo haya generado la cuenta de servicio
admin-sa
con la fecha de vencimiento correcta:curl "https://oauth2.googleapis.com/tokeninfo?access_token=$GCP_ACCESS_TOKEN"
La respuesta debe incluir líneas similares a las siguientes:
... "exp": "1759512810", "expires_in": "3589", ...
El valor de vencimiento está en segundos y debe ser inferior a
3600
, lo que indica que el token caduca en menos de una hora.
Configurar Workload Identity Federation para tus clústeres
Para proporcionar acceso con la federación de identidades de carga de trabajo para GKE, crea una política de permiso de IAM que conceda acceso a un recursoGoogle Cloud específico a una entidad principal que corresponda a la identidad de tu aplicación. Google Cloud En este caso, la federación de identidades de cargas de trabajo concede acceso a operadores específicos del clúster. Para obtener más información sobre Workload Identity Federation para GKE, consulta Workload Identity Federation en la documentación de gestión de identidades y accesos.
1.33 y versiones posteriores
En las versiones de clúster en las que la autenticación de clúster de Workload Identity está disponible de forma general, se usa el comando bmctl configure
projects
para configurar la federación de identidades de cargas de trabajo en los clústeres. Este comando se incluye en los pasos para crear un clúster de administradores y crear un clúster de usuarios.
1.30-1.32
En las versiones de clúster en las que la autenticación de clúster de Workload Identity esté en vista previa, debes configurar manualmente la federación de identidad de carga de trabajo de tus clústeres, tal como se describe en las secciones siguientes.
Añadir enlaces de políticas de gestión de identidades y accesos para el operador del clúster
Los siguientes comandos conceden a la cuenta de servicio de Kubernetes anthos-cluster-operator
la capacidad de usar la identidad de la cuenta de servicio baremetal-controller
e interactuar con los recursos de Google Cloud en nombre del clúster:
En cada clúster configurado para la autenticación de clústeres de Workload Identity (o que tenga previsto usarla), incluido el clúster de arranque, concede a
anthos-cluster-operator
en el clúster la capacidad de suplantar la cuenta de serviciobaremetal-controller
:En el siguiente comando, el
principalSet
consta del grupo de identidades de carga de trabajo y una cuenta de servicio de Kubernetes,anthos-cluster-operator
, en el espacio de nombreskube-system
.gcloud iam service-accounts add-iam-policy-binding \ baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \ --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/anthos-cluster-operator \ --role=roles/iam.workloadIdentityUser \ --project=PROJECT_ID
Haz los cambios siguientes:
PROJECT_NUM
: el identificador único generado automáticamente para tu proyecto.REGION
: la ubicación de la pertenencia a la flota de tu clúster, que esglobal
de forma predeterminada. Para obtener más información, consulta Ubicación de los miembros de la flota.CLUSTER_NAME
: el nombre del clúster. De forma predeterminada, el nombre del clúster de arranque esbmctl-MACHINE_NAME
.
Verifica las vinculaciones de políticas de la cuenta de servicio
baremetal-controller
:gcloud iam service-accounts get-iam-policy \ baremetal-controller@PROJECT_ID.iam.gserviceaccount.com
La respuesta debería ser similar a la siguiente:
bindings: - members: - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/anthos-cluster-operator - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/anthos-cluster-operator - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/anthos-cluster-operator role: roles/iam.workloadIdentityUser etag: BwYoN3QLig0= version: 1
Añadir enlaces de políticas de gestión de identidades y accesos para los operadores de Google Cloud Observability
Los siguientes comandos conceden a las siguientes cuentas de servicio de Kubernetes de Google Cloud Observability la capacidad de usar la identidad de la cuenta de servicio baremetal-cloud-ops
e interactuar con los recursos de Google Cloud en nombre del clúster:
cloud-audit-logging
gke-metrics-agent
kubestore-collector
metadata-agent
stackdriver-log-forwarder
En cada clúster configurado para la autenticación de clústeres de Workload Identity (o que tenga previsto usarla), incluido el clúster de arranque, concede a los operadores de Google Cloud Observability del clúster la capacidad de suplantar la cuenta de servicio
baremetal-cloud-ops
:En cada uno de los siguientes comandos,
principalSet
consta del grupo de identidades de carga de trabajo y de una cuenta de servicio de Kubernetes, comocloud-audit-logging
, en el espacio de nombreskube-system
.gcloud iam service-accounts add-iam-policy-binding \ baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/cloud-audit-logging \ --role=roles/iam.workloadIdentityUser \ --project=PROJECT_ID gcloud iam service-accounts add-iam-policy-binding \ baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/gke-metrics-agent \ --role=roles/iam.workloadIdentityUser \ --project=PROJECT_ID gcloud iam service-accounts add-iam-policy-binding \ baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/kubestore-collector \ --role=roles/iam.workloadIdentityUser \ --project=PROJECT_ID gcloud iam service-accounts add-iam-policy-binding \ baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/metadata-agent \ --role=roles/iam.workloadIdentityUser \ --project=PROJECT_ID gcloud iam service-accounts add-iam-policy-binding \ baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/stackdriver-log-forwarder \ --role=roles/iam.workloadIdentityUser \ --project=PROJECT_ID
Verifica las vinculaciones de políticas de la cuenta de servicio
baremetal-cloud-ops
:gcloud iam service-accounts get-iam-policy \ baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com
La respuesta debería ser similar a la siguiente:
bindings: - members: - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/cloud-audit-logging - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/gke-metrics-agent - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/kubestore-collector - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/metadata-agent - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/stackdriver-log-forwarder - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/cloud-audit-logging - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/gke-metrics-agent - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/kubestore-collector - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/metadata-agent - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/stackdriver-log-forwarder - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/cloud-audit-logging - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/gke-metrics-agent - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/kubestore-collector - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/metadata-agent - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/stackdriver-log-forwarder role: roles/iam.workloadIdentityUser etag: BwYhT4gL-dY= version: 1
Crear clúster de administradores
Los pasos para crear un clúster de administrador varían ligeramente en las versiones Preview (de la 1.30 a la 1.32) y GA (versión 1.33 y posteriores). En los pasos de la disponibilidad general se usa el comando bmctl configure
projects
para configurar la federación de identidades de cargas de trabajo en tus clústeres.
1.33 y versiones posteriores
La diferencia más evidente en la configuración de los clústeres que usan la autenticación de clústeres de identidad de carga de trabajo es que no se especifican las rutas a las claves de las cuentas de servicio descargadas.
Cuando rellenes la configuración del clúster en el archivo de configuración, deja en blanco las rutas de las claves de la cuenta de servicio en la sección de credenciales, tal como se muestra en el siguiente ejemplo:
gcrKeyPath: sshPrivateKeyPath: /home/USERNAME/.ssh/id_rsa gkeConnectAgentServiceAccountKeyPath: gkeConnectRegisterServiceAccountKeyPath: cloudOperationsServiceAccountKeyPath: --- apiVersion: v1 kind: Namespace metadata: name: cluster-ADMIN_CLUSTER_NAME --- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: ADMIN_CLUSTER_NAME namespace: cluster-ADMIN_CLUSTER_NAME spec: type: admin profile: default anthosBareMetalVersion: 1.33.0-gke.799 ...
Añade la anotación
baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true"
al archivo de configuración del clúster:gcrKeyPath: sshPrivateKeyPath: /home/USERNAME/.ssh/id_rsa gkeConnectAgentServiceAccountKeyPath: gkeConnectRegisterServiceAccountKeyPath: cloudOperationsServiceAccountKeyPath: --- apiVersion: v1 kind: Namespace metadata: name: cluster-ADMIN_CLUSTER_NAME --- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: ADMIN_CLUSTER_NAME namespace: cluster-ADMIN_CLUSTER_NAME annotations: baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true" spec: type: admin profile: default anthosBareMetalVersion: 1.33.0-gke.799 ...
En tu estación de trabajo de administrador, actualiza la variable de entorno
GCP_ACCESS_TOKEN
con un token de acceso recién obtenido:export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
De forma predeterminada, el token de acceso tiene una duración de 3600 segundos (1 hora). Cuando usas la autenticación de clústeres de Workload Identity,
bmctl
comprueba la hora de vencimiento del token. Si el token caduca en un plazo de 1800 segundos (30 minutos),bmctl
informa de un error y se cierra.Configura la federación de identidades de cargas de trabajo para el clúster que vas a crear:
bmctl configure projects --project-id=PROJECT_ID \ --admin-cluster=ADMIN_CLUSTER_NAME
Ejecuta el comando
bmctl create cluster
para crear el clúster de administrador.
1.30-1.32
La diferencia más evidente en la configuración de los clústeres que usan la autenticación de clústeres de identidad de carga de trabajo es que no se especifican las rutas a las claves de las cuentas de servicio descargadas.
Cuando rellenes la configuración del clúster en el archivo de configuración, deja en blanco las rutas de las claves de la cuenta de servicio en la sección de credenciales, tal como se muestra en el siguiente ejemplo:
gcrKeyPath: sshPrivateKeyPath: /home/USERNAME/.ssh/id_rsa gkeConnectAgentServiceAccountKeyPath: gkeConnectRegisterServiceAccountKeyPath: cloudOperationsServiceAccountKeyPath: --- apiVersion: v1 kind: Namespace metadata: name: cluster-ADMIN_CLUSTER_NAME --- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: ADMIN_CLUSTER_NAME namespace: cluster-ADMIN_CLUSTER_NAME spec: type: admin profile: default anthosBareMetalVersion: 1.33.0-gke.799 ...
En tu estación de trabajo de administrador, crea y descarga una clave para la
admin-sa
cuenta de servicio:Esta clave es necesaria para autorizar el acceso a la cuenta de servicio
admin-sa
y debes eliminarla inmediatamente después de que se autorice la cuenta de servicio.gcloud iam service-accounts keys create TMP_KEY_FILE_PATH \ --iam-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com
Sustituye
TMP_KEY_FILE_PATH
por la ruta, incluido el nombre de archivo, del archivo de clave descargado.Autoriza el acceso a Google Cloud con la cuenta de servicio
admin-sa
:gcloud auth activate-service-account admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --key-file=TMP_KEY_FILE_PATH
Elimina el archivo de clave JSON descargado:
rm TMP_KEY_FILE_PATH
El token de acceso tiene una duración breve, por lo que normalmente debes volver a generarlo antes de ejecutar comandos
bmctl
para operaciones de clúster, como crear, actualizar o restablecer un clúster.En tu estación de trabajo de administrador, crea una variable de entorno
GCP_ACCESS_TOKEN
con el valor de un token de acceso creado por la cuenta de servicioadmin-sa
:export GCP_ACCESS_TOKEN=$(gcloud auth print-access-token \ --impersonate-service-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com)
De forma predeterminada, el token de acceso tiene una duración de 3600 segundos (1 hora).
Ejecuta el comando
bmctl create cluster
para crear el clúster de administrador.
Crear clúster de usuarios
Los pasos para crear un clúster de administrador varían ligeramente en las versiones Preview (de la 1.30 a la 1.32) y GA (versión 1.33 y posteriores). En los pasos de la disponibilidad general se usa el comando bmctl configure
projects
para configurar la federación de identidades de cargas de trabajo en tus clústeres.
1.33 y versiones posteriores
Añade la anotación
baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true"
al archivo de configuración del clúster:apiVersion: v1 kind: Namespace metadata: name: cluster-USER_CLUSTER_NAME --- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: USER_CLUSTER_NAME namespace: cluster-USER_CLUSTER_NAME annotations: baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true" spec: type: admin profile: default anthosBareMetalVersion: 1.33.0-gke.799 ...
El token de acceso tiene una duración breve, por lo que normalmente debes volver a generarlo antes de ejecutar comandos
bmctl
para operaciones de clúster, como crear, actualizar o restablecer un clúster.En tu estación de trabajo de administrador, actualiza la variable de entorno
GCP_ACCESS_TOKEN
con un token de acceso recién obtenido:export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
De forma predeterminada, el token de acceso tiene una duración de 3600 segundos (1 hora).
Configura la federación de identidades de cargas de trabajo para el clúster que vas a crear:
bmctl configure projects --project-id=PROJECT_ID \ --user-clusters=USER_CLUSTER_NAME
Usa
kubectl
para desplegar el manifiesto del clúster de usuarios:kubectl apply -f USER_CLUSTER_CONFIG \ --kubeconfig ADMIN_KUBECONFIG
Haz los cambios siguientes:
USER_CLUSTER_CONFIG
: la ruta del archivo de configuración del clúster de usuarios.ADMIN_KUBECONFIG
: la ruta del archivo kubeconfig del clúster de administrador.
1.30-1.32
En tu estación de trabajo de administrador, crea y descarga una clave para la
admin-sa
cuenta de servicio:Esta clave es necesaria para autorizar el acceso a la cuenta de servicio
admin-sa
y debes eliminarla inmediatamente después de que se autorice la cuenta de servicio.gcloud iam service-accounts keys create TMP_KEY_FILE_PATH \ --iam-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com
Sustituye
TMP_KEY_FILE_PATH
por la ruta, incluido el nombre de archivo, del archivo de clave descargado.Autoriza el acceso a Google Cloud con la cuenta de servicio
admin-sa
:gcloud auth activate-service-account admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --key-file=TMP_KEY_FILE_PATH
Elimina el archivo de clave JSON descargado:
rm TMP_KEY_FILE_PATH
El token de acceso tiene una duración breve, por lo que normalmente debes volver a generarlo antes de ejecutar comandos
bmctl
para operaciones de clúster, como crear, actualizar o restablecer un clúster.En tu estación de trabajo de administrador, crea una variable de entorno
GCP_ACCESS_TOKEN
con el valor de un token de acceso creado por la cuenta de servicioadmin-sa
:export GCP_ACCESS_TOKEN=$(gcloud auth print-access-token \ --impersonate-service-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com)
De forma predeterminada, el token de acceso tiene una duración de 3600 segundos (1 hora).
Ejecuta el comando
bmctl create cluster
para crear el clúster de usuarios.
Otras operaciones de clústeres
En los clústeres que usan la autenticación de clúster de Workload Identity, los siguientes comandos de bmctl
requieren que la variable de entorno GCP_ACCESS_TOKEN
se defina en un token de acceso válido y activo:
bmctl configure projects
bmctl create cluster
bmctl reset cluster
bmctl upgrade cluster
Si bmctl
detecta que se ha definido la variable de entorno GCP_ACCESS_TOKEN
, realiza la validación del token:
Si el token es válido,
bmctl
lo usa para las operaciones del clúster.Si el token no es válido, obtén uno nuevo:
El token de acceso tiene una duración breve, por lo que normalmente debes volver a generarlo antes de ejecutar comandos
bmctl
para operaciones de clúster, como crear, actualizar o restablecer un clúster. En tu estación de trabajo de administrador, actualiza la variable de entornoGCP_ACCESS_TOKEN
con un token de acceso recién obtenido:1.33 y versiones posteriores
export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
1.30-1.32
export GCP_ACCESS_TOKEN=$(gcloud auth print-access-token \ --impersonate-service-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com)
De forma predeterminada, el token de acceso tiene una duración de 3600 segundos (1 hora). Cuando usas la autenticación de clústeres de Workload Identity,
bmctl
comprueba la hora de vencimiento del token. Si el token caduca en un plazo de 1800 segundos (30 minutos),bmctl
informa de un error y se cierra.
Personalización
Puedes usar cuentas de servicio con nombres únicos para la autenticación de clústeres de Workload Identity siempre que tengan enlaces a los roles necesarios.
1.33 y versiones posteriores
De forma predeterminada, la autenticación de clústeres de Workload Identity para clústeres de la versión 1.33 y posteriores usa solo la baremetal-gcr
cuenta de servicio. Por lo tanto, esta es la única cuenta de servicio que se puede personalizar.
Asegúrate de que la cuenta de servicio que quieres usar tenga los roles identificados en la tabla de la sección Antes de empezar.
Anota el archivo de configuración del clúster para especificar el nombre personalizado de la cuenta de servicio de autenticación de clúster de identidad de carga de trabajo:
apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: my-cluster namespace: cluster-my-cluster annotations: ... baremetal.cluster.gke.io/gcr-service-account: "CUSTOM_AR_GSA" spec: type: admin profile: default anthosBareMetalVersion: 1.33.0-gke.799 ...
Sustituye CUSTOM_AR_GSA
por el nombre de correo de la cuenta de servicio que usa Google Distributed Cloud para descargar imágenes de contenedor de Artifact Registry.
1.30-1.32
Asegúrate de que las cuentas de servicio que quieras usar tengan los roles identificados en la tabla de la sección Antes de empezar.
Anota el archivo de configuración del clúster para especificar los nombres personalizados de las cuentas de servicio de autenticación de clúster de identidad de carga de trabajo:
Si especificas nombres personalizados, puedes usar cuentas de servicio disponibles. Asegúrate de que los nombres de las cuentas de servicio personalizadas que especifiques sean diferentes entre sí. No se puede usar una sola cuenta de servicio para sustituir dos o más cuentas de servicio predeterminadas.
apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: my-cluster namespace: cluster-my-cluster annotations: ... baremetal.cluster.gke.io/controller-service-account: "CUSTOM_CONTROLLER_GSA" baremetal.cluster.gke.io/cloud-ops-service-account: "CUSTOM_CLOUD_OPS_GSA" baremetal.cluster.gke.io/gcr-service-account: "CUSTOM_AR_GSA" spec: type: admin profile: default anthosBareMetalVersion: 1.30.0-gke.1930 ...
Haz los cambios siguientes:
CUSTOM_CONTROLLER_GSA
: el nombre de correo de la cuenta de servicio que usa Connect Agent para mantener una conexión entre tu clúster y Google Cloud, así como para registrar tus clústeres.CUSTOM_CLOUD_OPS_GSA
: nombre de correo de la cuenta de servicio que usa el agente de Stackdriver para exportar registros y métricas de clústeres a Cloud Logging y Cloud Monitoring.CUSTOM_AR_GSA
: el nombre de correo del servicio cuenta que usa Google Distributed Cloud para descargar imágenes de contenedor de Artifact Registry.
Limitaciones
Las siguientes funciones no se admiten cuando se usa la autenticación de clústeres de Workload Identity para Google Distributed Cloud (solo software) en bare metal:
- Usar un servidor proxy
- Controles de Servicio de VPC
- Actualizar los clústeres del modo de claves para que usen la autenticación de clústeres de Workload Identity
- Gestión del ciclo de vida de los clústeres con clientes de la API de GKE On-Prem, como la CLI de Google Cloud, Terraform o la consola Google Cloud