Gestisci le risorse con Config Controller

Scopri come creare un'istanza Config Controller preinstallata con Config Connector, Policy Controller e Config Sync. Ora scopri come utilizzare l'istanza completando le attività seguenti:

  • Utilizzare Config Connector per creare e gestire una risorsa Google Cloud.
  • Crea un vincolo di Policy Controller per applicare un criterio e rilevare una violazione del criterio prima di eseguirne il deployment.
  • Per impostare GitOps, configura Config Sync per la sincronizzazione da un repository di esempio contenente una risorsa Google Cloud.

Prima di iniziare

  1. 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 gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Installa Google Cloud CLI.
  3. Per initialize gcloud CLI, esegui questo comando:

    gcloud init
  4. Crea o seleziona un progetto Google Cloud.

    • Crea un progetto Google Cloud:

      gcloud projects create PROJECT_ID

      Sostituisci PROJECT_ID con 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_ID con il nome del tuo progetto Google Cloud.

  5. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  6. Abilita le API KRM, API GKE, Resource Manager e Service Usage.

    gcloud services enable krmapihosting.googleapis.com  container.googleapis.com  cloudresourcemanager.googleapis.com  serviceusage.googleapis.com
  7. Installa Google Cloud CLI.
  8. Per initialize gcloud CLI, esegui questo comando:

    gcloud init
  9. Crea o seleziona un progetto Google Cloud.

    • Crea un progetto Google Cloud:

      gcloud projects create PROJECT_ID

      Sostituisci PROJECT_ID con 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_ID con il nome del tuo progetto Google Cloud.

  10. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  11. Abilita le API KRM, API GKE, Resource Manager e Service Usage.

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

Crea un'istanza Config Controller

  1. Nel terminale, crea un'istanza di Autopilot Config Controller:

    gcloud anthos config controller create cc-example \
        --location=us-central1 \
        --full-management
    

    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.
    
  2. Per configurare kubectl in modo che comunichi con l'endpoint di Config Controller, recupera le credenziali di autenticazione e le informazioni sull'endpoint richieste:

    gcloud anthos config controller get-credentials cc-example \
        --location us-central1
    
  3. Verifica che l'istanza sia stata creata visualizzando l'elenco delle istanze di Config Controller:

    gcloud anthos config controller list --location=us-central1
    

    L'output è il seguente:

    NAME                 LOCATION                 STATE
    cc-example           us-central1              RUNNING
    

Concedi a Config Controller l'autorizzazione richiesta

In questa sezione autorizzi Config Controller a gestire le risorse Google Cloud:

  1. Imposta una variabile di ambiente per l'email dell'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 criteri:

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

    Sostituisci PROJECT_ID con 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
    

Utilizza l'istanza di Config Controller

Le sezioni seguenti spiegano come utilizzare l'istanza di Config Controller.

Crea una risorsa Google Cloud con Config Connector

Con la tua istanza di Config Controller, puoi sfruttare Config Connector per gestire molti servizi e risorse di Google Cloud utilizzando gli strumenti e le API di Kubernetes. In questa sezione utilizzerai Config Controller per creare una risorsa PubSubTopic.

Per creare un argomento Pub/Sub utilizzando Config Connector, completa i passaggi seguenti:

  1. Utilizza Config Connector per abilitare l'API Pub/Sub:

    1. Utilizzando il tuo editor di testo preferito, crea un file denominato enable-pubsub.yaml e copia al suo interno il seguente 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_ID
      

      Sostituisci PROJECT_ID con l'ID progetto.

    2. Per abilitare l'API Pub/Sub, applica il manifest al tuo cluster:

      kubectl apply -f enable-pubsub.yaml
      

      L'abilitazione di questa API potrebbe richiedere diversi minuti.

  2. Utilizza Config Connector per creare un argomento Pub/Sub:

    1. Crea un file denominato pubsub-topic.yaml e copia al suo interno il seguente YAML:

      # 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-control
      
    2. Crea l'argomento Pub/Sub:

      kubectl apply -f pubsub-topic.yaml
      
  3. Verifica che Config Controller abbia creato la tua risorsa in Google Cloud visualizzando l'elenco di argomenti Pub/Sub:

    gcloud pubsub topics list
    

    L'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 consente di utilizzare i vincoli Policy Controller e Policy Controller. Nell'ambito dell'installazione di Policy Controller, Config Controller installa automaticamente la libreria dei modelli di vincolo. Puoi utilizzare i modelli in questa libreria per applicare una serie di controlli di sicurezza e conformità comuni sulle tue istanze Config Controller.

In questa sezione creerai un vincolo utilizzando il modello di vincolo GCPStorageLocationConstraintV1. Questo modello consente di limitare la località in cui puoi creare bucket Cloud Storage. Il vincolo creato 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 i migliori prezzi e prestazioni.

Per creare il vincolo:

  1. Crea un file denominato bucket-constraint.yaml e copia al suo interno il seguente file 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-central1
    
  2. Crea il vincolo:

    kubectl apply -f bucket-constraint.yaml
    

    L'output è il seguente:

    gcpstoragelocationconstraintv1.constraints.gatekeeper.sh/storage-only-in-us-central1 created`
    
  3. Dimostra che il vincolo funziona provando a utilizzare Config Connector per creare una risorsa StorageBucket in asia-southeast1:

    1. Crea un file denominato asia-storage-bucket.yaml e copia il seguente YAML al suo interno:

      # 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-southeast1
      
    2. Prova a creare il bucket Cloud Storage:

      kubectl apply -f asia-storage-bucket.yaml
      

      L'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"]
      

Configura GitOps con Config Sync

Config Sync è un servizio GitOps che consente di sincronizzare l'istanza di Config Controller con configurazioni, criteri e risorse Google 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 dell'origine, puoi contribuire a garantire che le 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. Sincronizzando l'istanza da questo repository, la risorsa viene creata e applicata automaticamente all'istanza. Puoi scegliere di creare le risorse utilizzando Config Sync (anziché applicare direttamente la risorsa) se vuoi utilizzare un flusso di lavoro GitOps.

  1. Per eseguire la sincronizzazione da GitHub, configura Cloud NAT. Devi eseguire questa operazione perché l'istanza di Config Controller è supportata da un cluster privato di Google Kubernetes Engine (GKE) Enterprise e i nodi del cluster privato non hanno accesso a internet in uscita:

    1. Creare un router Cloud NAT. Hai bisogno di questo router per configurare il gateway NAT.

      gcloud compute routers create cc-nat-router \
          --network default \
          --region us-central1
      

      L'output è simile al seguente:

      Creating router [cc-nat-router]...done.
      NAME           REGION       NETWORK
      cc-nat-router  us-central1  default
      
    2. Configura un gateway NAT sul router 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-ips
      

      L'output è il seguente:

      Creating NAT [cc-nat-config] in router [cc-nat-router]...done.
      
  2. Per configurare l'istanza di Config Controller per la sincronizzazione da un repository di esempio, crea un file denominato cc-rootsync.yaml e copia al suo interno il seguente file 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: none
    
  3. Applica la configurazione:

    kubectl apply -f cc-rootsync.yaml
    

    Una volta eseguita la sincronizzazione dell'istanza dal repository, Config Sync crea l'argomento Pub/Sub e lo applica all'istanza di Config Controller.

  4. Verifica che Config Sync stia sincronizzando il repository Git con la tua istanza di Config Controller:

    nomos status --contexts gke_PROJECT_ID_us-central1_krmapihost-cc-example
    

    L'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   715b429
    

    Se non vedi questo output, attendi un paio di minuti e riprova.

  5. Verifica che Config Controller abbia creato la risorsa:

    gcloud pubsub topics list
    

    L'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-topic
    

    In questo output, puoi vedere il 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

  1. Elimina la risorsa PubSubTopic di Config Connector:

    kubectl delete -f pubsub-topic.yaml
    
  2. Elimina il vincolo di Policy Controller:

    kubectl delete -f bucket-constraint.yaml
    
  3. Elimina il router NAT:

    gcloud compute routers delete cc-nat-router \
        --project=PROJECT_ID \
        --region=us-central1
    

    Premi y quando richiesto.

  4. Elimina la risorsa Pub/Sub creata da Config Sync:

    kubectl delete PubSubTopic pubsub-topic-sample-sync -n config-control
    
  5. Elimina la risorsa RootSync:

    kubectl delete rootsync root-sync -n config-management-system
    
  6. Utilizzando il tuo editor di testo preferito, elimina tutti i file YAML che hai creato:

    • enable-pubsub.yaml
    • pubsub-topic.yaml
    • bucket-constraint.yaml
    • asia-storage-bucket.yaml
    • cc-rootsync.yaml
  7. Elimina l'istanza di Config Controller:

    gcloud anthos config controller delete --location=us-central1 cc-example
    

    Premi y quando richiesto.

Passaggi successivi