En esta página, se explica cómo autenticar el servicio de Cloud Run for Anthos para usar las API de Google Cloud mediante la habilitación de Workload Identity.
A fin de usar las API de Google Cloud, como las API de Compute, Storage y Database, o las API de aprendizaje automático desde el clúster de GKE, debes tener permisos y autenticar tu servicio de Cloud Run for Anthos. Para ello, habilita Workload Identity y vincula una cuenta de servicio de Kubernetes con el propósito de que actúe como una cuenta de servicio de Google.
Habilita Workload Identity en tu clúster
Si deseas configurar Workload Identity con Cloud Run for Anthos, consulta las siguientes instrucciones para habilitarlo en tu clúster; de lo contrario, pasa a la siguiente sección:
Habilita Workload Identity en un clúster nuevo o Habilita Workload Identity en un clúster existente
Habilita métricas en un clúster con Workload Identity
Cuando habilitas Workload Identity, Cloud Run for Anthos no informa ciertas métricas, como el recuento de solicitudes de revisión o la latencia de las solicitudes, a Google Cloud's operations suite, pero continúa informando métricas de CPU y memoria.
A fin de habilitar todas las métricas, necesitas configurar de forma manual los permisos para escribir métricas en Cloud Monitoring. Con este propósito, otorga la función de escritor de métricas de Monitoring a la cuenta de servicio de Google (GSA) asociada con el servicio de Cloud Run for Anthos.
Otorga los permisos de la función de escritor de métricas de Monitoring a la GSA de tu servicio:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:GSA_NAME@GSA_PROJECT.iam.gserviceaccount.com \ --role=roles/monitoring.metricWriter
Reemplaza lo siguiente:
- PROJECT_ID por el ID del proyecto de clúster que aloja tu KSA.
- GSA_PROJECT por el ID del proyecto de una GSA que no está en el clúster. Puedes usar cualquier GSA de tu organización.
Para obtener más información, consulta Otorga, cambia y revoca el acceso a los recursos.
Vincula cuentas de servicio
Debes configurar una relación para una cuenta de servicio de Kubernetes (KSA) a fin de que actúe como una cuenta de servicio de Google (GSA). Cualquier carga de trabajo que se ejecute como KSA se autenticará de forma automática como la GSA cuando se acceda a las API de Google Cloud.
Si no existe una cuenta de servicio de Kubernetes (KSA), crea una en el mismo espacio de nombres de Kubernetes que tu servicio de Cloud Run for Anthos. De lo contrario, continúa con el siguiente paso:
kubectl create serviceaccount --namespace K8S_NAMESPACE KSA_NAME
Crea una relación entre KSA y GSA, de modo que la carga de trabajo que se ejecuta como KSA se autentique de forma automática como GSA cuando se acceda a las API de Google Cloud:
Autoriza a tu KSA para que actúe como GSA:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:PROJECT_ID.svc.id.goog[K8S_NAMESPACE/KSA_NAME]" \ GSA_NAME@GSA_PROJECT.iam.gserviceaccount.com
Actualiza el clúster para aprovechar la vinculación:
kubectl annotate serviceaccount \ --namespace K8S_NAMESPACE \ KSA_NAME \ iam.gke.io/gcp-service-account=GSA_NAME@GSA_PROJECT.iam.gserviceaccount.com
Implementa un servicio nuevo con una identidad nueva
Implementa tu servicio mediante la KSA que existe en el clúster y el espacio de nombres del servicio que deseas implementar. La cuenta de servicio puede pertenecer a un proyecto diferente al del clúster.
Console
Ve a Cloud Run for Anthos en la consola de Google Cloud:
Haz clic en Crear servicio si quieres configurar un servicio nuevo en el que realizarás la implementación. Si quieres configurar un servicio existente, haz clic en el servicio y, luego, haz clic en IMPLEMENTAR Y EDITAR UNA NUEVA REVISIÓN.
En Configuración avanzada, haz clic en Contenedor.
Haz clic en el menú desplegable Service account (Cuenta de servicio) y selecciona la cuenta de servicio que deseas.
Haz clic en Siguiente para pasar a la siguiente sección.
En la sección Configura la forma en que se activa el servicio, selecciona la conectividad que deseas usar para invocar el servicio.
Haz clic en Crear para implementar la imagen en Cloud Run for Anthos y espera a que termine la implementación.
Línea de comandos
Para servicios existentes, configura la cuenta de servicio del entorno de ejecución mediante la ejecución del comando
gcloud run services update
con los siguientes parámetros:gcloud run services update SERVICE --service-account SERVICE_ACCOUNT
Reemplaza lo siguiente:
- SERVICE por el nombre de tu servicio
- SERVICE_ACCOUNT por la cuenta de servicio asociada con la identidad nueva
Para los servicios nuevos, configura la cuenta de servicio del entorno de ejecución mediante el comando
gcloud run deploy
con el parámetro--service-account
:gcloud run deploy --image IMAGE_URL --service-account SERVICE_ACCOUNT
Reemplaza lo siguiente:
- IMAGE_URL por una referencia a la imagen del contenedor, como
gcr.io/myproject/my-image:latest
- SERVICE_ACCOUNT por la cuenta de servicio asociada con la identidad nueva
- IMAGE_URL por una referencia a la imagen del contenedor, como
YAML
Puedes descargar la configuración de un servicio existente en un archivo YAML con el comando gcloud run services describe
mediante la marca --format=export
.
Luego, puedes modificar ese archivo YAML e implementar esos cambios con el comando gcloud beta run services replace
.
Debes asegurarte de modificar solo los atributos especificados.
Descarga la configuración del servicio en un archivo llamado
service.yaml
en el lugar de trabajo local:gcloud run services describe SERVICE --format export > service.yaml
Reemplaza SERVICE por el nombre de tu servicio de Cloud Run for Anthos.
En tu archivo local, actualiza el atributo
serviceAccountName:
:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: spec: serviceAccountName: SERVICE_ACCOUNT
Reemplazar
- SERVICE por el nombre de tu servicio de Cloud Run for Anthos
- SERVICE_ACCOUNT por la cuenta de servicio asociada con la identidad nueva
Reemplaza el servicio por la configuración nueva mediante el siguiente comando:
gcloud beta run services replace service.yaml