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:

  1. Installa e inizializza l'interfaccia a riga di comando di Google Cloud, che fornisce i comandi gcloud, kubectl e nomos utilizzati in queste istruzioni. Se utilizzi Cloud Shell, l'interfaccia a riga di comando di Google Cloud è preinstallata.

    kubectl non è installato per impostazione predefinita dall'interfaccia a riga di comando di Google Cloud. Per installare kubectl, esegui il comando seguente:

    gcloud components install kubectl
    
  2. 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 sarà ospitato Config Controller.

  3. Se non hai una rete predefinita nel tuo progetto, creane una eseguendo questo comando:

    gcloud compute networks create default --subnet-mode=auto
    

    In alternativa, puoi selezionare un'altra rete usando il flag --network nel comando gcloud anthos config controller create quando configuri Config Controller.

Configurazione di Config Controller

Crea un Config Controller con i seguenti comandi dell'interfaccia a riga di comando gcloud:

  1. Abilita i servizi sul tuo progetto per l'utilizzo dei seguenti comandi dell'interfaccia a riga di comando gcloud:

    gcloud services enable krmapihosting.googleapis.com \
        container.googleapis.com \
        cloudresourcemanager.googleapis.com
    
  2. Crea il tuo Config Controller. Questa operazione può richiedere più di 15 minuti.

    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 aree geografiche:

      • 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 aree geografiche.

    Puoi impostare parametri facoltativi come --man-block, che ti consentono di specificare un intervallo CIDR per consentire agli indirizzi IP in tali intervalli di accedere al piano di controllo Kubernetes per una maggiore sicurezza. Per l'elenco completo delle opzioni, consulta la documentazione dell'gcloud anthos config controller create.

  3. Una volta creata, 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
    
  4. Per applicare i manifest, esegui l'autenticazione con l'istanza:

    gcloud anthos config controller get-credentials CONFIG_CONTROLLER_NAME \
        --location LOCATION
    
  5. 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}"
    

Upgrade di Config Controller

Poiché Config Controller è un servizio gestito, Google esegue l'upgrade automaticamente. Per i dettagli sulle versioni incluse sui componenti e sulle nuove funzionalità, consulta le note di rilascio di Config Controller.

Gestire le risorse Google Cloud con Config Controller

Dopo aver configurato Config Controller, puoi utilizzare Config Connector per gestire molti dei servizi e delle risorse Google Cloud utilizzando gli strumenti e le API di Kubernetes. Per un elenco completo delle risorse che puoi gestire, consulta la sezione Risorse di Config Connector.

In questo esempio crei un repository in Cloud Source Repositories che puoi utilizzare nella sezione Configura GitOps.

  1. Crea un file denominato service.yaml e copia il file YAML seguente:

    # service.yaml
    
    apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1
    kind: Service
    metadata:
      name: sourcerepo.googleapis.com
      namespace: config-control
    
  2. Applica il manifest e attendi di attivare Cloud Source Repositories:

    kubectl apply -f service.yaml
    kubectl wait -f service.yaml --for=condition=Ready
    
  3. Crea un file denominato repo.yaml e copia il file YAML seguente:

    # 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.

  4. Per creare il repository, applica il manifest:

    kubectl apply -f repo.yaml
    

Configurare GitOps

Puoi avere le configurazioni nel repository Git sincronizzate con il controller di configurazione utilizzando Config Sync. Nell'esempio di questa sezione utilizzerai i Cloud Source Repositories che hai creato nella sezione precedente.

  1. Crea un file denominato gitops-iam.yaml e copiaci 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.

  2. Per concedere a Config Sync l'accesso al repository, applica il manifest:

    kubectl apply -f gitops-iam.yaml
    
  3. Config Controller abilita automaticamente le API ConfigSync 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 l'oggetto, crea un file denominato root-sync.yaml e copia il testo seguente al suo interno:

    # 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: REPO_BRANCH
        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_BRANCH: il ramo del repository da cui eseguire la sincronizzazione. Il valore predefinito è master.
    • REPO_PATH: il percorso della directory da cui eseguire la sincronizzazione, in relazione alla radice del repository Git. Il valore predefinito è /.

    Per scoprire di più sui campi in root-sync.yaml, consulta Campi SyncSync e RepoSync.

  4. Per creare la configurazione di Config Sync, applica il manifest e attendi che venga creata:

    kubectl apply -f root-sync.yaml
    kubectl wait --for condition=established --timeout=10s crd/rootsyncs.configsync.gke.io
    

Verifica l'esito positivo

Verifica la configurazione iniziale svolgendo i seguenti passaggi:

  1. Verifica che tutti i controller siano stati configurati correttamente in Config Controller:

    kubectl wait pod --all --all-namespaces --for=condition=Ready
    
  2. Verifica che il repository Git sia sincronizzato con Config Controller con Config Sync utilizzando il comando nomos o il comando gcloud 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 controller di configurazione

Se decidi di interrompere l'utilizzo di Config Controller, devi pulire tutte le risorse create. Prima di eliminare il controller di configurazione, devi prima rimuovere le risorse da Config Controller.

L'eliminazione del controller di configurazione 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 comportano addebiti) ma non sono gestite dalla configurazione dichiarativa.

Dopo aver eliminato tutte le risorse, puoi eliminare Config Controller utilizzando l'interfaccia a riga di comando gcloud:

gcloud anthos config controller delete --location=LOCATION CONFIG_CONTROLLER_NAME

Considerazioni sulla produzione

Prima della produzione, esamina innanzitutto le considerazioni relative alla disponibilità elevata per Config Controller.

Passaggi successivi