Utilizzo di Workload Identity Federation for GKE

Scopri come autenticare i servizi Knative serving con Workload Identity Federation for GKE per accedere alle Google Cloud API, ad esempio le API Compute, le API Storage e Database o le API Machine Learning.

Per autenticare i servizi Knative serving, devi:

  1. Abilitare Workload Identity Federation for GKE nel cluster
  2. Configurare le autorizzazioni
  3. Associare il service account Kubernetes (KSA) a un service account Google (GSA)

Dopo aver completato questi passaggi, puoi eseguire il deployment di un nuovo servizio Knative serving che utilizza l'identità che hai creato.

Abilitare Workload Identity Federation for GKE sul cluster

Per configurare Workload Identity Federation for GKE con Knative serving, puoi configurare la federazione delle identità per i workload per il parco risorse anziché utilizzare un Google Cloud file JSON del service account.

Configurare le autorizzazioni per abilitare tutte le metriche

Per abilitare le metriche, ad esempio il conteggio delle richieste di report o la latenza delle richieste in Google Cloud Observability, devi concedere le autorizzazioni di scrittura per Cloud Monitoring. Ad esempio, puoi concedere il ruolo Monitoring Metric Writer (roles/monitoring.metricWriter) al service account Google associato a Knative serving perché include le autorizzazioni necessarie per scrivere i dati di monitoraggio. Per ulteriori informazioni sulla creazione di service account Google, consulta Utilizzare i service account.

Associare i service account

Devi configurare una relazione per un service account Kubernetes (KSA) in modo che funga da account di servizio Google (GSA). Qualsiasi carico di lavoro in esecuzione come KSA associato viene autenticato automaticamente come GSA quando accede alle Google Cloud API. Il KSA che associ deve esistere nel cluster e nello spazio dei nomi del servizio Knative serving per il quale vuoi utilizzare Workload Identity Federation for GKE. Il GSA può appartenere a un progetto diverso da quello in cui risiede il cluster. Google Cloud Google Cloud

  1. Se non esiste un GSA, creane uno. In caso contrario, vai al passaggio successivo. Puoi creare un GSA da utilizzare con Knative serving in qualsiasi Google Cloud progetto della tua organizzazione e poi utilizzarlo nel Google Cloud progetto in cui vengono eseguiti i servizi Knative serving.

    Per creare un nuovo GSA, esegui questo comando:

    gcloud iam service-accounts create GSA_NAME

    Sostituisci GSA_NAME con il nome del nuovo account di servizio Google.

    Per ulteriori informazioni sull'utilizzo dei service account Google con i servizi Knative serving, consulta Utilizzare i service account.

  2. Assicurati che il tuo GSA disponga dei ruoli IAM di cui hai bisogno. Puoi concedere ruoli aggiuntivi utilizzando il seguente comando:

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

    Sostituisci:

    • PROJECT_ID: con l'ID progetto in cui risiede il tuo service account Google. Google Cloud
    • GSA_NAME con il nome del tuo service account Google.
    • ROLE_NAME con il ruolo IAM da assegnare al tuo GSA, ad esempio roles/monitoring.metricWriter.
  3. Se non esiste un service account Kubernetes, creane uno nello stesso spazio dei nomi Kubernetes del servizio Knative serving. In caso contrario, vai al passaggio successivo:

    kubectl create serviceaccount --namespace K8S_NAMESPACE KSA_NAME
  4. Associa i service account Kubernetes e Google per creare l'identità e poi eseguirne il deployment nel cluster:

    1. Consenti al KSA di rappresentare il GSA creando un' associazione di policy IAM tra i due.

      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

      Sostituisci:

      • PROJECT_ID con l'ID Google Cloud progetto del cluster in cui risiedono il service account Kubernetes e i servizi Knative serving.
      • K8S_NAMESPACE/KSA_NAME con lo spazio dei nomi e il nome del tuo service account Kubernetes.
      • GSA_NAME@GSA_PROJECT_ID con il nome del tuo service account Google e l'ID del Google Cloud progetto. Puoi utilizzare qualsiasi service account Google nella tua organizzazione. Per visualizzare i tuoi service account Google, consulta Creazione dell'elenco dei service account.
    2. Aggiungi l' iam.gke.io/gcp-service-account=GSA_NAME@GSA_PROJECT_ID annotazione al KSA utilizzando l'indirizzo email del GSA.

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

      Sostituisci:

      • K8S_NAMESPACE/KSA_NAME con lo spazio dei nomi e il nome del service account Kubernetes per il quale hai creato un'associazione.
      • GSA_NAME@GSA_PROJECT_ID con il nome del tuo service account Google e l'ID del Google Cloud progetto per il quale hai creato un'associazione.

Eseguire il deployment di un nuovo servizio per utilizzare Workload Identity Federation for GKE

Esegui il deployment di un nuovo servizio Knative serving che utilizza Workload Identity Federation for GKE che hai creato.

Console

  1. Vai a Knative serving nella Google Cloud console:

    Vai a Knative serving

  2. Fai clic su Crea servizio se stai configurando un nuovo servizio di cui stai eseguendo il deployment. Se stai configurando un servizio esistente, fai clic sul servizio, quindi su Modifica ed esegui il deployment di una nuova revisione.

  3. In Impostazioni avanzate, fai clic su Container.

  4. Fai clic sul menu a discesa Service account e seleziona il service account che preferisci.

  5. Fai clic su Avanti per continuare alla sezione successiva.

  6. Nella sezione Configura il funzionamento del trigger per questo servizio , seleziona la connettività che vuoi utilizzare per richiamare il servizio.

  7. Fai clic su Crea per eseguire il deployment dell'immagine in Knative serving e attendi il completamento del deployment.

Riga di comando

  • Per i servizi esistenti, imposta il service account Kubernetes eseguendo il gcloud run services update comando con i seguenti parametri:

    gcloud run services update SERVICE --service-account KSA_NAME

    Sostituisci:

    • SERVICE con il nome del tuo servizio Knative serving.
    • KSA_NAME con il service account Kubernetes che hai utilizzato per creare l'identità del carico di lavoro.
  • Per i nuovi servizi, imposta il service account Kubernetes eseguendo il gcloud run deploy comando con il --service-account parametro:

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

    Sostituisci:

    • IMAGE_URL con un riferimento all'immagine container, ad esempio, gcr.io/cloudrun/hello.
    • KSA_NAME con il service account Kubernetes che hai utilizzato per creare l'identità del carico di lavoro.

YAML

Puoi scaricare la configurazione di un servizio esistente in un file YAML con il gcloud run services describe comando utilizzando il --format=export flag. Puoi quindi modificare il file YAML ed eseguire il deployment delle modifiche con il comando gcloud run services replace. Devi assicurarti di modificare solo gli attributi specificati.

  1. Scarica la configurazione del servizio in un file denominato service.yaml nell'area di lavoro locale:

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

    Sostituisci SERVICE con il nome del tuo servizio Knative serving.

  2. Nel file locale, aggiorna l'attributo serviceAccountName::

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

    Sostituisci

    • SERVICE con il nome del tuo servizio Knative serving.
    • KSA_NAME con il service account Kubernetes che hai utilizzato per creare l'identità del carico di lavoro.
  3. Esegui il deployment della configurazione nel servizio Knative serving eseguendo questo comando:

    gcloud run services replace service.yaml

Eseguire la migrazione dei servizi esistenti per utilizzare Workload Identity Federation for GKE

Se hai abilitato Workload Identity Federation for GKE su un cluster esistente, devi eseguire la migrazione di ogni servizio del cluster per il quale vuoi utilizzare Workload Identity Federation for GKE. Scopri come eseguire la migrazione dei servizi esistenti.

Passaggi successivi

Scopri come gestire l'accesso ai tuoi servizi.