Scopri come autenticare i servizi Knative con la federazione delle identità per i carichi di lavoro per GKE per accedere alle APIGoogle Cloud , come le API Compute, Storage e Database o le API Machine Learning.
Per autenticare i servizi Knative serving, devi:
- Abilita la federazione delle identità per i carichi di lavoro per GKE nel cluster
- Configura autorizzazioni
- Associa il tuo service account Kubernetes (KSA) a un service account Google (GSA)
Dopo aver seguito questi passaggi, puoi eseguire il deployment di un nuovo servizio Knative che utilizza l'identità che hai creato.
Abilitazione di Workload Identity Federation for GKE sul cluster
Per configurare la federazione delle identità per i carichi di lavoro per GKE con Knative Serving, puoi configurare la federazione delle identità per i carichi di lavoro del parco progetti anziché utilizzare un file JSON dell'account di servizio. Google Cloud
Configurare le autorizzazioni per attivare tutte le metriche
Per attivare 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 Writer metriche di monitoraggio (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 dei service account Google, consulta Utilizzare i service account.
Service account di binding
Devi configurare una relazione per consentire a un service account Kubernetes (KSA) di agire comeaccount di serviziot Google (GSA). Qualsiasi workload in esecuzione come service account Kubernetes che associ si autentica automaticamente come service account Google quando accede alle API Google Cloud . Il KSA che associ deve esistere all'interno del cluster e dello spazio dei nomi del servizio Knative serving per cui vuoi utilizzare Workload Identity Federation for GKE. Il GSA può appartenere a un progetto Google Cloud diverso dal progettoGoogle Cloud in cui si trova il cluster.
Se non esiste un GSA, creane uno. In caso contrario, vai al passaggio successivo. Puoi creare un account di servizio Google da utilizzare con Knative Serving in qualsiasi progetto Google Cloud della tua organizzazione e poi utilizzarlo dal progettoGoogle Cloud in cui vengono eseguiti i tuoi 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, consulta Utilizzare i service account.
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 Google Cloud in cui si trova il tuo account di servizio Google.
- 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
.
Se non esiste un service account Kubernetes, creane uno nello stesso spazio dei nomi Kubernetes del servizio Knative Serving; altrimenti, vai al passaggio successivo:
kubectl create serviceaccount --namespace K8S_NAMESPACE KSA_NAME
Associa i service account Kubernetes e Google per creare l'identità e poi eseguirne il deployment nel cluster:
Consenti all'account di servizio Kubernetes di rappresentare l'account di servizio Google creando un binding dei 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 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 account di servizio Google e l'ID del progetto Google Cloud . Puoi utilizzare qualsiasi account di servizio Google nella tua organizzazione. Per visualizzare i tuoi service account Google, consulta Creazione dell'elenco dei service account.
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 del service account Kubernetes per cui hai creato un binding.
- GSA_NAME@GSA_PROJECT_ID con il nome del tuo account di servizio Google e l'ID del progetto Google Cloud per il quale hai creato un binding.
Deployment di un nuovo servizio per utilizzare la federazione delle identità per i carichi di lavoro per GKE
Esegui il deployment di un nuovo servizio Knative che utilizza la federazione delle identità per i carichi di lavoro per GKE che hai creato.
Console
Vai a Knative Serving nella console Google Cloud :
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.
In Impostazioni avanzate, fai clic su Contenitore.
Fai clic sul menu a discesa Service account e seleziona il service account che preferisci.
Fai clic su Avanti per continuare con la 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 il service account 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 il service account Kubernetes che hai utilizzato per creare l'identità del 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 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.
- IMAGE_URL con un riferimento all'immagine 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 flag --format=export
.
Puoi quindi modificare il file YAML e implementare
le 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 tuo servizio Knative.
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 il service account Kubernetes che hai 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 utilizzare la federazione delle identità per i carichi di lavoro per GKE
Se hai abilitato Workload Identity Federation for GKE su un cluster esistente, devi eseguire la migrazione di ogni servizio su quel cluster per cui 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.