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 interrompere Policy Controller mentre esamini il problema.
Esamina le metriche
Esaminare le metriche di Policy Controller può aiutarti a diagnosticare i problemi relativi a Policy Controller.
Verificare l'installazione
Puoi verificare se Policy Controller e la libreria di modelli di vincoli 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 a interrompere 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 detach
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 aver attivato i vincoli di riferimento. Ad esempio, se utilizzi data.inventory
in un
modello di vincolo senza attivare prima i 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 sezione seguente fornisce indicazioni per la risoluzione dei problemi se sospetti o sai che i vincoli non vengono applicati.
Controlla se la limitazione è applicata
Se temi che la tua limitazione non venga applicata, puoi controllare il valore spec.status
della limitazione e del relativo modello. 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
: ilName
della limitazione che vuoi controllare.Se necessario, esegui
kubectl get constraint
per vedere quali modelli e vincoli sono installati nel sistema.
Nell'output del comando kubectl describe
, prendi nota dei valori nei campi metadata.generation
e status.byPod.observedGeneration
. Nel
seguente esempio 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 in ogni pod del controller delle norme è visualizzato un valore observedGeneration
uguale al valore metadata.generation
(come nell'esempio precedente), è probabile che la limitazione sia applicata. Tuttavia, se questi valori corrispondono, ma continui a riscontrare problemi con l'applicazione della limitazione, consulta la sezione seguente per alcuni suggerimenti. Se noti che esistono solo alcuni valori corrispondenti o alcuni pod non sono elencati, lo stato del vincolo è sconosciuto. La limitazione potrebbe essere applicata in modo incoerente ai pod del controller delle norme o non essere applicata affatto. Se non esistono valori corrispondenti, il vincolo non viene applicato.
Vincolo non applicato, ma risultati di controllo registrati
Se il controllo observedGeneration
descritto nella sezione precedente aveva valori corrispondenti e sono presenti risultati di controllo relativi al vincolo che mostrano violazioni previste (per oggetti preesistenti, non per richieste in entrata), ma il vincolo non è ancora applicato, è probabile che il problema riguardi il webhook. Il webhook potrebbe presentare uno dei seguenti problemi:
- Il pod webhook di Policy Controller potrebbe non essere operativo. Le tecniche di debug di Kubernetes potrebbero aiutarti a risolvere i problemi relativi al pod webhook.
- Potrebbe esserci un firewall tra il server API e il servizio webhook. Per maggiori dettagli su come riparare il firewall, consulta la documentazione del fornitore.
Vincolo referenziale non applicato
Se la limitazione è un vincolo referenziale, assicurati che le risorse necessarie vengano memorizzate nella cache. Per informazioni dettagliate su come memorizzare nella cache le risorse, consulta Configurare il controller dei criteri per le limitazioni referenziali.
Controlla la sintassi del modello di vincolo
Se hai scritto un modello di vincolo e non è 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
status
.
Passaggi successivi
- Se hai bisogno di ulteriore assistenza, contatta il Google Cloud supporto.