Usar Workload Identity Federation para GKE

Consulta cómo autenticar tus servicios de Knative Serving con federación de Workload Identity para GKE para acceder a Google Cloud APIs, como las APIs de Compute, Storage y Database, o las APIs de aprendizaje automático.

Para autenticar tus servicios de Knative Serving, debes hacer lo siguiente:

  1. Habilita Workload Identity Federation para GKE en el clúster
  2. Configurar permisos
  3. Asocia tu cuenta de servicio de Kubernetes (KSA) a una cuenta de servicio de Google (GSA).

Después de seguir estos pasos, puedes desplegar un nuevo servicio de Knative Serving que use la identidad que has creado.

Habilitar Workload Identity Federation para GKE en un clúster

Para configurar Workload Identity Federation para GKE con Knative Serving, puedes configurar Workload Identity Federation de la flota en lugar de usar un archivo JSON de cuenta de servicio. Google Cloud

Configurar permisos para habilitar todas las métricas

Para habilitar métricas, como el recuento de solicitudes o la latencia de las solicitudes en Google Cloud Observability, debes conceder permisos de escritura para Cloud Monitoring. Por ejemplo, puedes asignar el rol Escritor de métricas de Monitoring (roles/monitoring.metricWriter) a la cuenta de servicio de Google asociada a Knative Serving, ya que incluye los permisos necesarios para escribir datos de monitorización. Consulta el artículo Usar cuentas de servicio para obtener más información sobre cómo crear cuentas de servicio de Google.

Enlazar cuentas de servicio

Debes configurar una relación para que una cuenta de servicio de Kubernetes (KSA) actúe como una cuenta de servicio de Google (GSA). Cualquier carga de trabajo que se ejecute como KSA que enlaces se autenticará automáticamente como GSA al acceder a las APIs de Google Cloud . El KSA que vincules debe existir en el clúster y el espacio de nombres del servicio de Knative Serving para el que quieras usar Workload Identity Federation for GKE. La GSA puede pertenecer a un proyecto diferente del proyecto en el que se encuentra el clúster. Google Cloud Google Cloud

  1. Si no existe, crea una. De lo contrario, ve al paso siguiente. Puedes crear una GSA para usarla con Knative Serving en cualquier proyecto de tu organización y, a continuación, usarla en el proyecto en el que se ejecuten tus servicios de Knative Serving. Google Cloud Google Cloud

    Para crear una nueva GSA, ejecuta el siguiente comando:

    gcloud iam service-accounts create GSA_NAME

    Sustituye GSA_NAME por el nombre de la nueva cuenta de servicio de Google.

    Para obtener más información sobre cómo usar cuentas de servicio de Google con tus servicios de Knative Serving, consulta Usar cuentas de servicio.

  2. Asegúrate de que tu GSA tenga los roles de gestión de identidades y accesos que necesites. Puedes conceder roles adicionales con el siguiente comando:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com" \
        --role "ROLE_NAME"

    Sustituye:

    • PROJECT_ID: con el ID del proyecto en el que se encuentra tu cuenta de servicio de Google. Google Cloud
    • GSA_NAME con el nombre de tu cuenta de servicio de Google.
    • ROLE_NAME con el rol de gestión de identidades y accesos que quieras asignar a tu GSA, como roles/monitoring.metricWriter.
  3. Si no existe ninguna cuenta de servicio de Kubernetes, crea una en el mismo espacio de nombres de Kubernetes que tu servicio de Knative Serving. De lo contrario, ve al paso siguiente:

    kubectl create serviceaccount --namespace K8S_NAMESPACE KSA_NAME
  4. Vincula las cuentas de servicio de Kubernetes y de Google para crear la identidad y, a continuación, implementarla en tu clúster:

    1. Permite que la KSA suplante la identidad de la GSA creando un enlace de política de gestión de identidades y accesos (IAM) entre ambas.

      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_ID.iam.gserviceaccount.com

      Sustituye:

      • PROJECT_ID con el ID del proyecto Google Cloud del clúster en el que residen tu cuenta de servicio de Kubernetes y tus servicios de Knative Serving.
      • K8S_NAMESPACE/KSA_NAME con el espacio de nombres y el nombre de tu cuenta de servicio de Kubernetes.
      • GSA_NAME@GSA_PROJECT_ID con el nombre de tu cuenta de servicio de Google y el ID del Google Cloud proyecto. Puedes usar cualquier cuenta de servicio de Google en tu organización. Para ver tus cuentas de servicio de Google, consulta el artículo Listar cuentas de servicio.
    2. Añade la anotación iam.gke.io/gcp-service-account=GSA_NAME@GSA_PROJECT_ID a la KSA con la dirección de correo del GSA.

      kubectl annotate serviceaccount \
      --namespace K8S_NAMESPACE KSA_NAME \
       iam.gke.io/gcp-service-account=GSA_NAME@GSA_PROJECT_ID.iam.gserviceaccount.com

      Sustituye:

      • K8S_NAMESPACE/KSA_NAME con el espacio de nombres y el nombre de la cuenta de servicio de Kubernetes para la que has creado un enlace.
      • GSA_NAME@GSA_PROJECT_ID con el nombre de tu cuenta de servicio de Google y el ID del Google Cloud proyecto para el que has creado un enlace.

Desplegar un nuevo servicio para usar Workload Identity Federation for GKE

Implementa un nuevo servicio de Knative Serving que use la federación de Workload Identity para GKE que hayas creado.

Consola

  1. Ve a Knative Serving en la Google Cloud consola:

    Ir a Knative serving

  2. Haga clic en Crear servicio si va a configurar un servicio nuevo que va a implementar. Si va a configurar un servicio que ya tiene, haga clic en él y, a continuación, en Editar y desplegar nueva revisión.

  3. En Configuración avanzada, haga clic en Contenedor.

  4. Haz clic en el menú desplegable Cuenta de servicio y selecciona la cuenta de servicio que quieras.

  5. Haz clic en Siguiente para ir a la siguiente sección.

  6. En la sección Configurar la activación del servicio, selecciona la conectividad que quieras usar para invocar el servicio.

  7. Haz clic en Crear para desplegar la imagen en Knative Serving y espera a que se complete el despliegue.

Línea de comandos

  • En el caso de los servicios que ya tengas, define la cuenta de servicio de Kubernetes ejecutando el comando gcloud run services update con los siguientes parámetros:

    gcloud run services update SERVICE --service-account KSA_NAME

    Sustituye:

    • SERVICE con el nombre de tu servicio de Knative.
    • KSA_NAME con la cuenta de servicio de Kubernetes que has usado para crear la identidad de carga de trabajo.
  • En el caso de los servicios nuevos, define la cuenta de servicio de Kubernetes ejecutando el comando gcloud run deploy con el parámetro --service-account:

    gcloud run deploy --image IMAGE_URL --service-account KSA_NAME

    Sustituye:

    • IMAGE_URL con una referencia a la imagen del contenedor, por ejemplo, gcr.io/cloudrun/hello.
    • KSA_NAME con la cuenta de servicio de Kubernetes que has usado para crear la identidad de carga de trabajo.

YAML

Puedes descargar la configuración de un servicio en un archivo YAML con el comando gcloud run services describe mediante la marca --format=export. A continuación, puedes modificar ese archivo YAML e implementar los cambios con el comando gcloud run services replace. Debe asegurarse de modificar solo los atributos especificados.

  1. Descarga la configuración de tu servicio en un archivo llamado service.yaml en el espacio de trabajo local:

    gcloud run services describe SERVICE --format export > service.yaml

    Sustituye SERVICE por el nombre de tu servicio de Knative.

  2. En su archivo local, actualice el atributo serviceAccountName::

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          serviceAccountName: KSA_NAME

    Sustituir

    • SERVICE con el nombre de tu servicio de Knative.
    • KSA_NAME con la cuenta de servicio de Kubernetes que has usado para crear la identidad de carga de trabajo.
  3. Despliega la configuración en tu servicio de Knative Serving ejecutando el siguiente comando:

    gcloud run services replace service.yaml

Migrar servicios para usar Workload Identity Federation for GKE

Si has habilitado Workload Identity Federation for GKE en un clúster, debes migrar cada servicio de ese clúster para el que quieras usar Workload Identity Federation for GKE. Consulta cómo migrar servicios.

Pasos siguientes

Consulta cómo gestionar el acceso a tus servicios.