En esta página, se muestra cómo resolver problemas con Policy Controller.
Sugerencias generales
En la siguiente sección, se proporcionan sugerencias generales para resolver problemas con Policy Controller.
Detener Policy Controller
Si el controlador de políticas causa problemas en el clúster, puedes detener el controlador de políticas mientras investigas el problema.
Examina métricas
Examinar las métricas del controlador de políticas puede ayudarte a diagnosticar problemas con el controlador de políticas.
Verifique la instalación
Puedes verificar si Policy Controller y la biblioteca de plantillas de restricciones se instalaron correctamente.
Cómo desconectar Policy Controller
En casos excepcionales, es posible que debas desconectar Policy Controller de tus clústeres.
Esto inhabilita por completo la administración de Policy Controller. Intenta detener temporalmente Policy Controller para ver si puedes resolver los problemas antes de usar el comando detach
.
Desconecta Policy Controller de tu flota:
gcloud container fleet policycontroller detach
Vuelve a conectar Policy Controller:
gcloud container fleet policycontroller enable
No se pudo crear una plantilla de restricción
Si ves un error que menciona un disallowed ref
, confirma que habilitaste las restricciones referenciales. Por ejemplo, si usas data.inventory
en una plantilla de restricción sin habilitar primero las restricciones referenciales, el error es similar al siguiente:
admission webhook "validation.gatekeeper.sh" denied the request: check refs failed on module {templates["admission.k8s.gatekeeper.sh"]["MyTemplate"]}: disallowed ref data.inventory...
No se aplicó la restricción
En la siguiente sección, se proporciona orientación para solucionar problemas si sospechas o sabes que tus restricciones no se aplican.
Verifica si se aplica la restricción
Si te preocupa que no se aplique tu restricción, puedes verificar el spec.status
de tu restricción y la plantilla de restricciones. Para verificar el estado, ejecuta el siguiente comando:
kubectl describe CONSTRAINT_TEMPLATE_NAME CONSTRAINT_NAME
Reemplaza lo siguiente:
CONSTRAINT_TEMPLATE_NAME
: es el nombre de la plantilla de restricciones que deseas verificar. Por ejemplo,K8sNoExternalServices
CONSTRAINT_NAME
: es elName
de la restricción que deseas verificar.Si es necesario, ejecuta
kubectl get constraint
para ver qué plantillas y restricciones de restricciones están instaladas en tu sistema.
En el resultado del comando kubectl describe
, toma nota de los valores en los campos metadata.generation
y status.byPod.observedGeneration
. En el siguiente ejemplo, estos valores se muestran en negrita:
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>
Si ves todos los Pods del controlador de políticas con un valor observedGeneration
igual al valor metadata.generation
(que es el caso del ejemplo anterior), es probable que se aplique tu restricción. Sin embargo, si estos valores coinciden, pero todavía tienes problemas con la restricción que se aplica, consulta la siguiente sección para obtener sugerencias. Si notas que solo hay algunos valores que coinciden o que algunos Pods no aparecen en la lista, se desconoce el estado de la restricción. Es posible que la restricción se aplique de forma incoherente en los Pods del controlador de políticas o no se aplique en absoluto. Si no hay valores que coincidan, no se aplica la restricción.
No se aplica la restricción, pero se informan los resultados de auditoría
Si la verificación observedGeneration
descrita en la sección anterior tenía valores coincidentes y hay resultados de auditoría informados en la restricción que muestran incumplimientos esperados (para los objetos preexistentes, no para las solicitudes entrantes), pero la restricción aún no se aplica, es probable que el problema esté relacionado con el webhook. Es posible que el webhook experimente uno de los siguientes problemas:
- Es posible que el Pod del webhook de Policy Controller no esté en funcionamiento. Las técnicas de depuración de Kubernetes pueden ayudarte a resolver problemas con el Pod del webhook.
- Puede haber un firewall entre el servidor de la API y el servicio del webhook. Consulta la documentación de tu proveedor de firewall para obtener detalles sobre cómo corregir el firewall.
No se aplicó la restricción referencial
Si tu restricción es una restricción referencial, asegúrate de que los recursos necesarios se almacenen en caché. Si deseas obtener detalles sobre cómo almacenar en caché los recursos, consulta Configura el controlador de políticas para restricciones referenciales.
Verifica la sintaxis de la plantilla de restricciones
Si escribiste tu propia plantilla de restricciones y no se aplica, es posible que haya un error en la sintaxis de la plantilla de restricciones.
Puedes revisar la plantilla mediante el siguiente comando:
kubectl describe constrainttemplate CONSTRAINT_TEMPLATE_NAME
Reemplaza CONSTRAINT_TEMPLATE_NAME
por el nombre de la plantilla que deseas investigar. Los errores deben informarse en el campo status
.
¿Qué sigue?
- Si necesitas asistencia adicional, comunícate con el equipo de asistencia de Google Cloud.