En esta página se explica cómo resolver problemas con Policy Controller.
Consejos generales
En la siguiente sección se ofrecen consejos generales para resolver problemas con Policy Controller.
Detener Policy Controller
Si Policy Controller está causando problemas en tu clúster, puedes detenerlo mientras investigas el problema.
Consultar métricas
Examinar las métricas de Policy Controller puede ayudarte a diagnosticar problemas con Policy Controller.
Verificar la instalación
Puedes verificar si Policy Controller y la biblioteca de plantillas de restricciones se han instalado correctamente.
Desasociar Policy Controller
En casos excepcionales, es posible que tengas que separar Policy Controller de tus clústeres.
De esta forma, se inhabilita por completo la gestión de Policy Controller. Prueba a detener temporalmente Policy Controller para ver si puedes resolver los problemas antes de usar el comando detach
.
Desinstala Policy Controller en toda tu flota:
gcloud container fleet policycontroller detach
Vuelve a adjuntar Policy Controller:
gcloud container fleet policycontroller enable
Error al crear una plantilla de restricción
Si aparece un error que menciona disallowed ref
, confirma que has habilitado las restricciones referenciales. Por ejemplo, si usas data.inventory
en una plantilla de restricción sin habilitar las restricciones referenciales primero, el error será 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...
Restricción no aplicada
En la siguiente sección se ofrecen instrucciones para solucionar problemas si sospechas o sabes que no se están aplicando tus restricciones.
Comprobar si se aplica la restricción
Si te preocupa que no se aplique tu restricción, puedes consultar el
spec.status
de tu restricción y la plantilla de restricción. Para comprobar el estado, ejecuta el siguiente comando:
kubectl describe CONSTRAINT_TEMPLATE_NAME CONSTRAINT_NAME
Haz los cambios siguientes:
CONSTRAINT_TEMPLATE_NAME
: el nombre de la plantilla de restricción que quieras comprobar. Por ejemplo,K8sNoExternalServices
.CONSTRAINT_NAME
: elName
de la restricción que quieras comprobar.Si es necesario, ejecuta
kubectl get constraint
para ver qué plantillas de restricciones y restricciones están instaladas en tu sistema.
En el resultado del comando kubectl describe
, anota los valores de los campos metadata.generation
y status.byPod.observedGeneration
. En el siguiente ejemplo, estos valores están 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 que todos los pods de Policy Controller tienen un valor observedGeneration
igual al valor metadata.generation
(como en el ejemplo anterior), es probable que la restricción se haya aplicado. Sin embargo, si estos valores coinciden, pero sigues teniendo problemas con la aplicación de la restricción, consulta la siguiente sección para obtener consejos. Si observas que solo coinciden algunos valores o que no se muestran algunos pods, significa que se desconoce el estado de tu restricción. Es posible que la restricción no se aplique de forma coherente en los pods de Policy Controller o que no se aplique en absoluto. Si no hay ningún valor que coincida, la restricción no se aplicará.
La restricción no se ha aplicado, pero se han registrado los resultados de la auditoría
Si la comprobación observedGeneration
descrita en la sección anterior ha encontrado valores coincidentes y se han registrado resultados de auditoría en la restricción que muestran infracciones esperadas (en objetos preexistentes, no en solicitudes entrantes), pero la restricción sigue sin aplicarse, es probable que el problema esté relacionado con el webhook. Es posible que el webhook tenga uno de los siguientes problemas:
- Es posible que el pod del webhook de Policy Controller no funcione. Las técnicas de depuración de Kubernetes pueden ayudarte a resolver problemas con el pod del webhook.
- Puede haber un cortafuegos entre el servidor de la API y el servicio de webhook. Consulta la documentación del proveedor del cortafuegos para obtener información sobre cómo solucionarlo.
No se ha aplicado la restricción referencial
Si tu restricción es una restricción referencial, asegúrate de que los recursos necesarios se almacenan en caché. Para obtener información sobre cómo almacenar en caché recursos, consulta Configurar Policy Controller para las restricciones referenciales.
Comprobar la sintaxis de la plantilla de restricción
Si has escrito tu propia plantilla de restricción y no se aplica, puede que haya un error en la sintaxis de la plantilla.
Para consultar la plantilla, usa el siguiente comando:
kubectl describe constrainttemplate CONSTRAINT_TEMPLATE_NAME
Sustituye CONSTRAINT_TEMPLATE_NAME
por el nombre de la plantilla que quieras investigar. Los errores deben indicarse en el campo status
.
Siguientes pasos
Si no encuentras una solución a tu problema en la documentación, consulta la sección Obtener asistencia para obtener más ayuda, incluidos consejos sobre los siguientes temas:
Abrir un caso de asistencia poniéndose en contacto con el equipo de Atención al Cliente de Cloud
Abrir errores o solicitudes de funciones mediante el sistema de seguimiento de problemas Google Cloud público o abrir un error público para Gatekeeper en GitHub.