En esta página se explica cómo resolver problemas con el webhook de admisión de Config Sync. Para obtener más información sobre el webhook, consulta Evitar la deriva de la configuración.
Solucionar errores de KNV 2009
En las siguientes secciones se explica cómo solucionar los errores KNV2009
.
Conexión rechazada del webhook de admisión
Si tienes habilitada la protección contra la deriva, es posible que recibas el siguiente error cuando el reconciliador intente aplicar una configuración al clúster:
KNV2009: Internal error occurred: failed calling webhook "v1.admission-webhook.configsync.gke.io": Post "https://admission-webhook.config-management-system.svc:8676/admission-webhook?timeout=3s": dial tcp 10.92.2.14:8676: connect: connection refused
Este error significa que el webhook de admisión aún no está listo o que no funciona correctamente. Normalmente, se trata de un error transitorio que puede aparecer al iniciar Config Sync.
Si el problema persiste, describe el Deployment del webhook de admisión para ver si se pueden programar sus pods y si están en buen estado:
kubectl describe deploy admission-webhook -n config-management-system
kubectl get pods -n config-management-system -l app=admission-webhook
Un Deployment con Pods en buen estado tiene un resultado similar al siguiente:
Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable
...
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
...
Tiempo de espera de E/S de la solicitud de webhook de admisión
Si recibes un error similar al siguiente cuando el reconciliador intenta aplicar una configuración al clúster, es posible que el firewall bloquee el puerto 8676
del webhook de admisión a la red del plano de control:
KNV2009: Internal error occurred: failed calling webhook "v1.admission-webhook.configsync.gke.io": Post https://admission-webhook.config-management-system.svc:8676/admission-webhook?timeout=3s: dial tcp 10.1.1.186:8676: i/o timeout
Para resolver este problema, añada una regla de cortafuegos
para permitir el puerto 8676
, que el webhook de admisión de Config Sync usa para
evitar las desviaciones. El puerto 8676
debe estar abierto desde el plano de control a los nodos, ya que el plano de control debe poder acceder al backend del webhook en los nodos del clúster.
Webhook de admisión ha denegado una solicitud
Si recibes el siguiente error al intentar aplicar un cambio a un campo que gestiona Config Sync, es posible que hayas hecho un cambio conflictivo:
error: OBJECT could not be patched: admission webhook "v1.admission-webhook.configsync.gke.io"
denied the request: fields managed by Config Sync can not be modified
Si tienes habilitada la protección contra desviaciones, cuando declares un campo en una configuración y tu repositorio se sincronice con un clúster, Config Sync gestionará ese campo. Cualquier cambio que intentes hacer en ese campo será un cambio conflictivo.
Por ejemplo, si tienes una configuración de implementación en tu repositorio con la etiqueta environment:prod
e intentas cambiarla a environment:dev
en tu clúster, se producirá un cambio conflictivo y recibirás el mensaje de error anterior. Sin embargo, si añades una etiqueta nueva (por ejemplo, tier:frontend
) al despliegue, no habrá ningún conflicto.
Si quiere que Config Sync ignore los cambios en un objeto, puede añadir la anotación que se describe en Ignorar mutaciones de objetos.
No se han podido eliminar todos los tipos de recursos
Un espacio de nombres que se ha quedado bloqueado en la fase Terminating
tiene la siguiente condición:
message: 'Failed to delete all resource types, 1 remaining: admission webhook
"v1.admission-webhook.configsync.gke.io" denied the request: system:serviceaccount:kube-system:namespace-controller
is not authorized to delete managed resource "_configmap_bookstore_cm1"'
reason: ContentDeletionFailed
status: "True"
type: NamespaceDeletionContentFailure
Este error se produce cuando intentas eliminar un objeto Namespace
de un repositorio raíz, pero un reconciliador de espacio de nombres sigue gestionando activamente algunos objetos del espacio de nombres. Cuando se elimina un espacio de nombres, el controlador del espacio de nombres, cuya cuenta de servicio es system:serviceaccount:kube-system:namespace-controller
, intentaría eliminar todos los objetos de ese espacio de nombres. Sin embargo, el webhook de admisión de Config Sync solo permite que el reconciliador raíz o de espacio de nombres elimine estos objetos, y deniega al controlador de espacio de nombres la eliminación de estos objetos.
Para solucionar este problema, elimina el webhook de admisión de Config Sync:
kubectl delete deployment.apps/admission-webhook -n config-management-system
El operador ConfigManagement vuelve a crear el webhook de admisión de Config Sync.
Si esta solución alternativa no funciona, es posible que tengas que volver a instalar Config Sync.
Para evitar que se produzca de nuevo el error, elimina el repositorio del espacio de nombres antes de eliminar el espacio de nombres.
Siguientes pasos
Si sigues teniendo problemas, comprueba si el problema que tienes es un problema conocido.
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.
- Recibir asistencia de la comunidad haciendo preguntas en Stack Overflow.
Si usas kpt o Kustomize, usa la etiqueta
kpt
okustomize
para buscar problemas similares. - Abrir errores o solicitudes de funciones mediante el sistema de seguimiento de problemas público en GitHub.