Creare un cluster multi-tenant utilizzando Terraform
Un cluster multi-tenant in Google Kubernetes Engine è un cluster Kubernetes condiviso da più team o utenti distinti, noti come tenant. In genere, ogni tenant ha il proprio insieme di risorse e applicazioni all'interno del cluster.
Questo tutorial di Terraform ti consente di creare rapidamente un cluster GKE condiviso da due team, backend e frontend, che possono eseguire il deployment di workload specifici del team sul cluster. Questo tutorial presuppone che tu abbia già familiarità con Terraform. In caso contrario, puoi utilizzare le seguenti risorse per acquisire familiarità con le nozioni di base di Terraform:
Prima di iniziare
Per abilitare l'API Kubernetes Engine, segui questi passaggi:
- Accedi al tuo Google Cloud account. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei workload.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the GKE, GKE GKE Fleet, Cloud SQL, Resource Manager, IAM, Connect gateway APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the GKE, GKE GKE Fleet, Cloud SQL, Resource Manager, IAM, Connect gateway APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Assicurati di disporre dei seguenti ruoli per il progetto: roles/owner, roles/iam.serviceAccountTokenCreator
Controlla i ruoli
-
Nella Google Cloud console vai alla pagina IAM.
Vai a IAM - Seleziona il progetto.
-
Nella colonna Entità, trova tutte le righe che identificano te o un gruppo di cui fai parte. Per scoprire i gruppi di cui fai parte, contatta l' amministratore.
- Per tutte le righe che ti specificano o ti includono, controlla la colonna Ruolo per verificare se l'elenco dei ruoli include i ruoli richiesti.
Concedi i ruoli
-
Nella Google Cloud console vai alla pagina IAM.
Vai a IAM - Seleziona il progetto.
- Fai clic su Concedi l'accesso.
-
Nel campo Nuove entità, inserisci il tuo identificatore dell'utente. In genere si tratta dell'indirizzo email di un Account Google.
- Fai clic su Seleziona un ruolo, quindi cerca il ruolo.
- Per concedere altri ruoli, fai clic su Aggiungi un altro ruolo e aggiungi ogni ruolo aggiuntivo.
- Fai clic su Salva.
-
Prepara l'ambiente
In questo tutorial utilizzerai Cloud Shell per gestire le risorse ospitate su
Google Cloud. Cloud Shell è preinstallato con il
software necessario per questo tutorial, tra cui Terraform,
kubectl, e il
il Google Cloud CLI.
Avvia una sessione di Cloud Shell dalla Google Cloud console facendo clic sull'icona di attivazione di Cloud Shell Attiva Cloud Shell
. Viene avviata una sessione nel riquadro inferiore della Google Cloud console.Le credenziali del servizio associate a questa macchina virtuale sono automatiche, quindi non devi configurare o scaricare una chiave del account di servizio.
Prima di eseguire i comandi, imposta il progetto predefinito in gcloud CLI utilizzando il comando seguente:
gcloud config set project PROJECT_IDSostituisci
PROJECT_IDcon l' ID progetto.Clona il repository GitHub:
git clone https://github.com/terraform-google-modules/terraform-docs-samples.git --single-branchPassa alla directory di lavoro:
cd terraform-docs-samples/gke/quickstart/multitenant
Esamina i file Terraform
Il Google Cloud provider è un plug-in che consente di gestire ed eseguire il provisioning delle Google Cloud risorse utilizzando Terraform. Funge da ponte tra le configurazioni Terraform e le Google Cloud API, consentendoti di definire in modo dichiarativo le risorse dell'infrastruttura, come macchine virtuali e reti.
Esamina il file
main.tf, che descrive una risorsa del cluster GKE:cat main.tfL'output è simile al seguente:
Crea un cluster e un database SQL
In Cloud Shell, esegui questo comando per verificare che Terraform sia disponibile:
terraformL'output dovrebbe essere simile al seguente:
Usage: terraform [global options] <subcommand> [args] The available commands for execution are listed below. The primary workflow commands are given first, followed by less common or more advanced commands. Main commands: init Prepare your working directory for other commands validate Check whether the configuration is valid plan Show changes required by the current configuration apply Create or update infrastructure destroy Destroy previously-created infrastructureInizializza Terraform:
terraform init(Facoltativo) Pianifica la configurazione Terraform:
terraform planApplica la configurazione Terraform
terraform applyQuando richiesto, inserisci
yesper confermare le azioni. Il completamento di questo comando potrebbe richiedere diversi minuti. L'output è simile al seguente:Apply complete! Resources: 23 added, 0 changed, 0 destroyed.
Esegui il deployment dell'applicazione del team di backend
Esamina il seguente file Terraform:
cat backend.yamlL'output dovrebbe essere simile al seguente:
Questo file descrive le seguenti risorse:
- Un deployment con un'applicazione di esempio.
- Un servizio di tipo LoadBalancer.
Il servizio espone il deployment sulla porta 80. Per esporre l'applicazione a internet, configura un bilanciatore del carico esterno rimuovendo l'annotazione
networking.gke.io/load-balancer-type.
In Cloud Shell, esegui questo comando per rappresentare il account di servizio del team di backend:
gcloud config set auth/impersonate_service_account backend@PROJECT_ID.iam.gserviceaccount.comSostituisci
PROJECT_IDcon l' ID progetto.Recupera le credenziali del cluster:
gcloud container fleet memberships get-credentials gke-enterprise-cluster --location us-central1Applica il manifest del team di backend al cluster:
kubectl apply -f backend.yaml
Verifica che l'applicazione di backend funzioni
Per verificare che il cluster sia in esecuzione correttamente:
Vai alla pagina Carichi di lavoro nella Google Cloud console:
Fai clic sul workload
backend. Viene visualizzata la pagina dei dettagli del pod. Questa pagina mostra informazioni sul pod, come annotazioni, container in esecuzione sul pod, servizi che espongono il pod e metriche tra cui utilizzo di CPU, memoria e disco.Fai clic sul servizio LoadBalancer
backend. Viene visualizzata la pagina dei dettagli del servizio. Questa pagina mostra informazioni sul servizio, come i pod associati al servizio e le porte utilizzate dai servizi.Nella sezione Endpoint, fai clic sul link IPv4 per visualizzare il servizio nel browser. L'output è simile al seguente:
Backend! Hostname: backendweb-765f6c4fc9-cl7jx Set Color: greenOgni volta che un utente accede all'endpoint di backend, il servizio seleziona e memorizza in modo casuale un colore tra rosso, verde o blu nel database condiviso.
Esegui il deployment di un'applicazione del team di frontend
Esamina il seguente file Terraform:
cat frontend.yamlL'output dovrebbe essere simile al seguente:
Questo file descrive le seguenti risorse:
- Un deployment con un'applicazione di esempio.
- Un servizio di tipo LoadBalancer.
Il servizio espone il deployment sulla porta 80. Per esporre l'applicazione a internet, configura un bilanciatore del carico esterno rimuovendo l'annotazione
networking.gke.io/load-balancer-type.
In Cloud Shell, esegui questo comando per rappresentare il account di servizio del team di frontend:
gcloud config set auth/impersonate_service_account frontend@PROJECT_ID.iam.gserviceaccount.comSostituisci
PROJECT_IDcon l' ID progetto.Recupera le credenziali del cluster:
gcloud container fleet memberships get-credentials gke-enterprise-cluster --location us-central1Applica il manifest del team di frontend al cluster:
kubectl apply -f frontend.yaml
Verifica che l'applicazione di frontend funzioni
Per verificare che il cluster sia in esecuzione correttamente:
Vai alla pagina Carichi di lavoro nella Google Cloud console:
Fai clic sul workload
frontend. Viene visualizzata la pagina dei dettagli del pod. Questa pagina mostra informazioni sul pod, come annotazioni, container in esecuzione sul pod, servizi che espongono il pod e metriche tra cui utilizzo di CPU, memoria e disco.Fai clic sul servizio LoadBalancer
frontend. Viene visualizzata la pagina dei dettagli del servizio. Questa pagina mostra informazioni sul servizio, come i pod associati al servizio e le porte utilizzate dai servizi.Nella sezione Endpoint, fai clic sul link IPv4 per visualizzare il servizio nel browser. L'output è simile al seguente:
Frontend! Hostname: frontendweb-5cd888d88f-gwwtc Got Color: green
Libera spazio
Per evitare che al tuo Google Cloud account vengano addebitati costi relativi alle risorse utilizzate in questa pagina, segui questi passaggi.
In Cloud Shell, esegui questo comando per annullare la simulazione dell'identità dei account di servizio:
gcloud config unset auth/impersonate_service_accountEsegui questo comando per eliminare le risorse Terraform:
terraform destroy --auto-approve