Scopri come creare un'istanza di Config Controller con Config Connector, Policy Controller e Config Sync preinstallati. Successivamente, scopri come utilizzare l'istanza completando le seguenti attività:
- Utilizza Config Connector per creare e gestire una risorsa Google Cloud .
- Crea un vincolo Policy Controller per applicare un criterio e rilevare una violazione prima del deployment.
- Configura GitOps configurando Config Sync per la sincronizzazione da un repository di esempio che contiene una risorsa Google Cloud .
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.
-
Creare 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 .
-
Se utilizzi un progetto esistente per questa guida, verifica di disporre delle autorizzazioni necessarie per completare la guida. Se hai creato un nuovo progetto, disponi già delle autorizzazioni necessarie.
-
Verifica che la fatturazione sia abilitata per il tuo progetto Google Cloud .
Abilita le API KRM, GKE, Resource Manager e Service Usage:
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo dei servizi (
roles/serviceusage.serviceUsageAdmin), che include l'autorizzazioneserviceusage.services.enable. Scopri come concedere i ruoli.gcloud services enable krmapihosting.googleapis.com
container.googleapis.com cloudresourcemanager.googleapis.com serviceusage.googleapis.com -
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.
-
Creare 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 .
-
Se utilizzi un progetto esistente per questa guida, verifica di disporre delle autorizzazioni necessarie per completare la guida. Se hai creato un nuovo progetto, disponi già delle autorizzazioni necessarie.
-
Verifica che la fatturazione sia abilitata per il tuo progetto Google Cloud .
Abilita le API KRM, GKE, Resource Manager e Service Usage:
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo dei servizi (
roles/serviceusage.serviceUsageAdmin), che include l'autorizzazioneserviceusage.services.enable. Scopri come concedere i ruoli.gcloud services enable krmapihosting.googleapis.com
container.googleapis.com cloudresourcemanager.googleapis.com serviceusage.googleapis.com
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per gestire le risorse di esempio con Config Controller utilizzate in questa guida rapida, chiedi all'amministratore di concederti i seguenti ruoli IAM sul progetto:
-
Kubernetes Engine Cluster Viewer (
roles/container.clusterViewer) -
Compute Network Admin (
roles/compute.networkAdmin)
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.
Crea un'istanza di Config Controller
Nel terminale, crea un'istanza di Config Controller Autopilot:
gcloud anthos config controller create cc-example \ --location=us-central1 \ --full-managementIl completamento di questa operazione può richiedere fino a 15 minuti.
L'output è il seguente:
Created instance [cc-example]. Fetching cluster endpoint and auth data. kubeconfig entry generated for krmapihost-cc-example.Verifica che l'istanza sia stata creata visualizzando l'elenco delle istanze di Config Controller:
gcloud anthos config controller list --location=us-central1L'output è il seguente:
NAME LOCATION STATE cc-example us-central1 RUNNING
Concedi l'autorizzazione richiesta a Config Controller
In questa sezione concedi a Config Controller l'autorizzazione per gestire le risorse Google Cloud:
Imposta una variabile di ambiente per l'email del account di servizio:
export SA_EMAIL="$(kubectl get ConfigConnectorContext -n config-control \ -o jsonpath='{.items[0].spec.googleServiceAccount}' 2> /dev/null)"Crea l'associazione di policy:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:${SA_EMAIL}" \ --role "roles/owner" \ --project PROJECT_IDSostituisci
PROJECT_IDcon l'ID progetto.L'output è simile al seguente:
Updated IAM policy for project [PROJECT_ID]. auditConfigs: - auditLogConfigs: - logType: ADMIN_READ - logType: DATA_READ - logType: DATA_WRITE service: gkehub.googleapis.com # Remainder of output omitted
Utilizzare l'istanza di Config Controller
Le sezioni seguenti ti presentano i modi in cui puoi utilizzare l'istanza di Config Controller.
Crea una risorsa Google Cloud con Config Connector
Con l'istanza di Config Controller, puoi sfruttare Config Connector per gestire molti Google Cloud servizi e risorse utilizzando gli strumenti e le API di Kubernetes. In questa sezione utilizzi Config Controller per creare una
risorsa PubSubTopic.
Per creare un argomento Pub/Sub utilizzando Config Connector, completa i seguenti passaggi:
Utilizza Config Connector per abilitare l'API Pub/Sub:
Utilizzando l'editor di testo che preferisci, crea un file denominato
enable-pubsub.yamle copia al suo interno il seguente codice YAML:# enable-pubsub.yaml apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1 kind: Service metadata: name: pubsub.googleapis.com namespace: config-control spec: projectRef: external: projects/PROJECT_IDSostituisci
PROJECT_IDcon l'ID progetto.Per abilitare l'API Pub/Sub, applica il manifest al cluster:
kubectl apply -f enable-pubsub.yamlL'abilitazione di questa API potrebbe richiedere diversi minuti.
Utilizza Config Connector per creare un argomento Pub/Sub:
Crea un file denominato
pubsub-topic.yamle copia il seguente codice YAML al suo interno:# pubsub-topic.yaml apiVersion: pubsub.cnrm.cloud.google.com/v1beta1 kind: PubSubTopic metadata: annotations: cnrm.cloud.google.com/project-id: PROJECT_ID labels: label-one: "value-one" name: example-topic namespace: config-controlCrea l'argomento Pub/Sub:
kubectl apply -f pubsub-topic.yaml
Verifica che Config Controller abbia creato la risorsa in Google Cloud visualizzando l'elenco degli argomenti Pub/Sub:
gcloud pubsub topics listL'output è simile al seguente:
--- name: projects/PROJECT_ID/topics/start-instance-event --- labels: label-one: value-one managed-by-cnrm: 'true' name: projects/PROJECT_ID/topics/example-topic
Applicare un criterio con Policy Controller
L'istanza di Config Controller ti consente di utilizzare Policy Controller e i vincoli di Policy Controller. Nell'ambito dell'installazione di Policy Controller, Config Controller installa automaticamente la libreria di modelli di vincoli. Puoi utilizzare i modelli di questa libreria per applicare una serie di controlli di sicurezza e conformità comuni alle tue istanze di Config Controller.
In questa sezione crei un vincolo utilizzando il modello di vincolo
GCPStorageLocationConstraintV1. Questo modello consente di limitare la località in cui è possibile creare
bucket Cloud Storage. Il vincolo che crei utilizzando questo modello
limita la località a us-central1. Ti consigliamo di utilizzare questo vincolo
per assicurarti che i bucket vengano creati in una regione che offre il miglior prezzo
e rendimento.
Per creare il vincolo:
Crea un file denominato
bucket-constraint.yamle copia al suo interno il seguente codice YAML:# bucket-constraint.yaml apiVersion: constraints.gatekeeper.sh/v1beta1 kind: GCPStorageLocationConstraintV1 metadata: name: storage-only-in-us-central1 spec: match: kinds: - apiGroups: - storage.cnrm.cloud.google.com kinds: - StorageBucket parameters: locations: - us-central1Crea il vincolo:
kubectl apply -f bucket-constraint.yamlL'output è il seguente:
gcpstoragelocationconstraintv1.constraints.gatekeeper.sh/storage-only-in-us-central1 created`Dimostra che il vincolo funziona provando a utilizzare Config Connector per creare una risorsa StorageBucket in
asia-southeast1:Crea un file denominato
asia-storage-bucket.yamle copia al suo interno il seguente YAML:# asia-storage-bucket.yaml apiVersion: storage.cnrm.cloud.google.com/v1beta1 kind: StorageBucket metadata: name: bucket-in-disallowed-location namespace: config-control spec: location: asia-southeast1Prova a creare il bucket Cloud Storage:
kubectl apply -f asia-storage-bucket.yamlL'output è il seguente:
Error from server (Forbidden): error when creating "STDIN": admission webhook "validation.gatekeeper.sh" denied the request: [storage-only-in-us-central1] Cloud Storage bucket <bucket-in-disallowed-location> uses a disallowed location <asia-southeast1>, allowed locations are ["us-central1"]
Configurare GitOps con Config Sync
Config Sync è un servizio GitOps che consente di sincronizzare l'istanza di Config Controller con configurazioni, policy e risorseGoogle Cloud archiviate in un repository Git, un'immagine OCI o un repository Helm. Poiché Config Sync riconcilia continuamente lo stato di Config Controller con le configurazioni nella tua origine, puoi contribuire a garantire che le tue istanze abbiano una configurazione coerente.
In questa sezione, sincronizzi l'istanza di Config Controller con un
repository GitHub pubblico. Questo repository contiene
un'altra risorsa PubSubTopic. Se sincronizzi l'istanza da questo repository,
la risorsa viene creata e applicata automaticamente all'istanza. Potresti
scegliere di creare le risorse utilizzando Config Sync (anziché
applicare direttamente la risorsa) se vuoi
utilizzare un flusso di lavoro GitOps.
Per la sincronizzazione da GitHub, configura Cloud NAT. Devi farlo perché la tua istanza Config Controller è supportata da un cluster GKE privato e i nodi del cluster privato non hanno accesso a internet in uscita:
Crea un router Cloud NAT. Ti serve questo router per configurare il gateway NAT.
gcloud compute routers create cc-nat-router \ --network default \ --region us-central1L'output è simile al seguente:
Creating router [cc-nat-router]...done. NAME REGION NETWORK cc-nat-router us-central1 defaultConfigura un gateway NAT sul router che hai creato nel passaggio precedente:
gcloud compute routers nats create cc-nat-config \ --router-region us-central1 \ --router cc-nat-router \ --nat-all-subnet-ip-ranges \ --auto-allocate-nat-external-ipsL'output è il seguente:
Creating NAT [cc-nat-config] in router [cc-nat-router]...done.
Per configurare l'istanza di Config Controller in modo che esegua la sincronizzazione da un repository di esempio, crea un file denominato
cc-rootsync.yamle copia il seguente codice YAML:# cc-rootsync.yaml apiVersion: configsync.gke.io/v1beta1 kind: RootSync metadata: name: root-sync namespace: config-management-system spec: sourceFormat: unstructured git: repo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples branch: main dir: config-controller-quickstart auth: noneApplica la configurazione:
kubectl apply -f cc-rootsync.yamlDopo che la tua istanza esegue la sincronizzazione dal repository, Config Sync crea l'argomento Pub/Sub e lo applica all'istanza di Config Controller.
Verifica che Config Sync stia sincronizzando il repository Git con l'istanza di Config Controller:
nomos status --contexts gke_PROJECT_ID_us-central1_krmapihost-cc-exampleL'output è simile al seguente:
*gke_PROJECT_ID_us-central1_krmapihost-cc-example -------------------- <root>:root-sync https://github.com/GoogleCloudPlatform/anthos-config-management-samples/config-controller-quickstart@main SYNCED @ 2023-01-10 18:31:02 +0000 UTC 715b4295d3eac07b057cce2543275c1ee104cad8 Managed resources: NAMESPACE NAME STATUS SOURCEHASH config-control pubsubtopic.pubsub.cnrm.cloud.google.com/pubsub-topic-sample-sync Current 715b429 config-control service.serviceusage.cnrm.cloud.google.com/pubsub.googleapis.com Current 715b429Se non vedi questo output, attendi un paio di minuti e riprova.
Verifica che Config Controller abbia creato la risorsa:
gcloud pubsub topics listL'output è simile al seguente:
name: projects/PROJECT_ID/topics/start-instance-event --- labels: managed-by-cnrm: 'true' name: projects/PROJECT_ID/topics/sample-topic --- labels: managed-by-cnrm: 'true' name: projects/PROJECT_ID/topics/pubsub-topic-sample-sync --- labels: label-one: value-one managed-by-cnrm: 'true' name: projects/PROJECT_ID/topics/example-topicIn questo output puoi vedere l'argomento Pub/Sub che hai creato nella sezione Crea un'istanza di Config Controller e quello che hai creato sincronizzando l'istanza con un repository GitHub.
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.
Elimina il progetto
Elimina un progetto Google Cloud :
gcloud projects delete PROJECT_ID
Elimina le singole risorse
Elimina la risorsa Config Connector
PubSubTopic:kubectl delete -f pubsub-topic.yamlElimina il vincolo di Policy Controller:
kubectl delete -f bucket-constraint.yamlElimina il router NAT:
gcloud compute routers delete cc-nat-router \ --project=PROJECT_ID \ --region=us-central1Premi
yquando richiesto.Elimina la risorsa Pub/Sub creata da Config Sync:
kubectl delete PubSubTopic pubsub-topic-sample-sync -n config-controlElimina la risorsa RootSync:
kubectl delete rootsync root-sync -n config-management-systemUtilizzando l'editor di testo che preferisci, elimina tutti i file YAML che hai creato:
enable-pubsub.yamlpubsub-topic.yamlbucket-constraint.yamlasia-storage-bucket.yamlcc-rootsync.yaml
Elimina l'istanza Config Controller:
gcloud anthos config controller delete --location=us-central1 cc-examplePremi
yquando richiesto.
Passaggi successivi
- Scopri come configurare Config Controller.
- Scopri di più su Config Controller.