Aprende a autenticar tus servicios de Knative serving con la federación de Workload Identity para GKE para acceder a las APIs deGoogle Cloud , como las APIs de Compute, Storage y Database, o las APIs de aprendizaje automático.
Para autenticar tus servicios de entrega de Knative, debes hacer lo siguiente:
- Habilita Workload Identity Federation for GKE en tu clúster
- Crea una cuenta de servicio de Kubernetes y otórgale los roles de IAM necesarios.
Después de seguir estos pasos, puedes implementar un nuevo servicio de Knative serving que use la identidad que creaste.
Habilita Workload Identity Federation for GKE en tu clúster
Para configurar Workload Identity Federation for GKE con la publicación de Knative, puedes configurar la federación de identidades para cargas de trabajo de la flota en lugar de usar un archivo JSON de la cuenta de servicio Google Cloud .
Configura los permisos para habilitar todas las métricas
Para habilitar las métricas, como el recuento de solicitudes de informes o la latencia de las solicitudes a Google Cloud Observability, debes otorgar permisos de escritura para Cloud Monitoring. Por ejemplo, puedes otorgar el rol de escritor de métricas de Monitoring (roles/monitoring.metricWriter) a la cuenta de servicio de Kubernetes asociada con Knative serving, ya que incluye los permisos necesarios para escribir datos de supervisión.
Cómo otorgar roles de IAM a una ServiceAccount de Kubernetes
Cualquier servicio de Knative serving que se ejecute como la cuenta de servicio de Kubernetes que configures se autenticará automáticamente con su identidad federada cuando acceda a las Google Cloud APIs. La cuenta de servicio de Kubernetes debe existir dentro del clúster y el espacio de nombres del servicio de Knative serving para el que deseas usar Workload Identity Federation for GKE.
Si no existe una cuenta de servicio de Kubernetes, crea una en el mismo espacio de nombres de Kubernetes que tu servicio de entrega de Knative. De lo contrario, continúa con el siguiente paso:
kubectl create serviceaccount --namespace K8S_NAMESPACE KUBERNETES_SERVICEACCOUNT
Otorga los roles de IAM necesarios directamente a tu cuenta de servicio de Kubernetes:
gcloud projects add-iam-policy-binding RESOURCE_PROJECT_ID \ --member "principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/K8S_NAMESPACE/sa/KUBERNETES_SERVICEACCOUNT" \ --role "ROLE_NAME" \ --condition=None
Reemplaza lo siguiente:
- RESOURCE_PROJECT_ID por el ID del proyecto Google Cloud en el que residen los recursos Google Cloud de destino.
- PROJECT_NUMBER por el número del proyectoGoogle Cloud para el clúster en el que residen tu cuenta de servicio de Kubernetes y los servicios de Knative serving.
- PROJECT_ID por el ID del proyecto Google Cloud para el clúster en el que residen tu cuenta de servicio de Kubernetes y los servicios de Knative serving.
- K8S_NAMESPACE y KUBERNETES_SERVICEACCOUNT por el espacio de nombres y el nombre de tu cuenta de servicio de Kubernetes
- ROLE_NAME con el rol de IAM que se asignará a tu cuenta de servicio de Kubernetes, como
roles/monitoring.metricWriter.
Implementa un servicio nuevo para usar Workload Identity Federation for GKE
Implementa un nuevo servicio de Knative serving que use Workload Identity Federation for GKE que creaste.
Console
Ve a Knative serving 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 Knative serving y espera a que termine la implementación.
Línea de comandos
Para servicios existentes, configura la cuenta de servicio de Kubernetes mediante la ejecución del comando
gcloud run services updatecon los siguientes parámetros:gcloud run services update SERVICE --service-account KUBERNETES_SERVICEACCOUNT
Reemplaza lo siguiente:
- SERVICE por el nombre de tu servicio de Knative serving.
- KUBERNETES_SERVICEACCOUNT por la cuenta de servicio de Kubernetes que usaste para crear Workload Identity.
Para servicios nuevos, configura la cuenta de servicio de Kubernetes mediante la ejecución del comando
gcloud run deploycon el parámetro--service-account:gcloud run deploy --image IMAGE_URL --service-account KUBERNETES_SERVICEACCOUNT
Reemplaza lo siguiente:
- IMAGE_URL por una referencia a la imagen del contenedor, como
gcr.io/cloudrun/hello - KUBERNETES_SERVICEACCOUNT por la cuenta de servicio de Kubernetes que usaste para crear Workload Identity.
- 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 run services replace.
Debes asegurarte de modificar solo los atributos especificados.
Descarga la configuración del servicio en un archivo llamado
service.yamlen el lugar de trabajo local:gcloud run services describe SERVICE --format export > service.yaml
Reemplaza SERVICE por el nombre de tu servicio de Knative serving.
En tu archivo local, actualiza el atributo
serviceAccountName::apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: spec: serviceAccountName: KUBERNETES_SERVICEACCOUNT
Reemplazar
- SERVICE por el nombre de tu servicio de Knative serving.
- KUBERNETES_SERVICEACCOUNT por la cuenta de servicio de Kubernetes que usaste para crear Workload Identity.
Para implementar la configuración en tu servicio de Knative serving, ejecuta el siguiente comando:
gcloud run services replace service.yaml
Migra servicios existentes para usar Workload Identity Federation for GKE
Si habilitaste Workload Identity Federation for GKE en un clúster existente, se debe migrar cada servicio en ese clúster para el que desees usar Workload Identity Federation for GKE. Obtén más información para migrar servicios existentes.
Próximos pasos
Obtén más información sobre cómo administrar el acceso a tus servicios.