En esta página, se muestra cómo resolver problemas con el webhook de admisión del Sincronizador de configuración. Para obtener más información sobre el webhook, consulta Evita la deriva de configuración.
Soluciona problemas de KNV 2009
En las siguientes secciones, encontrarás ayuda para resolver errores KNV2009
.
Se rechazó la conexión de webhook de admisión
Si tienes habilitada la protección contra la deriva, es posible que recibas el siguiente error cuando el conciliador 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 dejó de estar en buen estado. Por lo general, es un error transitorio que puedes ver cuando se inicializa el Sincronizador de configuración.
Si el problema persiste, describe la Deployment del webhook de admisión para ver si sus pods se pueden programar y 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
Una 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 conciliador intenta aplicar una configuración al clúster, el puerto de webhook de admisión 8676
podría ser bloqueado por el firewall 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, agrega una regla de firewall a fin de admitir el puerto 8676
, que el webhook de admisión del Sincronizador de configuración usa para la prevención de desvíos. El puerto 8676
debe estar abierto desde el plano de control a los nodos, ya que el plano de control debe poder llegar al backend del webhook en los nodos del clúster.
El webhook de admisión rechazó una solicitud
Si recibes el siguiente error cuando intentas aplicar un cambio en un campo que administra el Sincronizador de configuración, es posible que hayas realizado 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 desvíos, cuando declares un campo en una configuración y el repositorio se sincronice con un clúster, el Sincronizador de configuración administrará ese campo. Cualquier cambio que intentes hacer en ese campo es un cambio conflictivo.
Por ejemplo, si tienes una configuración de implementación en el repositorio con una etiqueta environment:prod
y tratas de cambiar esa etiqueta a environment:dev
en el clúster, habrá un cambio conflictivo y recibirás el mensaje de error anterior. Sin embargo, si agregas una etiqueta nueva (por ejemplo, tier:frontend
) a la Deployment, no habrá un conflicto.
Si quieres que el Sincronizador de configuración ignore los cambios en un objeto, puedes agregar la anotación que se describe en Ignora las mutaciones de objetos.
No se pudieron borrar todos los tipos de recursos
Un espacio de nombres atascado en la fase de 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
Esto sucede cuando intentas borrar un objeto Namespace
de un repositorio raíz, pero algunos objetos bajo el espacio de nombres todavía están administrados de manera activa por un conciliador de espacio de nombres. Cuando se borra un espacio de nombres, el controlador de espacio de nombres, cuya cuenta de servicio es system:serviceaccount:kube-system:namespace-controller
, intenta borrar todos los objetos que se encuentran en ese espacio de nombres. Sin embargo, el webhook de admisión del Sincronizador de configuración solo permite que el conciliador raíz o de espacio de nombres borre estos objetos y no permite que el controlador de espacio de nombres los pueda borrar.
Para solucionar este problema, borra el webhook de admisión del Sincronizador de configuración:
kubectl delete deployment.apps/admission-webhook -n config-management-system
El operador de ConfigManagement recrea el webhook de admisión del Sincronizador de configuración.
Si esta solución alternativa no funciona, es posible que debas reinstalar el Sincronizador de configuración.
Para evitar volver a encontrar el error, quita el repositorio del espacio de nombres antes de quitar el espacio de nombres.
¿Qué sigue?
- Si los problemas persisten, verifica si se trata de un problema conocido.