Preparati alla configurazione con l'API GKE Gateway
La configurazione descritta in questo documento è supportata per i clienti Preview, ma non è consigliata per i nuovi utenti di Cloud Service Mesh. Per maggiori informazioni consulta la panoramica di Cloud Service Mesh.
Questa guida spiega come preparare l'ambiente per l'utilizzo dell'API Gateway di Google Kubernetes Engine con Cloud Service Mesh. A livello generale, devi segui questi passaggi:
- Abilita i servizi API Google Cloud richiesti.
- Esegui il deployment di un cluster GKE.
- Configura le autorizzazioni IAM.
- Installa le definizioni di risorse personalizzate (CRD) richieste.
- Registra il cluster in un parco risorse.
- [Facoltativo] Attiva i servizi multi-cluster (Multi-Cluster Service Discovery).
- Attiva il mesh di servizi.
Se non utilizzi GKE, utilizza
API di routing dei servizi
e creerai una risorsa Mesh
.
Prima di iniziare
Assicurati che i componenti del deployment soddisfino i seguenti requisiti:
- GKE deve essere versione 1.20 o successiva.
- Sono supportati solo i piani dati con l'API xDS 3 e versioni successive.
- Versione minima Envoy di 1.20.0
- Versione minima del generatore di bootstrap gRPC 0.14.0
- I cluster GKE devono trovarsi Modalità VPC nativa (IP alias).
- I cluster Kubernetes autogestiti su Compute Engine, diversamente da GKE, non sono supportati.
- Eventuali restrizioni aggiuntive elencate per la funzionalità Gateway su GKE si applicano all'integrazione di Cloud Service Mesh con l'API GKE Gateway.
- L'account di servizio per i nodi e i pod GKE deve avere l'autorizzazione per accedere all'API Traffic Director. Per ulteriori informazioni sul le autorizzazioni necessarie, consulta Abilitazione dell'account di servizio per l'accesso all'API Traffic Director.
- Si applicano limitazioni di utilizzo delle risorse per progetto e quota del servizio di backend.
Abilita i servizi API Google Cloud richiesti
Esegui questo comando per abilitare le API richieste, se non lo sono già abilitato nel tuo progetto:
gcloud services enable --project=PROJECT_ID \ container.googleapis.com \ gkehub.googleapis.com \ multiclusteringress.googleapis.com \ trafficdirector.googleapis.com \ networkservices.googleapis.com
Se prevedi di includere più di un cluster nel tuo parco risorse, abilita l'API
multiclusterservicediscovery
:gcloud services enable --project=PROJECT_ID \ multiclusterservicediscovery.googleapis.com
esegui il deployment di un cluster GKE
Segui queste istruzioni per eseguire il deployment di un cluster GKE.
Crea un cluster GKE denominato
gke-1
inus-west1-a
zona:gcloud container clusters create gke-1 \ --zone=us-west1-a \ --enable-ip-alias \ --workload-pool=PROJECT_ID.svc.id.goog \ --scopes=https://www.googleapis.com/auth/cloud-platform \ --enable-mesh-certificates \ --release-channel=regular \ --project=PROJECT_ID
--enable-ip-alias
: questo flag crea un cluster nativo di VPC e rende instradabili gli indirizzi IP dei pod all'interno della rete VPC.--workload-pool
: questo flag consente al cluster di partecipare alla gestione nel pool di identità per i carichi di lavoro.--scopes
: questo flag specifica gli ambiti OAuth assegnati ai nodi del cluster.--release-channel
: questo flag indica il canaleregular
.--enable-mesh-certificates
: questo flag attiva la funzionalità mTLS automatica di Cloud Service Mesh se diventa potenzialmente disponibile in futuro.
Recupera le credenziali del cluster:
gcloud container clusters get-credentials gke-1 --zone=us-west1-a
Rinomina il contesto del cluster:
kubectl config rename-context gke_PROJECT_ID_us-west1-a_gke-1 gke-1
Configura le autorizzazioni IAM per il piano dati
Per questo deployment dimostrativo, concedi il ruolo client Cloud Service Mesh
roles/trafficdirector.client
a tutti gli utenti autenticati, inclusi tutti i servizi
nel cluster GKE. Questo ruolo IAM è
necessario per autorizzare i client Cloud Service Mesh nel piano dati, come
Envoy, per ricevere la configurazione da Cloud Service Mesh.
Se non vuoi concedere il ruolo client a tutti gli utenti autenticati e
limitare il ruolo agli account di servizio, vedi GKE
guida sull'identità dei carichi di lavoro
per configurare un account di servizio Kubernetes specializzato con il ruolo
roles/trafficdirector.client
per i tuoi servizi.
Concedi il ruolo
client
agli account di servizio:gcloud projects add-iam-policy-binding PROJECT_ID \ --member "group:PROJECT_ID.svc.id.goog:/allAuthenticatedUsers/" \ --role "roles/trafficdirector.client"
Installa le definizioni di risorse personalizzate richieste
Installa le definizioni di risorse personalizzate (CRD) necessarie per l'utilizzo dell'API Gateway con Cloud Service Mesh:
kubectl apply -k "github.com/kubernetes-sigs/gateway-api/config/crd/experimental?ref=v0.6.0"
kubectl kustomize "https://github.com/GoogleCloudPlatform/gke-networking-recipes.git/gateway-api/config/mesh/crd" \ | kubectl apply -f -
Verifica che i CRD richiesti siano installati automaticamente nel cluster eseguendo il seguente comando:
kubectl get crds
L'output elenca i seguenti CRD e altri non correlati all'API Gateway, tutti con date di creazione diverse:
NAME CREATED AT gatewayclasses.gateway.networking.k8s.io 2023-08-08T05:29:03Z gateways.gateway.networking.k8s.io 2023-08-08T05:29:03Z grpcroutes.gateway.networking.k8s.io 2023-08-08T05:29:03Z httproutes.gateway.networking.k8s.io 2023-08-08T05:29:03Z referencegrants.gateway.networking.k8s.io 2023-08-08T05:29:04Z tcproutes.gateway.networking.k8s.io 2023-08-08T05:29:04Z tdgrpcroutes.net.gke.io 2023-08-08T05:29:23Z tdmeshes.net.gke.io 2023-08-08T05:29:23Z tlsroutes.gateway.networking.k8s.io 2023-08-08T05:29:05Z udproutes.gateway.networking.k8s.io 2023-08-08T05:29:05Z
Le risorse personalizzate tdmeshes.net.gke.io
e tdgrpcroutes.net.gke.io
sono installate
nel passaggio precedente.
I CRD che fanno parte del gruppo di API net.gke.io
sono
specifici di GKE. Queste risorse non fanno parte dell'implementazione dell'API Gateway OSS, che si trova nel gruppo di API networking.k8s.io
.
Registra il cluster in un parco risorse
Dopo la creazione del cluster, devi registrarlo in un parco risorse. La registrazione del cluster in un parco risorse consente di abilitare le funzionalità in modo selettivo sul cluster registrato.
Registra il cluster nel parco risorse:
gcloud container hub memberships register gke-1 \ --gke-cluster us-west1-a/gke-1 \ --location global \ --project=PROJECT_ID
Verifica che il cluster sia registrato con parco risorse:
gcloud container hub memberships list --project=PROJECT_ID
L'output è simile al seguente:
NAME EXTERNAL_ID gke-1 657e835d-3b6b-4bc5-9283-99d2da8c2e1b
(Facoltativo) Abilita rilevamento servizio multi-cluster
La funzionalità Service Discovery multi-cluster ti consente di esportare i servizi locali del cluster in tutti i cluster registrati nel parco risorse. Questo passaggio è facoltativo se non prevedi di includere più di un cluster nel tuo parco risorse.
Abilita rilevamento servizi multi-cluster:
gcloud container hub multi-cluster-services enable \ --project PROJECT_ID
Concedi il ruolo Identity and Access Management (IAM) necessario per Scoperta servizio multi-cluster:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:PROJECT_ID.svc.id.goog[gke-mcs/gke-mcs-importer]" \ --role "roles/compute.networkViewer"
Verifica che Service Discovery multi-cluster sia abilitato per il cluster registrato. Potrebbero essere necessari diversi minuti prima che vengano visualizzati tutti i cluster:
gcloud container hub multi-cluster-services describe --project=PROJECT_ID
Dovresti vedere le iscrizioni per
gke-1
, simili alle seguenti:createTime: '2021-04-02T19:34:57.832055223Z' membershipStates projects/PROJECT_NUM/locations/global/memberships/gke-1: state: code: OK description: Firewall successfully updated updateTime: '2021-05-27T11:03:07.770208064Z' name: projects/PROJECT_NUM/locations/global/features/multiclusterservicediscovery resourceState: state: ACTIVE spec: {} updateTime: '2021-04-02T19:34:58.983512446Z'
Attiva il service mesh GKE di Cloud Service Mesh
In questa sezione, attivi la rete mesh di servizi.
Abilita il mesh di servizi GKE di Cloud Service Mesh su il cluster che hai registrato con il tuo parco risorse:
gcloud container hub ingress enable \ --config-membership=projects/PROJECT_ID/locations/global/memberships/gke-1 \ --project=PROJECT_ID
Verifica che la funzionalità sia attiva:
gcloud container hub ingress describe --project=PROJECT_ID
Dovresti vedere un output simile al seguente:
createTime: '2021-05-26T13:27:37.460383111Z' membershipStates: projects/PROJECT_NUM/locations/global/memberships/gke-1: state: code: OK updateTime: '2021-05-27T15:08:19.397896080Z' resourceState: state: ACTIVE spec: multiclusteringress: configMembership: projects/PROJECT_ID/locations/global/memberships/gke-1 state: state: code: OK description: Ready to use updateTime: '2021-05-26T13:27:37.899549111Z' updateTime: '2021-05-27T15:08:19.397895711Z'
Concedi i seguenti ruoli di Identity and Access Management (IAM), obbligatori per il controller API Gateway:
- roles/container.developer - Questo ruolo consente al controller di gestire le risorse Kubernetes nel cluster.
- roles/compute.networkAdmin : questo ruolo consente al controller di gestire le configurazioni del servizio mesh Cloud Service Mesh.
export PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format="value (projectNumber)") gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-multiclusteringress.iam.gserviceaccount.com" \ --role "roles/container.developer"
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-multiclusteringress.iam.gserviceaccount.com" \ --role "roles/compute.networkAdmin"
Passaggi successivi
Per configurare un deployment di esempio, leggi queste guide:
- Configurare un mesh di servizi collaterali Envoy
- Configurare un mesh di servizi gRPC proxyless
- Configura un mesh di servizi multi-cluster