Configurazione di Config Controller

Questa pagina mostra come configurare Config Controller.

Config Controller fornisce un control plane gestito basato su Kubernetes. Inoltre, le istanze di Config Controller sono preinstallate con Policy Controller, Config Sync e Config Connector. Utilizzando questi componenti, puoi utilizzare gli strumenti e i flussi di lavoro di Kubernetes per gestire le risorse e ottenere coerenza utilizzando un flusso di lavoro GitOps. Google CloudPer saperne di più, consulta la panoramica di Config Controller.

Se stai creando un'istanza di Config Controller per la prima volta, consulta la guida rapida: gestisci le risorse con Config Controller.

Limitazioni

  • Poiché le istanze Config Controller sono completamente gestite, non puoi registrarle con un parco risorse.

Prima di iniziare

Prima di configurare Config Controller, completa i seguenti passaggi:

  1. Installa e inizializza la CLIGoogle Cloud, che fornisce Google Cloud CLI utilizzata in queste istruzioni. Se utilizzi Cloud Shell, Google Cloud CLI è già installata.
  2. Poiché kubectl non è installato per impostazione predefinita dall'interfaccia a riga di comando di Google Cloud, installalo:

    gcloud components install kubectl
    
  3. Imposta il progetto Google Cloud in cui vuoi ospitare Config Controller:

    gcloud config set project PROJECT_ID
    

    Sostituisci PROJECT_ID con il progetto Google Cloud che ospiterà Config Controller.

  4. Abilita le API richieste:

    gcloud services enable krmapihosting.googleapis.com \
        container.googleapis.com  \
        cloudresourcemanager.googleapis.com \
        serviceusage.googleapis.com
    

Crea un'istanza di Config Controller

Puoi creare un'istanza di Config Controller supportata da un cluster Standard o da un cluster Autopilot. Entrambi i tipi di cluster sono privati.

Seleziona un cluster standard se vuoi più opzioni di personalizzazione. Seleziona un cluster Autopilot se vuoi un'installazione più rapida, la scalabilità automatica orizzontale e verticale dei pod e funzionalità di sicurezza avanzate come Container-Optimized OS, nodi GKE schermati, Workload Identity Federation for GKE e Avvio protetto.

La creazione di un nuovo cluster può richiedere fino a 15 minuti. Se vuoi osservare cosa succede durante la creazione, puoi visualizzare Esplora log nella console Google Cloud .

Vai a Esplora log

Se riscontri errori durante la creazione, consulta la pagina Risoluzione dei problemi di Config Controller per indicazioni sulla risoluzione dei problemi comuni.

Crea un cluster Autopilot

Per creare un'istanza di Config Controller su un cluster Autopilot, esegui questo comando:

gcloud anthos config controller create CONFIG_CONTROLLER_NAME \
    --location=LOCATION \
    --full-management

Sostituisci quanto segue:

  • CONFIG_CONTROLLER_NAME: il nome che vuoi assegnare all'istanza di Config Controller.
  • LOCATION: la posizione in cui vuoi creare l'istanza di Config Controller, ad esempio us-central. Per un elenco delle località supportate, consulta Località.

Crea un cluster Standard

Per creare un'istanza di Config Controller su un cluster Standard, esegui questo comando:

gcloud anthos config controller create CONFIG_CONTROLLER_NAME \
    --location=LOCATION

Sostituisci quanto segue:

  • CONFIG_CONTROLLER_NAME: il nome che vuoi assegnare all'istanza di Config Controller.
  • LOCATION: la posizione in cui vuoi creare l'istanza di Config Controller, ad esempio us-central. Per un elenco delle località supportate, consulta Località.

Quando crei un'istanza standard di Config Controller, puoi impostare più parametri facoltativi. Per l'elenco completo delle opzioni, consulta la gcloud anthos config controller create documentazione.

Conferma l'istanza di Config Controller

Per verificare che l'istanza di Config Controller sia configurata, completa i seguenti passaggi:

  1. Per verificare che le istanze di Config Controller siano state create, visualizza l'elenco delle istanze di Config Controller:

    gcloud anthos config controller list --location=LOCATION
    

    Dovresti visualizzare il valore RUNNING nella colonna dello stato. Se lo stato è CREATING, la tua istanza di Config Controller è ancora in fase di creazione e devi continuare ad attendere. Se vedi ERROR, hai riscontrato un problema che non puoi risolvere autonomamente. Contatta l'assistenza di Google Cloudper ricevere aiuto.

  2. Per comunicare con l'endpoint Config Controller, recupera le credenziali e le informazioni sull'endpoint appropriate:

    gcloud anthos config controller get-credentials CONFIG_CONTROLLER_NAME \
        --location LOCATION
    

Utilizzare l'istanza di Config Controller

Ora che hai creato un'istanza di Config Controller, puoi iniziare a utilizzare i componenti installati e completare le seguenti attività:

  • Utilizza Config Connector per creare Google Cloud risorse. Se hai risorse Google Cloud esistenti che vuoi utilizzare con Config Controller, scopri di più su Acquisizione di una risorsa esistente.

  • Utilizza Policy Controller per applicare vincoli che impongono la conformità normativa e gli standard Kubernetes.

  • Dopo aver configurato Config Sync, nella sezione seguente sincronizza l'istanza Config Controller con le configurazioni (incluse le limitazioni di Policy Controller e le risorse Config Connector) archiviate in una fonte attendibile.

Per un esempio guidato che mostra come completare queste attività con Config Controller, consulta Guida rapida: gestisci le risorse con Config Controller.

Configura l'istanza di Config Controller

Le sezioni seguenti spiegano come configurare i componenti dell'istanza Config Controller.

Configura Config Connector

Non è necessario gestire alcuna impostazione per l'installazione di Config Connector. Tuttavia, devi concedere a Config Controller le autorizzazioni per gestire le risorseGoogle Cloud :

  1. 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)"
    
  2. Crea l'associazione di policy:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "serviceAccount:${SA_EMAIL}" \
        --role "ROLE" \
        --project PROJECT_ID
    

    Sostituisci quanto segue:

    Se l'operazione precedente non va a buon fine, controlla se i controller sono pronti:

    kubectl wait pod --all --all-namespaces --for=condition=Ready
    

Dopo aver concesso queste autorizzazioni, puoi iniziare a creare Google Cloud risorse.

Configura Policy Controller

Potresti dover aggiungere o aggiornare il criterio IAM per consentire a Policy Controller di inviare metriche.

Consenti a Policy Controller di inviare metriche eseguendo questo comando:

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member="serviceAccount:PROJECT_ID.svc.id.goog[gatekeeper-system/gatekeeper-admin]" \
  --role=roles/monitoring.metricWriter

Sostituisci PROJECT_ID con l'ID progetto Google Cloud del cluster.

Configurare Config Sync

Se vuoi che la tua istanza di Config Controller si sincronizzi dalle configurazioni archiviate in una fonte attendibile, devi configurare Config Sync.

Se vuoi utilizzare Config Sync per creare risorse Config Connector, assicurati di aver anche concesso a Config Controller l'autorizzazione per gestire le risorse.

Per configurare Config Sync, crea e modifica un oggetto RootSync:

  1. Per la sincronizzazione da un repository esterno (ad esempio GitHub), configura Cloud NAT con GKE. Devi farlo perché i nodi del cluster privato non hanno accesso a internet in uscita.

  2. Salva uno dei seguenti manifest come root-sync.yaml. Utilizza la versione del manifest che corrisponde al tipo di origine per le tue configurazioni.

    Git

    # root-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: ROOT_SYNC_NAME
      namespace: config-management-system
    spec:
      sourceType: git
      sourceFormat: ROOT_FORMAT
      git:
        repo: ROOT_REPOSITORY
        revision: ROOT_REVISION
        branch: ROOT_BRANCH
        dir: ROOT_DIRECTORY
        auth: ROOT_AUTH_TYPE
        gcpServiceAccountEmail: ROOT_EMAIL
        secretRef:
          name: ROOT_SECRET_NAME
        noSSLVerify: ROOT_NO_SSL_VERIFY
        caCertSecretRef:
          name: ROOT_CA_CERT_SECRET_NAME
    

    Sostituisci quanto segue:

    • ROOT_SYNC_NAME: aggiungi il nome dell'oggetto RootSync.
    • ROOT_FORMAT: aggiungi unstructured per utilizzare un repository non strutturato o aggiungi hierarchy per utilizzare un repository gerarchico. Questi valori sono sensibili alle maiuscole. Questo campo è facoltativo e il valore predefinito è hierarchy. Ti consigliamo di aggiungere unstructured perché questo formato ti consente di organizzare le configurazioni nel modo più conveniente per te.
    • ROOT_REPOSITORY: aggiungi l'URL del repository Git da utilizzare come repository principale. Puoi inserire gli URL utilizzando il protocollo HTTPS o SSH. Ad esempio, https://github.com/GoogleCloudPlatform/anthos-config-management-samples utilizza il protocollo HTTPS. Questo campo è obbligatorio.
    • ROOT_REVISION: aggiungi la revisione Git (tag o hash) o il ramo da cui sincronizzare. Questo campo è facoltativo e il valore predefinito è HEAD. Quando utilizzi un hash, deve essere un hash completo e non una forma abbreviata.
    • ROOT_BRANCH: aggiungi il ramo del repository da cui eseguire la sincronizzazione. Questo campo è facoltativo e il valore predefinito è master. Per semplicità, ti consigliamo di utilizzare il campo revision per specificare un nome di ramo. Se vengono specificati sia il campo revision che il campo branch, revision ha la precedenza su branch.
    • ROOT_DIRECTORY: aggiungi il percorso nel repository Git alla directory principale che contiene la configurazione da sincronizzare. Questo campo è facoltativo e il valore predefinito è la directory radice (/) del repository.
    • ROOT_AUTH_TYPE: aggiungi uno dei seguenti tipi di autenticazione:

      • none: Non utilizzare l'autenticazione
      • ssh: Utilizza una coppia di chiavi SSH
      • cookiefile: utilizza un cookiefile
      • token: utilizza un token
      • gcpserviceaccount: utilizza un account di servizio Google per accedere a un Cloud Source Repositories.
      • gcenode: utilizza un account di servizio Google per accedere a Cloud Source Repositories. Seleziona questa opzione solo se Workload Identity Federation for GKE non è abilitata nel tuo cluster.

      Per ulteriori informazioni su questi tipi di autenticazione, consulta la pagina Concedere a Config Sync l'accesso in sola lettura a Git.

      Questo campo è obbligatorio.

    • ROOT_EMAIL: se hai aggiunto gcpserviceaccount come ROOT_AUTH_TYPE, aggiungi l'indirizzo email del account di servizio Google. Ad esempio acm@PROJECT_ID.iam.gserviceaccount.com.

    • ROOT_SECRET_NAME: aggiungi il nome del tuo secret. Se questo campo è impostato, devi aggiungere la chiave pubblica del secret al provider Git. Questo campo è facoltativo.

    • ROOT_NO_SSL_VERIFY: per disattivare la verifica del certificato SSL, imposta questo campo su true. Il valore predefinito è false.

    • ROOT_CA_CERT_SECRET_NAME: aggiungi il nome del tuo secret. Se questo campo è impostato, il tuo provider Git deve utilizzare un certificato emesso da questa autorità di certificazione (CA). Il secret deve contenere il certificato CA in una chiave denominata cert. Questo campo è facoltativo.

      Per scoprire di più su come configurare l'oggetto Secret per il certificato CA, consulta Configurare l'autorità di certificazione.

    Per una spiegazione dei campi e un elenco completo di quelli che puoi aggiungere al campo spec, consulta Campi RootSync.

    Questo manifest crea un oggetto RootSync che utilizza Git come origine.

    OCI

    # root-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: ROOT_SYNC_NAME
      namespace: config-management-system
    spec:
      sourceType: oci
      sourceFormat: ROOT_FORMAT
      oci:
        image: ROOT_IMAGE
        dir: ROOT_DIRECTORY
        auth: ROOT_AUTH_TYPE
        gcpServiceAccountEmail: ROOT_EMAIL
        caCertSecretRef:
          name: ROOT_CA_CERT_SECRET_NAME
    

    Sostituisci quanto segue:

    • ROOT_SYNC_NAME: aggiungi il nome dell'oggetto RootSync.
    • ROOT_FORMAT: aggiungi unstructured per utilizzare un repository non strutturato o aggiungi hierarchy per utilizzare un repository gerarchico. Questi valori sono sensibili alle maiuscole. Questo campo è facoltativo e il valore predefinito è hierarchy. Ti consigliamo di aggiungere unstructured perché questo formato ti consente di organizzare le configurazioni nel modo più conveniente per te.
    • ROOT_IMAGE: l'URL dell'immagine OCI da utilizzare come repository radice, ad esempio LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME. Per impostazione predefinita, l'immagine viene estratta dal tag latest, ma puoi estrarre le immagini in base a TAG o DIGEST. Specifica TAG o DIGEST in PACKAGE_NAME:
      • Per estrarre per TAG: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME:TAG
      • Per estrarre per DIGEST: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME@sha256:DIGEST
    • ROOT_DIRECTORY: aggiungi il percorso nel repository alla directory principale che contiene la configurazione da sincronizzare. Questo campo è facoltativo e il valore predefinito è la directory radice (/) del repository.
    • ROOT_AUTH_TYPE: aggiungi uno dei seguenti tipi di autenticazione:

      • none: Non utilizzare l'autenticazione
      • gcenode: utilizza l'account di servizio predefinito di Compute Engine per accedere a un'immagine in Artifact Registry. Seleziona questa opzione solo se Workload Identity Federation per GKE non è abilitata nel tuo cluster.
      • gcpserviceaccount: utilizza un account di servizio Google per accedere a un'immagine.

      Questo campo è obbligatorio.

    • ROOT_EMAIL: se hai aggiunto gcpserviceaccount come ROOT_AUTH_TYPE, aggiungi l'indirizzo email del account di servizio Google. Ad esempio acm@PROJECT_ID.iam.gserviceaccount.com.

    • ROOT_CA_CERT_SECRET_NAME: aggiungi il nome del tuo secret. Se questo campo è impostato, il tuo provider OCI deve utilizzare un certificato emesso da questa autorità di certificazione (CA). Il secret deve contenere il certificato CA in una chiave denominata cert. Questo campo è facoltativo.

    Per scoprire di più su come configurare l'oggetto Secret per il certificato CA, consulta Configurare l'autorità di certificazione.

    Per una spiegazione dei campi e un elenco completo di quelli che puoi aggiungere al campo spec, consulta Campi RootSync.

    Questo manifest crea un oggetto RootSync che utilizza un'immagine OCI come origine.

    Helm

    # root-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: ROOT_SYNC_NAME
      namespace: config-management-system
    spec:
      sourceType: helm
      sourceFormat: ROOT_FORMAT
      helm:
        repo: ROOT_HELM_REPOSITORY
        chart: HELM_CHART_NAME
        version: HELM_CHART_VERSION
        releaseName: HELM_RELEASE_NAME
        namespace: HELM_RELEASE_NAMESPACE
        values:
          foo:
            bar: VALUE_1
          baz:
          - qux: VALUE_2
            xyz: VALUE_3
        includeCRDs: HELM_INCLUDE_CRDS
        auth: ROOT_AUTH_TYPE
          gcpServiceAccountEmail: ROOT_EMAIL
          secretRef:
            name: ROOT_SECRET_NAME
        caCertSecretRef:
          name: ROOT_CA_CERT_SECRET_NAME
    

    Sostituisci quanto segue:

    • ROOT_SYNC_NAME: aggiungi il nome dell'oggetto RootSync.
    • ROOT_FORMAT: aggiungi unstructured per utilizzare un repository non strutturato o aggiungi hierarchy per utilizzare un repository gerarchico. Questi valori sono sensibili alle maiuscole. Questo campo è facoltativo e il valore predefinito è hierarchy. Ti consigliamo di aggiungere unstructured perché questo formato ti consente di organizzare le configurazioni nel modo più conveniente per te.
    • ROOT_HELM_REPOSITORY: l'URL del repository Helm da utilizzare come repository radice. Puoi inserire gli URL utilizzando il protocollo HTTPS o SSH. Ad esempio, https://github.com/GoogleCloudPlatform/anthos-config-management-samples utilizza il protocollo HTTPS. Questo campo è obbligatorio.
    • HELM_CHART_NAME: aggiungi il nome del tuo grafico Helm. Questo campo è obbligatorio.
    • HELM_CHART_VERSION: la versione del grafico. Questo campo è facoltativo. Se non viene specificato alcun valore, viene utilizzata l'ultima versione.
    • HELM_RELEASE_NAME: il nome della release di Helm. Questo campo è facoltativo.
    • HELM_RELEASE_NAMESPACE: lo spazio dei nomi di destinazione per una release. Imposta uno spazio dei nomi solo per le risorse che contengono namespace: {{ .Release.Namespace }} nei relativi modelli. Questo campo è facoltativo. Se non viene specificato alcun valore, viene utilizzato lo spazio dei nomi predefinito config-management-system.
    • HELM_INCLUDE_CRDS: impostalo su true se vuoi che il modello Helm generi anche una CustomResourceDefinition. Questo campo è facoltativo. Se non viene specificato alcun valore, il valore predefinito è false e non verrà generato alcun CRD.
    • VALUE: valori da utilizzare al posto dei valori predefiniti che accompagnano il grafico Helm. Formatta questo campo nello stesso modo del file values.yaml del grafico Helm. Questo campo è facoltativo.
    • ROOT_AUTH_TYPE: aggiungi uno dei seguenti tipi di autenticazione:

      • none: Non utilizzare l'autenticazione
      • token: utilizza un nome utente e una password per accedere a un repository Helm privato.
      • gcenode: utilizza l'account di servizio predefinito di Compute Engine per accedere a un'immagine in Artifact Registry. Seleziona questa opzione solo se Workload Identity Federation per GKE non è abilitata nel tuo cluster.
      • gcpserviceaccount: utilizza un account di servizio Google per accedere a un'immagine.

      Questo campo è obbligatorio.

    • ROOT_EMAIL: se hai aggiunto gcpserviceaccount come ROOT_AUTH_TYPE, aggiungi l'indirizzo email del account di servizio Google. Ad esempio acm@PROJECT_ID.iam.gserviceaccount.com.

    • ROOT_SECRET_NAME: aggiungi il nome del secret se token è ROOT_AUTH_TYPE. Questo campo è facoltativo.

    • ROOT_CA_CERT_SECRET_NAME: aggiungi il nome del tuo secret. Se questo campo è impostato, il provider Helm deve utilizzare un certificato emesso da questa autorità di certificazione (CA). Il secret deve contenere il certificato CA in una chiave denominata cert. Questo campo è facoltativo.

    Per scoprire di più su come configurare l'oggetto Secret per il certificato CA, consulta Configurare l'autorità di certificazione.

    Per una spiegazione dei campi e un elenco completo di quelli che puoi aggiungere al campo spec, consulta Campi RootSync.

    Questo manifest crea un oggetto RootSync che utilizza Helm come origine.

  3. Per creare la configurazione di Config Sync, crea un oggetto RootSync applicando il manifest:

    kubectl apply -f root-sync.yaml
    
  4. Per verificare che le modifiche siano state applicate, visualizza l'oggetto RootSync:

    kubectl describe rootsync ROOT_SYNC_NAME -n config-management-system
    

Esegui l'upgrade di Config Controller

Poiché Config Controller è un servizio gestito, Google esegue automaticamente l'upgrade. Per informazioni dettagliate sulle nuove funzionalità e per scoprire quali versioni di Config Sync, Policy Controller e Config Connector utilizza Config Controller, consulta le note di rilascio di Config Controller.

Elimina l'istanza Config Controller

Se decidi di interrompere l'utilizzo di un'istanza di Config Controller, pulisci tutte le risorse Config Connector create prima di eliminare il cluster Config Controller stesso.

L'eliminazione dell'istanza di Config Controller senza prima eliminare le risorse di cui è stato eseguito il provisioning lascia le risorse in stato abbandonato. Le risorse esistono ancora in Google Cloud (e comportano addebiti di fatturazione), ma non vengono gestite dalla configurazione dichiarativa.

Dopo aver eliminato tutte le risorse, elimina il cluster Config Controller:

gcloud anthos config controller delete \
    --location=LOCATION CONFIG_CONTROLLER_NAME

Considerazioni sulla produzione

Quando passi alla produzione, devi prima esaminare le considerazioni sull'alta disponibilità per Config Controller.

Passaggi successivi