Installa Policy Controller

Questa pagina mostra come installare Policy Controller. Policy Controller controlla, controlla e applica la conformità dei cluster con criteri relativi a sicurezza, normative o regole aziendali.

Policy Controller è disponibile se utilizzi la versione Google Kubernetes Engine (GKE) Enterprise. Per ulteriori informazioni, consulta i prezzi della versione Google Kubernetes Engine (GKE) Enterprise.

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti attività:

  1. Installa e inizializza Google Cloud CLI, che fornisce i comandi gcloud, gsutil, kubectl e nomos utilizzati in queste istruzioni. Se hai già installato gcloud CLI, ottieni la versione più recente eseguendo gcloud components update. Se utilizzi Cloud Shell, Google Cloud CLI è preinstallato.
  2. Assicurati che l'Open Policy Agent Gatekeeper open source non sia installato sul tuo cluster. Se è presente, disinstalla Gatekeeper prima di installare Policy Controller.
  3. Abilita l'API GKE Enterprise.

    Abilita l'API GKE Enterprise

  4. Abilita l'API Policy Controller.

    Abilita l'API Policy Controller

  5. Crea o assicurati di avere accesso a un cluster che esegue una versione Kubernetes 1.14.x o successiva. Policy Controller potrebbe sembrare eseguito su versioni di Kubernetes precedenti alla 1.14.x, ma il prodotto non si comporta correttamente.

  6. Concedi i ruoli IAM richiesti all'utente che registra il cluster.

  7. Se prevedi di utilizzare Google Cloud CLI per configurare Policy Controller, registra il tuo cluster in un parco risorse ora. Se prevedi di utilizzare la console Google Cloud, registra i cluster quando installi Policy Controller.

  8. Se utilizzi cluster collegati a GKE, assicurati che il tuo cluster AKS non abbia il componente aggiuntivo Azure Policy ed evita di etichettare gli spazi dei nomi con la chiave control-plane.

  9. Se utilizzi Google Distributed Cloud on VMware o bare metal, assicurati di installare Policy Controller su un cluster utente. Policy Controller non può essere installato su un cluster di amministrazione.

Installazione di Policy Controller

A partire dalla versione 1.16.0, se utilizzi Google Cloud CLI, puoi installare e gestire Policy Controller direttamente (opzione consigliata) o tramite l'oggetto ConfigManagement.

Console

Per installare Policy Controller nella console Google Cloud, completa questi passaggi:

  1. Nella console Google Cloud, vai alla pagina Criteri di GKE Enterprise nella sezione Gestione della postura.

    Vai al criterio

  2. Seleziona Installa Policy Controller.

  3. Nel riquadro Installazione di Policy Controller, seleziona una delle seguenti opzioni di installazione:

    • Per installare Policy Controller su tutti i cluster in un parco risorse:

      1. Mantieni selezionata l'opzione Installa nel tuo parco risorse.

        Se nel tuo progetto non è presente un parco risorse, puoi crearne uno nel passaggio successivo.

      2. Se non ne hai ancora uno, scegli un nome per il parco risorse.

      3. Seleziona Attiva Policy Controller.

    • Per installare Policy Controller su singoli cluster:

      1. Seleziona Installa su singoli cluster.

      2. Nella tabella Cluster disponibili, seleziona i cluster su cui vuoi installare Policy Controller.

      3. Seleziona Attiva Policy Controller.

Si aprirà la scheda Impostazioni di Policy Controller. Quando Policy Controller è installato e configurato sui tuoi cluster, le colonne dello stato mostrano Installato . Questa operazione può richiedere diversi minuti.

gcloud Policy Controller

Abilita Policy Controller eseguendo questo comando:

gcloud container fleet policycontroller enable \
    --memberships=MEMBERSHIP_NAME

Puoi impostare campi aggiuntivi per configurare Policy Controller. Ad esempio, potresti voler indicare a Policy Controller di escludere alcuni spazi dei nomi dall'applicazione. Per un elenco completo dei campi che puoi configurare, consulta la documentazione di Google Cloud CLI di Policy Controller oppure esegui gcloud container fleet policycontroller enable --help.

gcloud ConfigManagement

  1. Prepara la configurazione creando un nuovo manifest apply-spec.yaml o utilizzando un manifest esistente. L'utilizzo di un manifest esistente ti consente di configurare il cluster con le stesse impostazioni utilizzate da un altro cluster.

    Crea nuovo manifest

    Per configurare Policy Controller con nuove impostazioni per il tuo cluster, crea un file denominato apply-spec.yaml e copia al suo interno il seguente file YAML:

    # apply-spec.yaml
    
    applySpecVersion: 1
    spec:
      policyController:
        # Set to true to install and enable Policy Controller
        enabled: true
        # Uncomment to prevent the template library from being installed
        # templateLibraryInstalled: false
        # Uncomment to enable support for referential constraints
        # referentialRulesEnabled: true
        # Uncomment to disable audit, adjust value to set audit interval
        # auditIntervalSeconds: 0
        # Uncomment to log all denies and dryrun failures
        # logDeniesEnabled: true
        # Uncomment to enable mutation
        # mutationEnabled: true
        # Uncomment to exempt namespaces
        # exemptableNamespaces: ["namespace-name"]
        # Uncomment to change the monitoring backends
        # monitoring:
        #     backends:
        #     - cloudmonitoring
        #     - prometheus
      # ...other fields...
    

    Devi aggiungere un campo spec.policyController e impostare il valore di enabled su true. Puoi scegliere di abilitare altre funzionalità di Policy Controller. Tuttavia, il supporto dei vincoli referenziali è disabilitato per impostazione predefinita. Prima di abilitarla, assicurati di acquisire familiarità con le caveat sull'eventuale coerenza.

    Utilizza manifest esistente

    Per configurare il cluster con le stesse impostazioni utilizzate da un altro cluster, recupera le impostazioni da un cluster registrato:

    gcloud alpha container fleet config-management fetch-for-apply \
         --membership=MEMBERSHIP_NAME \
         --project=PROJECT_ID \
         > CONFIG_YAML_PATH
    

    Sostituisci quanto segue:

    • MEMBERSHIP_NAME: il nome dell'appartenenza del cluster registrato con le impostazioni di Policy Controller che vuoi utilizzare
    • PROJECT_ID: il tuo ID progetto
    • CONFIG_YAML_PATH: il percorso del file apply-spec.yaml
  2. Applica il file apply-spec.yaml:

    gcloud beta container fleet config-management apply \
        --membership=MEMBERSHIP_NAME \
        --config=CONFIG_YAML \
        --project=PROJECT_ID
    

    Sostituisci quanto segue:

    • MEMBERSHIP_NAME: il nome dell'appartenenza del cluster registrato con le impostazioni di Policy Controller che vuoi utilizzare.
    • CONFIG_YAML: aggiungi il percorso al tuo file apply-spec.yaml.
    • PROJECT_ID: aggiungi il tuo ID progetto.

Il pod viene creato e Policy Controller avvia il controllo e l'applicazione dei vincoli.

Verificare l'installazione di Policy Controller

Dopo aver installato Policy Controller, puoi verificare che l'operazione sia stata completata.

Console

Completa i seguenti passaggi:

  1. Nella console Google Cloud, vai alla pagina Criteri di GKE Enterprise nella sezione Gestione della postura.

    Vai al criterio

  2. Nella tabella dei cluster della scheda Impostazioni, controlla la colonna Stato Policy Controller. Un'installazione eseguita correttamente ha lo stato Installato .

gcloud Policy Controller

Esegui questo comando:

gcloud container fleet policycontroller describe --memberships=MEMBERSHIP_NAME

Un'installazione eseguita correttamente mostra membershipStates: MEMBERSHIP_NAME: policycontroller: state: ACTIVE.

gcloud ConfigManagement

Esegui questo comando:

gcloud beta container fleet config-management status \
    --project=PROJECT_ID

Sostituisci PROJECT_ID con l'ID del progetto.

Dovresti vedere un output simile all'esempio seguente:

Name          Status  Last_Synced_Token  Sync_Branch  Last_Synced_Time      Policy_Controller
CLUSTER_NAME  SYNCED  a687c2c            1.0.0        2021-02-17T00:15:55Z  INSTALLED

Un'installazione eseguita correttamente è associata allo stato INSTALLED nella colonna Policy Controller.

Verifica l'installazione della libreria di modelli di vincolo

Quando installi Policy Controller, la libreria dei modelli di vincolo viene installata per impostazione predefinita. Il completamento dell'installazione può richiedere diversi minuti. Puoi verificare che la raccolta dei modelli sia stata completata correttamente.

Console

Completa i seguenti passaggi:

  1. Nella console Google Cloud, vai alla pagina Criteri di GKE Enterprise nella sezione Gestione della postura.

    Vai al criterio

  2. Nella scheda Impostazioni, nella tabella dei cluster, seleziona il numero elencato nella colonna Bundle installati. Nel riquadro Stato dei contenuti del criterio, un'installazione della libreria di modelli riuscita ha lo stato Installato .

gcloud

Esegui questo comando:

kubectl get constrainttemplates

Dovresti vedere un output simile all'esempio seguente:

NAME                                      AGE
k8sallowedrepos                           84s
k8scontainerlimits                        84s
k8spspallowprivilegeescalationcontainer   84s
...[OUTPUT TRUNCATED]...

Quando un singolo modello di vincolo è installato correttamente, il campo status.created è true.

Configura valori predefiniti a livello di parco risorse

Se hai abilitato la versione Google Kubernetes Engine (GKE) Enterprise, puoi abilitare e configurare Policy Controller come impostazione predefinita a livello di parco risorse per i tuoi cluster. Ciò significa che per ogni nuovo cluster GKE su Google Cloud registrato durante la creazione del cluster sarà abilitato Policy Controller sul cluster con le impostazioni specificate. Puoi trovare ulteriori informazioni sulla configurazione predefinita del parco risorse in Gestire le funzionalità a livello di parco risorse.

Per configurare valori predefiniti a livello di parco risorse per Policy Controller, completa i seguenti passaggi:

Console

  1. Nella console Google Cloud, vai alla pagina Gestore funzionalità.

    Vai a Gestore funzionalità

  2. Nel riquadro Criterio, fai clic su Configura.

  3. Rivedi le tue impostazioni a livello di parco risorse. Tutti i nuovi cluster che registri nel parco ereditano queste impostazioni.

  4. (Facoltativo) Per modificare le impostazioni predefinite, fai clic su Personalizza le impostazioni del parco risorse. Nella finestra di dialogo visualizzata, procedi nel seguente modo:

    1. Nella sezione Aggiungi/Modifica pacchetti di criteri, includi o escludi un bundle di criteri facendo clic sul pulsante di attivazione/disattivazione pertinente.
    2. Nella sezione Modifica configurazione di Policy Controller, segui questi passaggi:
      1. Per attivare il hook di mutazione, seleziona la casella di controllo Attiva webhook di mutazione. Questa funzionalità non è compatibile con i cluster Autopilot.
      2. Nella casella Intervallo di audit, inserisci il periodo in secondi tra due controlli consecutivi.
      3. Nella casella Spazi dei nomi esenti, inserisci un elenco di spazi dei nomi. Policy Controller ignora gli oggetti in questi spazi dei nomi.
      4. Per abilitare i vincoli referenziali, seleziona la casella di controllo Abilita modelli di vincolo che fanno riferimento a oggetti diversi dall'oggetto attualmente valutato.
      5. Nell'elenco Versione, seleziona la versione di Policy Controller che vuoi utilizzare.
    3. Fai clic su Salva modifiche.
  5. Fai clic su Configura.

  6. Nella finestra di dialogo di conferma, fai clic su Conferma. Se non hai abilitato in precedenza Policy Controller, fai clic su Conferma per attivare l'API anthospolicycontroller.googleapis.com.

  7. (Facoltativo) Sincronizza i cluster esistenti con le impostazioni predefinite:

    1. Nell'elenco Cluster nel parco risorse, seleziona i cluster che vuoi sincronizzare.
    2. Fai clic su Sincronizza con le impostazioni del parco risorse e fai clic su Conferma nella finestra di dialogo di conferma visualizzata. Il completamento di questa operazione può richiedere alcuni minuti.

gcloud

  1. Crea un file denominato fleet-default.yaml contenente le configurazioni predefinite per Policy Controller. Il campo installSpec è obbligatorio per abilitare i valori predefiniti a livello di parco risorse. Questo esempio mostra le opzioni che puoi configurare:

    # cat fleet-default.yaml
    
     policyControllerHubConfig:
      installSpec: INSTALL_SPEC_ENABLED 
      # Uncomment to set default deployment-level configurations.
      # deploymentConfigs:
      #   admission:
      #     containerResources:
      #       limits:
      #        cpu: 1000m
      #         memory: 8Gi
      #       requests:
      #         cpu: 500m
      #         memory: 4Gi
      # Uncomment to set policy bundles that you want to install by default.
      # policyContent:
      #   bundles:
      #     cis-k8s-v1.5.1:
      #       exemptedNamespaces:
      #       - "namespace-name"
      # Uncomment to exempt namespaces from admission.
      # exemptableNamespaces:
      # - "namespace-name"
      # Uncomment to enable support for referential constraints
      # referentialRulesEnabled: true
      # Uncomment to disable audit, adjust value to set audit interval
      # auditIntervalSeconds: 0
      # Uncomment to log all denies and dryrun failures
      # logDeniesEnabled: true
      # Uncomment to enable mutation
      # mutationEnabled: true
      # Uncomment to adjust the value to set the constraint violation limit
      # constraintViolationLimit: 20
      # ... other fields ...
    
  2. Applica la configurazione predefinita al tuo parco risorse:

    gcloud container fleet policycontroller enable \
      --fleet-default-member-config=fleet-default.yaml
    
  3. Per verificare che la configurazione sia stata applicata, esegui questo comando:

    gcloud container fleet policycontroller describe
    
  4. Per rimuovere la configurazione predefinita a livello di parco risorse, esegui questo comando:

    gcloud container fleet policycontroller enable \
      --no-fleet-default-member-config
    

Interazioni di Policy Controller con Config Sync

Se utilizzi Policy Controller con Config Sync, tieni presente le seguenti interazioni con le risorse archiviate nella tua fonte attendibile, ad esempio un repository Git, che vengono sincronizzate da Config Sync:

  • Non puoi sincronizzare un modello di vincolo che fa parte anche della libreria dei modelli, a meno che la libreria dei modelli di vincolo non sia disabilitata.

  • Se vuoi sincronizzare la risorsa Config archiviata nello spazio dei nomi gatekeeper-system, devi definire la risorsa Config solo nella fonte attendibile. Non è necessario definire il valore Namespace gatekeeper-system.

Gestire la libreria dei modelli di vincolo

Per informazioni su come disinstallare o installare i modelli di vincolo, i vincoli associati o la libreria dei modelli di vincolo, consulta Creare vincoli.

Escludi spazi dei nomi esenti dall'applicazione

Puoi configurare Policy Controller in modo da ignorare gli oggetti all'interno di uno spazio dei nomi. Per maggiori informazioni, consulta Escludere gli spazi dei nomi da Policy Controller.

Modifica risorse

Policy Controller funge anche da webhook mutante. Per maggiori informazioni, consulta la pagina relativa alle risorse mutuate.

Visualizza la versione di Policy Controller

Per scoprire quale versione di Gatekeeper Policy Controller sta utilizzando, visualizza il tag immagine eseguendo questo comando:

kubectl get deployments -n gatekeeper-system gatekeeper-controller-manager \
  -o="jsonpath={.spec.template.spec.containers[0].image}"

Il tag (o hash) Git utilizzato per creare il Gatekeeper e il numero di versione dell'operatore ConfigManagement sono inclusi nel tag immagine come segue:

.../gatekeeper:VERSION_NUMBER-GIT_TAG.gBUILD_NUMBER

Ad esempio, per la seguente immagine:

gcr.io/config-management-release/gatekeeper:anthos1.3.2-480baac.g0
  • anthos1.3.2 è il numero di versione.
  • 480baac è il tag Git.
  • 0 è il numero di build.

Esegui l'upgrade di Policy Controller

Prima di eseguire l'upgrade di Policy Controller, consulta le note di rilascio per conoscere i dettagli sulle modifiche da una versione all'altra.

Per eseguire l'upgrade di Policy Controller, completa i seguenti passaggi:

Console

  1. Nella console Google Cloud, vai alla pagina Criteri di GKE Enterprise nella sezione Gestione della postura.

    Vai al criterio

  2. Nella scheda Impostazioni, accanto al cluster di cui vuoi eseguire l'upgrade della versione, seleziona Modifica configurazione.
  3. Espandi il menu Modifica configurazione di Policy Controller.
  4. Nell'elenco a discesa Versione, seleziona la versione a cui vuoi eseguire l'upgrade.
  5. Fai clic su Salva modifiche.

gcloud

Esegui questo comando:

gcloud container fleet policycontroller update \
  --version=VERSION \
  --membership=MEMBERSHIP_NAME

Sostituisci quanto segue:

  • VERSION: la versione a cui vuoi eseguire l'upgrade
  • MEMBERSHIP_NAME: il nome dell'appartenenza che hai scelto quando hai registrato il cluster. Puoi trovare il nome dell'abbonamento eseguendo gcloud container fleet memberships list.

Disinstalla Policy Controller

Segui questi passaggi per disinstallare Policy Controller dai cluster.

Console

Per disabilitare Policy Controller sui cluster, completa le attività seguenti:

  1. Nella console Google Cloud, vai alla pagina Criteri di GKE Enterprise nella sezione Gestione della postura.

    Vai al criterio

  2. Nella tabella dei cluster della scheda Impostazioni, seleziona Modifica nella colonna Modifica configurazione.
  3. Nel riquadro del cluster, scorri verso il basso ed espandi il menu Informazioni su Policy Controller.
  4. Seleziona Disinstalla Policy Controller.
  5. Conferma la disinstallazione seguendo le istruzioni nella finestra di dialogo di conferma e selezionando Conferma.

Quando Policy Controller viene disinstallato, le colonne dello stato mostrano Non installato .

gcloud Policy Controller

Per disinstallare Policy Controller, esegui questo comando:

gcloud container fleet policycontroller disable \
  --memberships=MEMBERSHIP_NAME

Sostituisci MEMBERSHIP_NAME con il nome dell'appartenenza del cluster registrato per disabilitare Policy Controller. Puoi specificare più abbonamenti separati da una virgola.

gcloud ConfigManagement

Per disinstallare Policy Controller:

  1. Modifica la configurazione dell'operatore ConfigManagement nel file apply-spec.yaml e imposta policyController.enabled su false.

  2. Applica le modifiche nel file apply-spec.yaml:

     gcloud beta container fleet config-management apply \
         --membership=CLUSTER_NAME \
         --config=CONFIG_YAML \
         --project=PROJECT_ID
    

    Sostituisci quanto segue:

    • CLUSTER_NAME: aggiungi il cluster registrato a cui vuoi applicare questa configurazione.
    • CONFIG_YAML: aggiungi il percorso al tuo file apply-spec.yaml.
    • PROJECT_ID: aggiungi il tuo ID progetto.

Rimuovi l'operatore ConfigManagement

Se hai installato Policy Controller tramite l'oggetto ConfigManagement, devi anche rimuovere l'operatore ConfigManagement dai cluster.

Per rimuovere l'operatore ConfigManagement, esegui questi comandi:

  1. Elimina l'oggetto ConfigManagement dal cluster:

    kubectl delete configmanagement --all
    

    Dopo l'esecuzione di questo comando, si verifica quanto segue:

    • Tutti i ClusterRole e ClusterRoleBinding creati nel cluster dall'operatore ConfigManagement vengono eliminati dal cluster.
    • Tutte le configurazioni del controller di ammissione installate dall'operatore ConfigManagement vengono eliminate.
    • I contenuti dello spazio dei nomi config-management-system vengono eliminati, ad eccezione del Secret git-creds, e, per le versioni di Policy Controller che iniziano con 1.9.0, il deployment config-management-operator e il pod config-management-operator. L'operatore ConfigManagement non può funzionare senza lo spazio dei nomi config-management-system. Tutte le CustomResourceDefinitions (CRD) create o modificate dal controller dell'operatore ConfigManagement vengono rimosse dai cluster in cui sono state create o modificate. Il CRD necessario per eseguire l'operatore ConfigManagement esiste ancora perché dal punto di vista di Kubernetes è stato aggiunto dall'utente che ha installato l'operatore ConfigManagement. Le informazioni sulla rimozione di questi componenti sono descritte nel passaggio successivo.
  2. Se devi conservare il secret di git-creds, fallo ora:

    kubectl -n config-management-system get secret git-creds -o yaml
    
  3. Elimina lo spazio dei nomi config-management-system:

    kubectl delete ns config-management-system
    
  4. Elimina lo spazio dei nomi config-management-monitoring:

    kubectl delete ns config-management-monitoring
    
  5. Elimina l'oggetto ConfigManagement CustomResourceDefinition:

    kubectl delete crd configmanagements.configmanagement.gke.io
    

RBAC e autorizzazioni di Policy Controller

Policy Controller include carichi di lavoro con privilegi elevati. Le autorizzazioni per questi carichi di lavoro sono descritte nella documentazione operativa di Open Policy Agent Gatekeeper.

Richieste di risorse di Policy Controller

La tabella seguente elenca i requisiti delle risorse Kubernetes per ogni versione supportata di Policy Controller. Le richieste di risorse per l'operatore ConfigManagement si applicano solo se hai installato Policy Controller tramite l'oggetto ConfigManagement.

Componente CPU Memoria
Operatore ConfigManagement 100 m 100 mi
Policy Controller 100 m 256 miglia

Passaggi successivi