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 arrestare Policy Controller mentre indaghi sul problema.
Esamina le metriche
L'esame delle metriche di Policy Controller può aiutarti a diagnosticare i problemi relativi a Policy Controller.
Verifica l'installazione
Puoi verificare se Policy Controller e la libreria dei modelli di vincolo sono stati installati correttamente.
Scollega Policy Controller
In rari casi, potrebbe essere necessario scollegare Policy Controller dai cluster.
In questo modo, la gestione di Policy Controller viene disattivata completamente. Prova
ad arrestare temporaneamente Policy Controller
per vedere se riesci a risolvere i problemi prima di utilizzare il comando detach.
Scollega Policy Controller dal parco risorse:
gcloud container fleet policycontroller detachRicollega 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 aver abilitato i vincoli referenziali. Ad esempio, se utilizzi data.inventory in un
modello di vincolo senza prima abilitare i vincoli referenziali, 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 sezione seguente fornisce indicazioni per la risoluzione dei problemi se sospetti o sai che i vincoli non vengono applicati.
Verifica se il vincolo è applicato
Se temi che il vincolo non venga applicato, puoi controllare spec.status del vincolo e del modello di vincolo. Per controllare lo stato, esegui il seguente comando:
kubectl describe CONSTRAINT_TEMPLATE_NAME CONSTRAINT_NAME
Sostituisci quanto segue:
CONSTRAINT_TEMPLATE_NAME: il nome del modello di vincolo che vuoi controllare. Ad esempio,K8sNoExternalServices.CONSTRAINT_NAME: ilNamedel vincolo che vuoi controllare.Se necessario, esegui
kubectl get constraintper vedere quali modelli di vincolo e vincoli sono installati sul tuo sistema.
Nell'output del comando kubectl describe, prendi nota dei valori nei campi metadata.generation e status.byPod.observedGeneration. 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 al valore metadata.generation (come nell'esempio precedente), è probabile che il vincolo sia applicato. Tuttavia, se questi valori corrispondono, ma continui a riscontrare problemi con l'applicazione del vincolo, consulta la sezione seguente per suggerimenti. Se noti che solo alcuni valori corrispondono o che alcuni pod non sono elencati, lo stato del vincolo è sconosciuto. Il vincolo potrebbe essere applicato in modo incoerente nei pod di Policy Controller o non essere applicato affatto. Se non ci sono valori corrispondenti, il vincolo non viene applicato.
Vincolo non applicato, ma risultati di audit segnalati
Se il controllo observedGeneration descritto nella sezione precedente aveva
valori corrispondenti e sono stati
segnalati risultati di audit sul
vincolo che mostrano le violazioni previste (per gli oggetti preesistenti, non per le
richieste in entrata), ma il vincolo non viene ancora applicato, il problema è
probabilmente dovuto al webhook. Il webhook potrebbe riscontrare uno dei seguenti problemi:
- Il pod del webhook di Policy Controller potrebbe non essere operativo. Le tecniche di debug di Kubernetes potrebbero aiutarti a risolvere i problemi relativi al pod del webhook.
- Potrebbe esserci un firewall tra il server API e il servizio webhook. Per maggiori dettagli su come correggere il firewall, consulta la documentazione del fornitore del firewall.
Vincolo referenziale non applicato
Se il vincolo è un vincolo referenziale, assicurati che le risorse necessarie siano memorizzate nella cache. Per maggiori dettagli su come memorizzare le risorse nella cache, consulta Configurare Policy Controller per i vincoli referenziali.
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 il seguente comando:
kubectl describe constrainttemplate CONSTRAINT_TEMPLATE_NAME
Sostituisci CONSTRAINT_TEMPLATE_NAME con il nome del modello che vuoi esaminare. Gli errori devono essere segnalati nel campo status.
Passaggi successivi
Se non riesci a trovare una soluzione al tuo problema nella documentazione, consulta Richiedere assistenza per ulteriore aiuto, inclusi consigli sui seguenti argomenti:
Aprire una richiesta di assistenza contattando l'assistenza clienti Google Cloud
Aprire bug o richieste di funzionalità utilizzando il tracker di problemi Google Cloud o aprendo un bug pubblico per Gatekeeper su GitHub.