Scopri come autenticare i servizi di pubblicazione Knative con la federazione delle identità per i carichi di lavoro per GKE per accedere alle API Google Cloud, come le API Compute, Storage e Database o le API di machine learning.
Per autenticare i servizi Knative serving, devi:
- Abilita Workload Identity Federation for GKE nel cluster
- Configura autorizzazioni
- Associa il tuo account di servizio Kubernetes (KSA) a un account di servizio Google (GSA)
Dopo aver seguito questi passaggi, puoi eseguire il deployment di un nuovo servizio di pubblicazione Knative che utilizza l'identità che hai creato.
Attivazione di Workload Identity Federation for GKE nel cluster
Per configurare la federazione delle identità per i carichi di lavoro per GKE con il servizio Knative, puoi configurare la federazione delle identità per i carichi di lavoro del parco risorse anziché utilizzare un file JSON dell'account di servizio Google Cloud.
Configura le autorizzazioni per attivare tutte le metriche
Per attivare le metriche, come 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 Scrittore di metriche di monitoraggio (roles/monitoring.metricWriter
) all'account di servizio Google associato al servizio Knative perché include le autorizzazioni necessarie per scrivere i dati di monitoraggio. Per ulteriori informazioni sulla creazione di account di servizio Google, consulta Utilizzare gli account di servizio.
Account di servizio vincolati
Devi configurare una relazione per un account di servizio Kubernetes (KSA) in modo che agisca come account di servizio Google (GSA). Qualsiasi carico di lavoro eseguito come KSA che hai associato si autentica automaticamente come GSA quando accede alle API Google Cloud. L'attributo KSA che leghi deve esistere all'interno del cluster e dello spazio dei nomi del servizio Knative serving per il quale vuoi utilizzare la federazione delle identità per i carichi di lavoro per GKE. La GSA può appartenere a un progetto Google Cloud diverso da quello in cui risiede il cluster.
Se non esiste un gruppo di servizi generali, creane uno. In caso contrario, vai al passaggio successivo. Puoi creare un GSA da utilizzare con il servizio Knative nel progetto Google Cloud della tua organizzazione e poi utilizzarlo nel progetto Google Cloud in cui vengono eseguiti i servizi di pubblicazione Knative.
Per creare una nuova GSA, esegui il seguente 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 degli account di servizio Google con i servizi di pubblicazione Knative, consulta Utilizzare gli account di servizio.
Assicurati che il tuo GSA disponga dei ruoli IAM di cui hai bisogno. Puoi concedere altri ruoli 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 Google Cloud in cui risiede il tuo Account Google.
- GSA_NAME con il nome del tuo account di servizio Google.
- ROLE_NAME con il ruolo IAM da assegnare al tuo
GSA, ad esempio
roles/monitoring.metricWriter
.
Se non esiste un account di servizio Kubernetes, creane uno nello stesso suo spazio dei nomi Kubernetes del servizio di pubblicazione Knative; altrimenti, vai al passaggio successivo:
kubectl create serviceaccount --namespace K8S_NAMESPACE KSA_NAME
Associa gli account di servizio Kubernetes e Google per creare l'identità e poi esegui il deployment nel tuo cluster:
Consenti al KSA di rubare l'identità del GSA creando un'associazione di criteri 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 del progetto Google Cloud per il cluster in cui si trovano l'account di servizio Kubernetes e i servizi di esecuzione Knative.
- K8S_NAMESPACE/KSA_NAME con lo spazio dei nomi e il nome del tuo account di servizio Kubernetes.
- GSA_NAME@GSA_PROJECT_ID con il nome del tuo account di servizio Google e l'ID del progetto Google Cloud. Puoi utilizzare qualsiasi account servizio Google nella tua organizzazione. Per visualizzare i tuoi account di servizio Google, consulta Account di servizio della scheda.
Aggiungi l'annotazione
iam.gke.io/gcp-service-account=GSA_NAME@GSA_PROJECT_ID
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 dell'account di servizio Kubernetes per cui hai creato una associazione.
- GSA_NAME@GSA_PROJECT_ID con il nome del tuo account di servizio Google e l'ID del progetto Google Cloud per cui hai creato una associazione.
Eseguire il deployment di un nuovo servizio per utilizzare Workload Identity Federation for GKE
Esegui il deployment di un nuovo servizio di pubblicazione Knative che utilizza la federazione delle identità per i carichi di lavoro per GKE che hai creato.
Console
Vai a Erogazione Knative nella console Google Cloud:
Fai clic su Crea servizio se stai configurando un nuovo servizio di destinazione del deployment. Se stai configurando un servizio esistente, fai clic sul servizio, poi su Modifica ed esegui il deployment di una nuova revisione.
In Impostazioni avanzate, fai clic su Contenitore.
Fai clic sul menu a discesa Account di servizio e seleziona l'account di servizio che ti interessa.
Fai clic su Avanti per passare alla sezione successiva.
Nella sezione Configura il funzionamento del trigger per questo servizio, seleziona la connettività che vuoi utilizzare per richiamare il servizio.
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 l'account di servizio Kubernetes eseguendo il comando
gcloud run services update
con i seguenti parametri:gcloud run services update SERVICE --service-account KSA_NAME
Sostituisci:
- SERVICE con il nome del servizio Knative serving.
- KSA_NAME con l'account di servizio Kubernetes utilizzato per creare l'identità per il carico di lavoro.
Per i nuovi servizi, imposta l'account di servizio Kubernetes eseguendo il comando
gcloud run deploy
con il parametro--service-account
:gcloud run deploy --image IMAGE_URL --service-account KSA_NAME
Sostituisci:
- IMAGE_URL con un riferimento all'immagine del container, ad esempio
gcr.io/cloudrun/hello
. - KSA_NAME con l'account di servizio Kubernetes utilizzato per creare l'identità per il carico di lavoro.
- IMAGE_URL con un riferimento all'immagine del container, ad esempio
YAML
Puoi scaricare la configurazione di un servizio esistente in un
file YAML con il comando gcloud run services describe
utilizzando il
--format=export
flag.
Puoi quindi modificare il file YAML e implementare queste modifiche con il comando gcloud run services replace
.
Devi assicurarti di modificare solo gli attributi specificati.
Scarica la configurazione del servizio in un file denominato
service.yaml
nello spazio di lavoro locale:gcloud run services describe SERVICE --format export > service.yaml
Sostituisci SERVICE con il nome del servizio Knative serving.
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 servizio Knative serving.
- KSA_NAME con l'account di servizio Kubernetes utilizzato per creare l'identità del carico di lavoro.
Esegui il deployment della configurazione nel servizio Knative serving eseguendo il seguente comando:
gcloud run services replace service.yaml
Migrazione dei servizi esistenti per l'utilizzo di Workload Identity Federation for GKE
Se hai attivato la federazione delle identità per i carichi di lavoro per GKE in un cluster esistente, è necessario eseguire la migrazione di ogni servizio su quel cluster per il quale vuoi utilizzare la federazione delle identità per i carichi di lavoro per GKE. Scopri come eseguire la migrazione dei servizi esistenti.
Passaggi successivi
Scopri come gestire l'accesso ai tuoi servizi.