Configurazione di Config Controller
Questa pagina mostra come configurare Config Controller. Config Controller è un servizio ospitato che offre un endpoint API in grado di eseguire il provisioning, attivare e orchestrare le risorse Google Cloud come parte di Anthos Config Management. Per saperne di più su Config Controller, consulta la panoramica di Config Controller.
Prima di iniziare
Prima di configurare Config Controller, devi completare i seguenti passaggi:
Installa e inizializza Google Cloud CLI, che fornisce i comandi
gcloud
,kubectl
enomos
utilizzati in queste istruzioni. Se utilizzi Cloud Shell, l'Google Cloud CLI è preinstallata.kubectl
non è installato per impostazione predefinita da Google Cloud CLI. Per installarekubectl
, esegui questo comando:gcloud components install kubectl
Imposta il progetto Google Cloud in cui verrà ospitato Config Controller:
export PROJECT_ID=PROJECT_ID gcloud config set project ${PROJECT_ID}
Sostituisci
PROJECT_ID
con il progetto Google Cloud in cui verrà ospitato Config Controller.Per consentire a Config Connector di gestire i servizi nel tuo progetto, abilita l'API Service Usage:
gcloud services enable serviceusage.googleapis.com
Se non hai una rete predefinita nel progetto, creane una eseguendo questo comando:
gcloud compute networks create default --subnet-mode=auto
In alternativa, puoi selezionare una rete diversa utilizzando il flag
--network
nel comandogcloud anthos config controller create
durante la configurazione di Config Controller.
Configurazione di Config Controller
Crea un Config Controller con i seguenti comandi dell'interfaccia a riga di comando gcloud:
Abilitare i servizi nel progetto per utilizzare i comandi dell'interfaccia a riga di comando gcloud successivi:
gcloud services enable krmapihosting.googleapis.com \ container.googleapis.com \ cloudresourcemanager.googleapis.com
Crea la tua istanza di Config Controller. Questa operazione può richiedere più di 15 minuti. Puoi creare un'istanza di Config Controller supportata da un cluster standard Google Kubernetes Engine (GKE) o da un cluster GKE Autopilot (Anteprima).
Standard
Per creare un'istanza di Config Controller supportata da un cluster GKE standard privato, esegui il comando seguente:
gcloud anthos config controller create CONFIG_CONTROLLER_NAME \ --location=LOCATION
Sostituisci quanto segue:
CONFIG_CONTROLLER_NAME
: il nome che vuoi assegnare al controller.LOCATION
: aggiungi una delle seguenti regioni:us-central1
us-east1
northamerica-northeast1
northamerica-northeast2
europe-north1
europe-west1
europe-west3
australia-southeast1
australia-southeast2
asia-northeast1
asia-northeast2
Non sono supportate altre regioni.
Puoi impostare parametri facoltativi come
--man-blocks
, che ti consentono di specificare un intervallo CIDR per consentire l'accesso agli indirizzi IP in questi intervalli al piano di controllo Kubernetes. Per l'elenco completo delle opzioni, consulta la documentazione digcloud anthos config controller create
.Autopilot
Per creare un'istanza di Config Controller supportata da un cluster GKE Autopilot privato, esegui il comando seguente:
gcloud alpha anthos config controller create CONFIG_CONTROLLER_NAME \ --location=LOCATION \ --full-management
Sostituisci quanto segue:
CONFIG_CONTROLLER_NAME
: il nome che vuoi assegnare al controller.LOCATION
: aggiungi una delle seguenti regioni:us-central1
us-east1
northamerica-northeast1
northamerica-northeast2
europe-north1
europe-west1
europe-west3
australia-southeast1
australia-southeast2
asia-northeast1
asia-northeast2
Non sono supportate altre regioni.
Dopo la creazione, l'istanza viene visualizzata nell'elenco delle istanze. Per visualizzare l'elenco delle istanze, esegui il comando seguente:
gcloud anthos config controller list --location=LOCATION
Per applicare i manifest, autenticati con l'istanza:
gcloud anthos config controller get-credentials CONFIG_CONTROLLER_NAME \ --location LOCATION
Concedi a Config Controller l'autorizzazione per gestire le risorse Google Cloud nel progetto:
export SA_EMAIL="$(kubectl get ConfigConnectorContext -n config-control \ -o jsonpath='{.items[0].spec.googleServiceAccount}' 2> /dev/null)" gcloud projects add-iam-policy-binding "${PROJECT_ID}" \ --member "serviceAccount:${SA_EMAIL}" \ --role "roles/owner" \ --project "${PROJECT_ID}"
Per utilizzare la suite operativa di Google Cloud per monitorare Config Controller, concedi autorizzazioni aggiuntive all'account di servizio predefinito di Compute Engine:
# Cloud Monitoring metrics permissions gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --role=roles/monitoring.metricWriter \ --condition=None \ --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --role=roles/stackdriver.resourceMetadata.writer \ --condition=None \ --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --role=roles/opsconfigmonitoring.resourceMetadata.writer \ --condition=None --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" # Cloud Logging permissions gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --role=roles/logging.logWriter \ --condition=None \ --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" # Cloud Trace permissions gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --role=roles/cloudtrace.agent \ --condition=None \ --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com"
Sostituisci
PROJECT_NUMBER
con il numero del tuo progetto Google Cloud.
Esegui l'upgrade di Config Controller
Poiché Config Controller è un servizio gestito, Google esegue l'upgrade automatico. Per i dettagli sulle versioni incluse nei componenti e nelle nuove funzionalità, consulta le note di rilascio di Config Controller.
Gestisci le risorse Google Cloud con Config Controller
Dopo aver configurato Config Controller, puoi utilizzare Config Connector per gestire molti servizi e risorse di Google Cloud utilizzando gli strumenti e le API di Kubernetes. Per un elenco completo delle risorse che puoi gestire, consulta Risorse di Config Connector.
In questo esempio viene creato un repository in Cloud Source Repositories che puoi utilizzare nella sezione Configura GitOps.
Crea un file denominato
service.yaml
e copia al suo interno il seguente file YAML:# service.yaml apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1 kind: Service metadata: name: sourcerepo.googleapis.com namespace: config-control
Applica il manifest e attendi di abilitare Cloud Source Repositories:
kubectl apply -f service.yaml kubectl wait -f service.yaml --for=condition=Ready
Crea un file denominato
repo.yaml
e copia al suo interno il seguente file YAML:# repo.yaml apiVersion: sourcerepo.cnrm.cloud.google.com/v1beta1 kind: SourceRepoRepository metadata: name: REPO_NAME namespace: config-control
Sostituisci
REPO_NAME
con il nome che vuoi assegnare a Cloud Source Repositories.Per creare il repository, applica il manifest:
kubectl apply -f repo.yaml
Configura GitOps
Puoi configurare le configurazioni nel repository Git per il Config Controller utilizzando Config Sync. Nell'esempio di questa sezione, utilizzerai i Cloud Source Repositories creati nella sezione precedente.
Crea un file denominato
gitops-iam.yaml
e copia al suo interno il seguente file YAML:# gitops-iam.yaml apiVersion: iam.cnrm.cloud.google.com/v1beta1 kind: IAMServiceAccount metadata: name: config-sync-sa namespace: config-control spec: displayName: ConfigSync --- apiVersion: iam.cnrm.cloud.google.com/v1beta1 kind: IAMPolicyMember metadata: name: config-sync-wi namespace: config-control spec: member: serviceAccount:PROJECT_ID.svc.id.goog[config-management-system/root-reconciler] role: roles/iam.workloadIdentityUser resourceRef: apiVersion: iam.cnrm.cloud.google.com/v1beta1 kind: IAMServiceAccount name: config-sync-sa --- apiVersion: iam.cnrm.cloud.google.com/v1beta1 kind: IAMPolicyMember metadata: name: allow-configsync-sa-read-csr namespace: config-control spec: member: serviceAccount:config-sync-sa@PROJECT_ID.iam.gserviceaccount.com role: roles/source.reader resourceRef: apiVersion: resourcemanager.cnrm.cloud.google.com/v1beta1 kind: Project external: projects/PROJECT_ID
Sostituisci PROJECT_ID con l'ID progetto in cui è in esecuzione Config Controller.
Per concedere a Config Sync l'accesso al repository, applica il manifest:
kubectl apply -f gitops-iam.yaml
Config Controller abilita automaticamente le API RootSync e RepoSync di Config Sync. Queste API ti consentono di accedere a funzionalità aggiuntive di Config Sync, come la sincronizzazione da più repository e la visualizzazione automatica delle configurazioni Kustomize e Helm.
Se vuoi configurare Config Sync, crea un oggetto RootSync. Per creare questo oggetto, crea un file denominato
root-sync.yaml
e copia al suo interno il seguente testo:# root-sync.yaml apiVersion: configsync.gke.io/v1beta1 kind: RootSync metadata: name: root-sync namespace: config-management-system spec: sourceFormat: unstructured git: repo: https://source.developers.google.com/p/PROJECT_ID/r/REPO_NAME branch: main dir: REPO_PATH auth: gcpserviceaccount gcpServiceAccountEmail: config-sync-sa@PROJECT_ID.iam.gserviceaccount.com
Sostituisci quanto segue:
PROJECT_ID
: l'ID del progetto che contiene l'account di servizio e il repository Git.REPO_NAME
: il nome del repository Git da cui eseguire il pull della configurazione e osservare le modifiche.REPO_PATH
: il percorso della directory da cui eseguire la sincronizzazione, rispetto alla directory principale del repository Git. Il valore predefinito è/
.
Per scoprire di più sui campi in
root-sync.yaml
, consulta Campi RootSync e RepoSync.Per applicare la configurazione di Config Sync, attendi l'installazione dell'API RootSync nel cluster. Quindi, applica il manifest per creare un oggetto RootSync utilizzando l'API:
kubectl wait --for condition=established --timeout=10s crd/rootsyncs.configsync.gke.io kubectl apply -f root-sync.yaml
Verifica l'esito positivo
Per verificare la configurazione iniziale, completa i seguenti passaggi:
Verifica che tutti i controller siano stati configurati correttamente su Config Controller:
kubectl wait pod --all --all-namespaces --for=condition=Ready
Verifica che il repository Git sia sincronizzato con Config Controller con Config Sync usando il comando
nomos
o il comandogcloud alpha anthos config sync repo
:nomos status --contexts $(kubectl config current-context) # or gcloud alpha anthos config sync repo list --targets config-controller
Elimina il tuo Config Controller
Se decidi di interrompere l'utilizzo di Config Controller, devi rimuovere tutte le risorse create. Devi prima rimuovere le risorse da Config Controller prima di eliminare lo stesso.
L'eliminazione di Config Controller senza prima eliminare le risorse di cui è stato eseguito il provisioning lascia le risorse in uno stato abbandonato. Le risorse esistono ancora in Google Cloud (e sono soggette a fatturazione), ma non sono gestite dalla configurazione dichiarativa.
Dopo aver eliminato tutte le risorse, puoi eliminare Config Controller utilizzando gcloud CLI:
gcloud anthos config controller delete --location=LOCATION CONFIG_CONTROLLER_NAME
Considerazioni sulla produzione
Quando vai in produzione, devi prima esaminare le considerazioni sull'alta disponibilità per Config Controller.
Passaggi successivi
- Risolvere i problemi di Config Controller
- Se disponi di risorse Google Cloud esistenti che vuoi utilizzare con Config Controller, scopri di più su Importazione ed esportazione di risorse.
- Scopri di più su autorizzazioni e ruoli di Config Controller.
- Scopri di più sulla sincronizzazione di configurazioni e criteri con Config Sync.
- Scopri di più sull'applicazione dei criteri con Policy Controller.