Risoluzione dei problemi di Policy Controller

Questa pagina mostra come risolvere i problemi relativi a Policy Controller.

Suggerimenti di carattere generale

La sezione seguente fornisce consigli generali per la risoluzione dei problemi relativi a Policy Controller.

Arresta Policy Controller

Se Policy Controller causa problemi nel cluster, puoi interrompi Policy Controller durante ed esaminare il problema.

Esamina le metriche

Analisi delle metriche di Policy Controller può aiutarti a diagnosticare i problemi relativi a Policy Controller.

Verifica installazione

Puoi verificare se Policy Controller e la libreria dei modelli di vincolo sono installati correttamente.

Scollega Policy Controller

In rari casi, potrebbe essere necessario scollegare Policy Controller dai cluster. Questa operazione disattiva completamente la gestione di Policy Controller. Prova interrompendo temporaneamente Policy Controller per vedere se riesci a risolvere i problemi prima di utilizzare il comando detach.

  1. Scollega Policy Controller in tutto il parco risorse:

    gcloud container fleet policycontroller detach
    
  2. Ricollega Policy Controller:

    gcloud container fleet policycontroller enable
    

Errore durante la creazione di un modello di vincolo

Se viene visualizzato un errore che menziona un disallowed ref, verifica di averlo attivato vincoli referenziali. Ad esempio, se utilizzi data.inventory in una modello di vincolo senza abilitare vincoli di riferimento l'errore è simile al seguente:

admission webhook "validation.gatekeeper.sh" denied the request: check refs failed on module {templates["admission.k8s.gatekeeper.sh"]["MyTemplate"]}: disallowed ref data.inventory...

Vincolo non applicato

La seguente sezione fornisce indicazioni per la risoluzione dei problemi se sospetti o conosci se i vincoli non vengono applicati.

Controlla se il vincolo è applicato

Se temi che il vincolo non venga applicato in modo forzato, puoi controllare spec.status del vincolo e del relativo modello. Per controllare esegui questo comando:

kubectl describe CONSTRAINT_TEMPLATE_NAME CONSTRAINT_NAME

Sostituisci quanto segue:

  • CONSTRAINT_TEMPLATE_NAME: il nome del vincolo che vuoi controllare. Ad esempio, K8sNoExternalServices.
  • CONSTRAINT_NAME: il valore Name del vincolo che vuoi per controllare.

    Se necessario, esegui kubectl get constraint per vedere quali modelli di vincolo e i vincoli siano installati sul sistema.

Nell'output del comando kubectl describe, prendi nota dei valori nella metadata.generation e status.byPod.observedGeneration. Nella nell'esempio seguente questi valori sono in grassetto:

Name:         no-internet-services
Namespace:
API Version:  constraints.gatekeeper.sh/v1beta1
Kind:         K8sNoExternalServices
Metadata:
  Creation Timestamp:  2021-12-03T19:00:06Z
  Generation:          1
  Managed Fields:
    API Version:  constraints.gatekeeper.sh/v1beta1
    Fields Type:  FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          f:config.k8s.io/owning-inventory:
          f:configmanagement.gke.io/cluster-name:
          f:configmanagement.gke.io/managed:
          f:configmanagement.gke.io/source-path:
          f:configmanagement.gke.io/token:
          f:configsync.gke.io/declared-fields:
          f:configsync.gke.io/git-context:
          f:configsync.gke.io/manager:
          f:configsync.gke.io/resource-id:
        f:labels:
          f:app.kubernetes.io/managed-by:
          f:configsync.gke.io/declared-version:
      f:spec:
        f:parameters:
          f:internalCIDRs:
    Manager:      configsync.gke.io
    Operation:    Apply
    Time:         2022-02-15T17:13:20Z
    API Version:  constraints.gatekeeper.sh/v1beta1
    Fields Type:  FieldsV1
    fieldsV1:
      f:status:
    Manager:         gatekeeper
    Operation:       Update
    Time:            2021-12-03T19:00:08Z
  Resource Version:  41460953
  UID:               ac80849d-a644-4c5c-8787-f73e90b2c988
Spec:
  Parameters:
    Internal CID Rs:
Status:
  Audit Timestamp:  2022-02-15T17:21:51Z
  By Pod:
    Constraint UID:       ac80849d-a644-4c5c-8787-f73e90b2c988
    Enforced:             true
    Id:                   gatekeeper-audit-5d4d474f95-746x4
    Observed Generation:  1
    Operations:
      audit
      status
    Constraint UID:       ac80849d-a644-4c5c-8787-f73e90b2c988
    Enforced:             true
    Id:                   gatekeeper-controller-manager-76d777ddb8-g24dh
    Observed Generation:  1
    Operations:
      webhook
  Total Violations:  0
Events:              <none>

Se vedi ogni pod di Policy Controller con un valore observedGeneration uguale a il valore metadata.generation (come nell'esempio precedente), probabilmente il tuo vincolo viene applicato. Tuttavia, se questi valori corrispondono, ma si verificano ancora problemi con l'applicazione del vincolo, controlla seguente sezione per trovare suggerimenti. Se noti che ci sono solo alcuni valori che corrispondono o alcuni pod non sono elencati, lo stato vincolo sconosciuto. Il vincolo potrebbe essere applicato in modo incoerente ai pod di Policy Controller o non applicata. In assenza di valori che la corrispondenza, il vincolo non viene applicato in modo forzato.

Vincolo non applicato, ma risultati del controllo segnalati

Se il controllo observedGeneration descritto nella sezione precedente aveva valori corrispondenti e ci sono risultati del controllo riportati nella vincolo che mostra le violazioni previste (per gli oggetti preesistenti, non per richieste in entrata), ma il vincolo non viene ancora applicato, il problema che probabilmente farà con il webhook. È possibile che nel webhook sia presente uno dei seguenti problemi:

  • Il pod webhook di Policy Controller potrebbe non essere operativo. Tecniche di debug di Kubernetes può aiutarti a risolvere i problemi relativi al pod webhook.
  • Potrebbe esserci un firewall tra il server API e il webhook completamente gestito di Google Cloud. Per maggiori dettagli su come fare, consulta la documentazione del provider del firewall per correggere il firewall.

Vincolo referenziale non applicato

Se il vincolo è vincolo referenziale, assicuratevi che siano memorizzate nella cache le risorse necessarie. Per maggiori dettagli su come memorizzare nella cache vedi le risorse Configura Policy Controller per vincoli di riferimento.

Controlla la sintassi del modello di vincolo

Se hai scritto il tuo modello di vincolo, e non viene applicato, potrebbe esserci un errore nella sintassi del modello di vincolo.

Puoi esaminare il modello utilizzando questo comando:

kubectl describe constrainttemplate CONSTRAINT_TEMPLATE_NAME

Sostituisci CONSTRAINT_TEMPLATE_NAME con il nome del che vuoi analizzare. Gli errori devono essere segnalati nel campo status.

Passaggi successivi