Creare un cluster multi-tenant utilizzando Terraform
Un cluster multi-tenant nella versione Enterprise di Google Kubernetes Engine (GKE) è 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 su Terraform ti consente di creare rapidamente un cluster GKE Enterprise condiviso da due team, backend
e frontend
, che può eseguire il deployment di carichi di lavoro specifici per il team nel cluster. Questo tutorial presuppone che tu abbia già familiarità con Terraform. In caso contrario, puoi utilizzare le seguenti risorse per familiarizzare con le nozioni di base di Terraform:
Prima di iniziare
Per abilitare l'API Kubernetes Engine, segui questi passaggi:
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the GKE, GKE Hub, Cloud SQL, Resource Manager, IAM, Connect gateway APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the GKE, GKE Hub, Cloud SQL, Resource Manager, IAM, Connect gateway APIs.
-
Make sure that you have the following role or roles on the project: roles/owner, roles/iam.serviceAccountTokenCreator
Check for the roles
-
In the Google Cloud console, go to the IAM page.
Go to IAM - Select the project.
-
In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.
- For all rows that specify or include you, check the Role colunn to see whether the list of roles includes the required roles.
Grant the roles
-
In the Google Cloud console, go to the IAM page.
Vai a IAM - Seleziona il progetto.
- Fai clic su Concedi accesso.
-
Nel campo Nuove entità, inserisci il tuo identificatore utente. In genere si tratta dell'indirizzo email di un Account Google.
- Nell'elenco Seleziona un ruolo, seleziona un 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. In Cloud Shell è preinstallato il
software necessario per questo tutorial, tra cui Terraform,
kubectl
e
Google Cloud CLI.
Avvia una sessione di Cloud Shell dalla console Google Cloud facendo clic sull'icona di attivazione di Cloud Shell Attiva Cloud Shell . Viene avviata una sessione nel riquadro inferiore della console Google Cloud.
Le credenziali di servizio associate a questa macchina virtuale sono automatiche, pertanto non devi configurare o scaricare una chiave dell'account di servizio.
Prima di eseguire i comandi, imposta il progetto predefinito in gcloud CLI utilizzando il seguente comando:
gcloud config set project PROJECT_ID
Sostituisci
PROJECT_ID
con il tuo ID progetto.Clona il repository GitHub:
git clone https://github.com/terraform-google-modules/terraform-docs-samples.git --single-branch
Passa alla directory di lavoro:
cd terraform-docs-samples/gke/quickstart/multitenant
Esamina i file Terraform
Il provider Google Cloud è un plug-in che ti consente di gestire e eseguire il provisioning delle risorse Google Cloud utilizzando Terraform. Funge da ponte tra le configurazioni di Terraform e le API Google Cloud, consentendoti di definire in modo dichiarativo le risorse di infrastruttura, come reti e macchine virtuali.
Esamina il file
main.tf
, che descrive una risorsa del cluster GKE Enterprise:cat main.tf
L'output è simile al seguente:
Crea un cluster e un database SQL
In Cloud Shell, esegui questo comando per verificare che Terraform sia disponibile:
terraform
L'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 infrastructure
Inizializza Terraform:
terraform init
(Facoltativo) Pianifica la configurazione di Terraform:
terraform plan
Applica la configurazione Terraform
terraform apply
Quando richiesto, inserisci
yes
per 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 di gruppo di backend
Esamina il seguente file Terraform:
cat backend.yaml
L'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 su internet, configura un bilanciatore del carico esterno rimuovendo l'annotazione
networking.gke.io/load-balancer-type
.
In Cloud Shell, esegui il seguente comando per rubare l'identità del account di servizio del team di backend:
gcloud config set auth/impersonate_service_account backend@PROJECT_ID.iam.gserviceaccount.com
Sostituisci
PROJECT_ID
con il tuo ID progetto.Recupera le credenziali del cluster:
gcloud container fleet memberships get-credentials gke-enterprise-cluster --location us-central1
Applica il manifest del team di backend al cluster:
kubectl apply -f backend.yaml
Verificare il funzionamento dell'applicazione di backend
Per verificare che il cluster funzioni correttamente:
Vai alla pagina Carichi di lavoro nella console Google Cloud:
Fai clic sul carico di lavoro
backend
. Viene visualizzata la pagina Dettagli pod. Questa pagina mostra informazioni sul pod, ad esempio annotazioni, container in esecuzione sul pod, servizi che espongono il pod e metriche tra cui l'utilizzo di CPU, memoria e disco.Fai clic sul servizio
backend
LoadBalancer. Viene visualizzata la pagina Dettagli servizio. Questa pagina mostra informazioni sul servizio, ad esempio 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: green
Ogni volta che un utente accede all'endpoint di backend, il Servizio sceglie e memorizza in modo casuale un colore tra rosso, verde o blu nel database condiviso.
Esegui il deployment di un'applicazione di team frontend
Esamina il seguente file Terraform:
cat frontend.yaml
L'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 su internet, configura un bilanciatore del carico esterno rimuovendo l'annotazione
networking.gke.io/load-balancer-type
.
In Cloud Shell, esegui il seguente comando per rubare l'identità dell'account di servizio del team frontend:
gcloud config set auth/impersonate_service_account frontend@PROJECT_ID.iam.gserviceaccount.com
Sostituisci
PROJECT_ID
con il tuo ID progetto.Recupera le credenziali del cluster:
gcloud container fleet memberships get-credentials gke-enterprise-cluster --location us-central1
Applica il manifest del team frontend al cluster:
kubectl apply -f frontend.yaml
Verificare che l'applicazione frontend funzioni
Per verificare che il cluster funzioni correttamente:
Vai alla pagina Carichi di lavoro nella console Google Cloud:
Fai clic sul carico di lavoro
frontend
. Viene visualizzata la pagina Dettagli pod. Questa pagina mostra informazioni sul pod, ad esempio annotazioni, container in esecuzione sul pod, servizi che espongono il pod e metriche, tra cui l'utilizzo di CPU, memoria e disco.Fai clic sul servizio
frontend
LoadBalancer. Viene visualizzata la pagina Dettagli del servizio. Questa pagina mostra informazioni sul servizio, ad esempio 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
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questa pagina, segui questi passaggi.
In Cloud Shell, esegui questo comando per annullare l'impersonificazione dell'account di servizio:
gcloud config unset auth/impersonate_service_account
Esegui questo comando per eliminare le risorse Terraform:
terraform destroy --auto-approve
Passaggi successivi
Consulta le risorse Terraform per GKE.
Esplora gli esempi di configurazione basati su opinioni nel repository GitHub del modulo GKE di Terraform.