Questa pagina spiega come utilizzare Config Sync e Terraform per creare dinamicamente risorse con ambito team in un parco risorse di cluster. Config Sync estende le funzionalità di gestione dei team del parco risorse per creare e gestire configurazioni di infrastruttura e cluster nei parchi risorse.
Questa guida presuppone che tu abbia già familiarità con i concetti di gestione dei team del parco risorse, come gli ambiti dei team e gli spazi dei nomi del parco risorse. Per saperne di più, consulta la panoramica della gestione del team del parco risorse.
Per un tutorial end-to-end con configurazioni di esempio, consulta il tutorial sul tenant del parco risorse nel repository di esempio.
Per un elenco dei campi supportati per Config Sync in Terraform, consulta la documentazione di riferimento di Terraform per le funzionalità del parco risorse GKE.
Workflow di esempio
Sei un amministratore della piattaforma che vuole creare dinamicamente risorse in un parco risorse di cluster in cui team diversi hanno esigenze diverse. Ad esempio, potresti voler applicare un
NetworkPolicy agli spazi dei nomi del team di backend, ma non a quelli del team di frontend.
In questo scenario, la procedura per creare risorse con ambito del team in uno spazio dei nomi è la seguente:
- Scegli o crea il parco risorse in cui vuoi gestire le risorse per i team.
Configura la tua fonte di riferimento. L'origine attendibile contiene gli oggetti
NamespaceSelectorche utilizzi per selezionare gli spazi dei nomi a livello di parco risorse negli ambiti del team e qualsiasi risorsa (ad esempio unNetworkPolicy) che vuoi sincronizzare in questi spazi dei nomi.Crea la configurazione predefinita a livello di parco risorse per Config Sync. Config Sync utilizza queste impostazioni predefinite durante la sincronizzazione dall'origine attendibile creata nel passaggio precedente. Queste impostazioni di Config Sync si applicano a tutti i nuovi cluster creati nel parco risorse.
Crea cluster nel tuo parco risorse.
Crea gli ambiti del team e gli spazi dei nomi di frontend e backend in modo che Config Sync possa rilevare e riconciliare le risorse nei tuoi spazi dei nomi.
Dopo aver completato questi passaggi, Config Sync crea e applica il
NetworkPolicy in base a NamespaceSelector agli spazi dei nomi del team di backend. Se modifichi o aggiungi risorse, Config Sync rileva e applica continuamente le modifiche ai file di configurazione, agli scope del team, agli spazi dei nomi del parco risorse e ai membri del parco risorse.
Prezzi
Le funzionalità di gestione dei team del parco risorse e di Config Sync sono disponibili nell'ambito di GKE. Per ulteriori informazioni sui prezzi, consulta la pagina dei prezzi di GKE.
Prima di iniziare
- Accedi al tuo account Google Cloud . 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.
-
Installa Google Cloud CLI.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init -
Crea o seleziona un Google Cloud progetto.
Ruoli richiesti per selezionare o creare un progetto
- Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico. Puoi selezionare qualsiasi progetto per il quale ti è stato concesso un ruolo.
-
Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto
(
roles/resourcemanager.projectCreator), che contiene l'autorizzazioneresourcemanager.projects.create. Scopri come concedere i ruoli.
-
Crea un progetto Google Cloud :
gcloud projects create PROJECT_ID
Sostituisci
PROJECT_IDcon un nome per il progetto Google Cloud che stai creando. -
Seleziona il progetto Google Cloud che hai creato:
gcloud config set project PROJECT_ID
Sostituisci
PROJECT_IDcon il nome del progetto Google Cloud .
-
Installa Google Cloud CLI.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init -
Crea o seleziona un Google Cloud progetto.
Ruoli richiesti per selezionare o creare un progetto
- Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico. Puoi selezionare qualsiasi progetto per il quale ti è stato concesso un ruolo.
-
Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto
(
roles/resourcemanager.projectCreator), che contiene l'autorizzazioneresourcemanager.projects.create. Scopri come concedere i ruoli.
-
Crea un progetto Google Cloud :
gcloud projects create PROJECT_ID
Sostituisci
PROJECT_IDcon un nome per il progetto Google Cloud che stai creando. -
Seleziona il progetto Google Cloud che hai creato:
gcloud config set project PROJECT_ID
Sostituisci
PROJECT_IDcon il nome del progetto Google Cloud .
- Creare o avere accesso a una fonte attendibile (un repository Git o un'immagine OCI) in cui archiviare i file di configurazione. Gli esempi in questa guida utilizzano un repository Git.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per creare risorse del team per la tua flotta, chiedi all'amministratore di concederti i seguenti ruoli IAM nel tuo progetto:
-
Gestione delle risorse del parco risorse:
Fleet Admin (in precedenza GKE Hub Admin) (
roles/gkehub.admin) -
Creazione di cluster GKE:
Kubernetes Engine Cluster Admin (
roles/container.clusterAdmin)
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Acquisire le credenziali utente
Per eseguire i comandi Terraform in questa guida nel tuo ambiente locale, esegui questo comando per acquisire nuove credenziali utente:
gcloud auth application-default login
Configurare il parco risorse
In questa sezione, crei il tuo parco risorse e abiliti i servizi richiesti.
Per configurare il tuo parco risorse, segui questi passaggi:
Crea una directory per i file Terraform di configurazione del parco risorse. Aggiungi a questa directory un file
main.tfe un filevariables.tf.Nel file
variables.tf, aggiungi le seguenti variabili:Nel file
main.tf, aggiungi le seguenti risorse:Esporta la variabile PROJECT_ID:
export TF_VAR_project=PROJECT_IDSostituisci
PROJECT_IDcon l'ID progetto in cui vuoi creare il tuo parco risorse.Inizializza Terraform nella directory che hai creato:
terraform initVerifica che le modifiche proposte con Terraform corrispondano al piano previsto:
terraform planCrea il parco, attiva le API e crea il account di servizio:
terraform applyA volte possono essere necessari alcuni minuti per attivare tutti i servizi.
Configurare l'origine dell'obiettivo ultimo dell'attività
In questa sezione, aggiungi i file di configurazione a una fonte di riferimento.
Hai bisogno di un oggetto NamespaceSelector
per ogni ambito del team che vuoi utilizzare.
Ad esempio, se hai team di frontend e backend, devi creare un oggetto NamespaceSelector per ogni team. L'oggetto NamespaceSelector seleziona tutti o alcuni degli
spazi dei nomi all'interno di un ambito del team. Puoi aggiungere altre risorse del team
alla tua fonte attendibile, ad esempio un NetworkPolicy. Quando crei queste risorse, fai riferimento a NamespaceSelector in modo che Config Sync possa eseguirne il deployment e sincronizzarle dinamicamente tra gli spazi dei nomi.
Per configurare la fonte di attendibilità, completa i seguenti passaggi:
Nella fonte di riferimento, crea una directory per i file di configurazione da cui vuoi che Config Sync esegua la sincronizzazione.
Per ogni team, crea un oggetto
NamespaceSelectornella directory di configurazione:apiVersion: configmanagement.gke.io/v1 kind: NamespaceSelector metadata: name: NAMESPACE_SELECTOR_NAME spec: mode: dynamic selector: matchLabels: fleet.gke.io/fleet-scope: SCOPE_NAMESostituisci quanto segue:
NAMESPACE_SELECTOR_NAME: il nome dell'oggettoNamespaceSelector, ad esempiobackend-scope.SCOPE_NAME: il nome dell'ambito del team, ad esempiobackend.
Tutti gli spazi dei nomi che fanno parte di uno spazio dei nomi del parco risorse hanno automaticamente l'etichetta
fleet.gke.io/fleet-scope: SCOPE_NAME.NamespaceSelectorseleziona tutti gli spazi dei nomi del parco risorse di un ambito del team utilizzando questa etichetta. Per altri esempi su come includere o escludere spazi dei nomi, vedi Esempi diNamespaceSelector.Crea gli oggetti che vuoi sincronizzare tra gli spazi dei nomi.
Per sincronizzare un oggetto solo con un team specifico, imposta la seguente annotazione nei metadati dell'oggetto:
annotations: configmanagement.gke.io/namespace-selector: NAMESPACE_SELECTOR_NAMEAd esempio, un
NetworkPolicyper il team di backend potrebbe essere simile al seguente:
Crea valori predefiniti a livello di parco risorse per Config Sync
In questa sezione, crei i valori predefiniti a livello di parco risorse per Config Sync, che applica la stessa configurazione di Config Sync a tutti i cluster creati nel parco risorse.
Per creare una configurazione predefinita a livello di parco risorse per Config Sync, completa i seguenti passaggi:
Crea una directory per i file Terraform di configurazione predefinita del parco risorse. Aggiungi a questa directory un file
main.tfe un filevariables.tf.Nel file
variables.tf, aggiungi le seguenti variabili:Nel file
main.tf, aggiungi la seguente risorsa per configurare le impostazioni di Config Sync:git
terraform { required_providers { google = { source = "hashicorp/google" version = ">=5.16.0" } } } provider "google" { project = var.project } resource "google_gke_hub_feature" "feature" { name = "configmanagement" location = "global" provider = google fleet_default_member_config { configmanagement { version = "VERSION" config_sync { source_format = "unstructured" git { sync_repo = "REPO" sync_branch = "BRANCH" policy_dir = "DIRECTORY" secret_type = "SECRET" } } } } }Sostituisci quanto segue:
VERSION: (facoltativo) il numero di versione di Config Sync. Se il campo viene lasciato vuoto, per impostazione predefinita viene utilizzata l'ultima versione.REPO: l'URL del repository contenente i file di configurazione.BRANCH: il ramo del repository, ad esempiomain.DIRECTORY: il percorso all'interno del repository Git che rappresenta il livello superiore del repository che vuoi sincronizzare.SECRET: il tipo di autenticazione del secret.
Per un elenco completo delle impostazioni supportate nel blocco
gitdi Config Sync, consulta la documentazione di riferimento di Terraform per le funzionalità di GKE Hub.OCI
terraform { required_providers { google = { source = "hashicorp/google" version = ">=5.16.0" } } } provider "google" { project = var.project } resource "google_gke_hub_feature" "feature" { name = "configmanagement" location = "global" provider = google fleet_default_member_config { configmanagement { version = "VERSION" config_sync { source_format = "unstructured" oci { sync_repo = "REPO" policy_dir = "DIRECTORY" secret_type = "SECRET" } } } } }Sostituisci quanto segue:
VERSION: il numero di versione di Config Sync. Se non viene specificato, il valore predefinito è l'ultima versione.REPO: l'URL del repository di immagini OCI contenente i file di configurazione.DIRECTORY: il percorso assoluto della directory contenente le risorse che vuoi sincronizzare. Lascia vuoto per utilizzare la directory radice.SECRET: il tipo di autenticazione del secret.
Per un elenco completo delle impostazioni supportate nel blocco
ocidi Config Sync, consulta la documentazione di riferimento di Terraform per le funzionalità di GKE Hub.Ad esempio, il seguente file
main.tfconfigura Config Sync per la sincronizzazione da un repository Git e sincronizza tutti gli oggetti presenti nella directoryconfig:Inizializza Terraform nella directory che hai creato:
terraform initVerifica che le modifiche che proponi con Terraform corrispondano al piano previsto:
terraform planCrea le configurazioni predefinite dei membri del parco risorse:
terraform apply
Crea cluster nel tuo parco risorse
In questa sezione, crei una configurazione del cluster condivisa e poi crei i cluster nel tuo parco risorse.
Per creare e registrare nuovi cluster nel tuo parco risorse, completa i seguenti passaggi:
Crea una directory per i file Terraform di configurazione del cluster. In questa directory, aggiungi un file
main.tfe un filevariables.tf.Nel file
variables.tf, aggiungi le seguenti variabili:Crea un file
cluster.tfche contenga i valori predefiniti utilizzati in tutti i cluster, ad esempio gli ID progetto e parco risorse:variable "location" { type = string } variable "cluster_name" { type = string } data "google_project" "project" { provider = google } resource "google_container_cluster" "cluster" { provider = google name = var.cluster_name location = var.location initial_node_count = 3 project = data.google_project.project.project_id fleet { project = data.google_project.project.project_id } workload_identity_config { workload_pool = "${data.google_project.project.project_id}.svc.id.goog" } deletion_protection = false }Nel file
main.tf, aggiungi le seguenti risorse:terraform { required_providers { google = { source = "hashicorp/google" version = ">=5.16.0" } } } provider "google" { project = var.project } module "MODULE_NAME" { source = "CLUSTER_CONFIGURATION_FILEPATH" cluster_name = "CLUSTER_NAME" location="CLUSTER_LOCATION" }Sostituisci quanto segue:
MODULE_NAME: il nome che vuoi assegnare al modulo del cluster. MODULE_NAME e CLUSTER_NAME possono avere lo stesso valore, ad esempious-east-cluster.CLUSTER_CONFIGURATION_FILEPATH: il percorso relativo del filecluster.tfche hai creato.CLUSTER_NAME: il nome del tuo cluster. MODULE_NAME e CLUSTER_NAME possono avere lo stesso valore, ad esempious-east-cluster.CLUSTER_LOCATION: la posizione del cluster, ad esempious-east1.
Puoi creare tutti i cluster che vuoi. Ad esempio, il seguente file
main.tfcrea 3 cluster in regioni diverse:Inizializza Terraform nella directory che hai creato:
terraform initVerifica che le modifiche che proponi con Terraform corrispondano al piano previsto:
terraform planCrea i cluster:
terraform apply
Configura gli scope dei team e gli spazi dei nomi del parco risorse
In questa sezione, crei gli ambiti del team e associ i cluster a questi ambiti. Poi crei gli spazi dei nomi del parco risorse che ti servono, ad esempio uno per ogni team, in ogni ambito e Config Sync crea le risorse nei tuoi spazi dei nomi.
Per configurare gli ambiti e gli spazi dei nomi del team, completa i seguenti passaggi:
Crea una directory per i file Terraform di configurazione dell'ambito del team e dello spazio dei nomi. Aggiungi a questa directory un file
main.tfe un filevariables.tf.Nel file
variables.tf, aggiungi le seguenti variabili:Nel file
main.tf, aggiungi le seguenti risorse:Aggiungi le informazioni sul provider:
terraform { required_providers { google = { source = "hashicorp/google" version = ">=5.16.0" } } } provider "google" { project = var.project }Aggiungi la risorsa dell'ambito del team:
resource "google_gke_hub_scope" "scope" { provider = google for_each = toset([ "SCOPE_NAME", "SCOPE_NAME_2", ]) scope_id = each.value }Sostituisci quanto segue:
SCOPE_NAME: il nome dell'ambito del team, ad esempiobackend.SCOPE_NAME_2: un ambito del team aggiuntivo, se ne hai creato uno.
Puoi aggiungere tutti gli ambiti del team che ti servono. Quando viene creato uno spazio dei nomi del parco risorse nel cluster, lo spazio dei nomi viene etichettato automaticamente con
fleet.gke.io/fleet-scope: SCOPE_NAME, consentendo a Config Sync di selezionare gli spazi dei nomi in base alle etichetteNamespaceSelectorpresenti durante la sincronizzazione delle risorse Kubernetes.Ad esempio, una risorsa Terraform di ambito del team che include un ambito per il team Frontend e il team Backend potrebbe essere simile alla seguente:
Aggiungi un binding dell'appartenenza al parco per ogni cluster che vuoi applicare a un ambito del team:
resource "google_gke_hub_membership_binding" "membership-binding" { provider = google for_each = { MEMBERSHIP_BINDING_NAME = { membership_binding_id = "MEMBERSHIP_BINDING_ID" scope = google_gke_hub_scope.scope["SCOPE_NAME"].name membership_id = "CLUSTER_NAME" location = "CLUSTER_LOCATION" } MEMBERSHIP_BINDING_NAME_2 = { membership_binding_id = "MEMBERSHIP_BINDING_ID_2" scope = google_gke_hub_scope.scope["SCOPE_NAME_2"].name membership_id = "CLUSTER_NAME_2" location = "CLUSTER_LOCATION_2" } } membership_binding_id = each.value.membership_binding_id scope = each.value.scope membership_id = each.value.membership_id location = each.value.location depends_on = [google_gke_hub_scope.scope] }Sostituisci quanto segue:
MEMBERSHIP_BINDING_NAME: il nome del binding dell'appartenenza, ad esempious-east-backend.MEMBERSIP_BINDING_ID: l'ID del binding dell'appartenenza. Può essere uguale a MEMBERSHIP_BINDING_NAME.SCOPE_NAME: il selettore di etichette che hai assegnato all'ambito del team quando hai creato unNamespaceSelector, ad esempiobackend.CLUSTER_NAME: il nome del cluster che hai creato quando hai creato i cluster, ad esempious-east-cluster.CLUSTER_LOCATION: la posizione del cluster, ad esempious-east1.
Devi definire un'associazione di appartenenza al parco risorse per ogni cluster. Se non definisci un ambito del team per un cluster, questo non viene creato per lo spazio dei nomi. Ad esempio, se hai tre cluster nelle regioni
us-east1,us-west1eus-central1, ma il clusterus-central1è solo per il team Frontend, la risorsa di associazione dell'abbonamento sarà simile alla seguente:Aggiungi gli spazi dei nomi che vuoi definire per i tuoi team:
resource "google_gke_hub_namespace" "fleet_namespace" { provider = google for_each = { FLEET_NAMESPACE = { scope_id = "SCOPE_NAME" scope_namespace_id = "FLEET_NAMESPACE_ID" scope = google_gke_hub_scope.scope["SCOPE_NAME"].name } FLEET_NAMESPACE_2 = { scope_id = "SCOPE_NAME" scope_namespace_id = "FLEET_NAMESPACE_ID_2" scope = google_gke_hub_scope.scope["SCOPE_NAME"].name } } scope_namespace_id = each.value.scope_namespace_id scope_id = each.value.scope_id scope = each.value.scope depends_on = [google_gke_hub_scope.scope] }Sostituisci quanto segue:
FLEET_NAMESPACE: il nome che vuoi assegnare allo spazio dei nomi, ad esempiobackend-a.SCOPE_NAME: il selettore di etichette che hai assegnato all'ambito del team quando hai creato unNamespaceSelector, ad esempiobackend.FLEET_NAMESPACE_ID: l'ID spazio dei nomi. Può avere lo stesso valore di FLEET_NAMESPACE.
Ad esempio, se vuoi che i team frontend e backend abbiano due spazi dei nomi ciascuno, la risorsa dello spazio dei nomi della flotta potrebbe essere simile alla seguente:
Inizializza Terraform nella directory che hai creato:
terraform initVerifica che le modifiche che proponi con Terraform corrispondano al piano previsto:
terraform planCrea gli ambiti del parco risorse e gli spazi dei nomi:
terraform apply
Dopo aver creato gli scope e i namespace del parco risorse, Config Sync rileva i nuovi namespace e i relativi scope, seleziona le risorse nei namespace del parco risorse e le riconcilia con i file di configurazione.
Puoi verificare che le risorse siano applicate al cluster corretto utilizzando nomos status o visitando la scheda Pacchetti di Config Sync nella console Google Cloud e modificando il pulsante di opzione Visualizza per in Cluster.
Config Sync sincronizza le risorse tra gli spazi dei nomi in base agli ambiti del team
in base alla configurazione memorizzata nella Single Source of Truth. Ogni volta che aggiungi una nuova risorsa,
purché includa l'annotazione NamespaceSelector corretta, Config Sync
la riconcilia automaticamente negli spazi dei nomi del tuo team.
Se vuoi applicare le impostazioni di Config Sync ai cluster esistenti, consulta le istruzioni per configurare i valori predefiniti a livello di parco risorse nella guida all'installazione di Config Sync.
Passaggi successivi
- Scopri di più su come configurare i team per la tua flotta.