Operaciones de recurso Ingress rechazadas validando webhook

Nube privada virtual Infraestructura clásica

Al ejecutar mandatos kubectl para actualizar o crear recursos de Ingress, verá mensajes de error similares a los ejemplos siguientes.

Error from server (BadRequest): error when creating "example-ingress.yaml": admission webhook "validate.nginx.ingress.kubernetes.io" denied the request: nginx.ingress.kubernetes.io/configuration-snippet annotation cannot be used. Snippet directives are disabled by the Ingress administrator
Error from server (InternalError): error when creating "test-broken-ingress.yaml": Internal error occurred: failed calling webhook "validate.nginx.ingress.kubernetes.io": failed to call webhook: Post "https://public-crcppcl2s207t5c95g1qgg-alb1-ingress-admission.kube-system.svc:443/networking/v1/ingresses?timeout=10s": no endpoints available for service "public-crcppcl2s207t5c95g1qgg-alb1-ingress-admission"

En función del problema, es posible que no pueda crear o actualizar determinados o todos los recursos de Ingress. También es posible que se le impida utilizar determinadas configuraciones.

La validación de Ingress está habilitada para prohibir la aplicación de recursos de Ingress posiblemente no válidos. La configuración que está intentando aplicar no es válida y se ha rechazado o el webhook está fallando.

Cuando la validación de Ingress está habilitada, se despliega un webhook de validación en el clúster que valida cada recurso de Ingress antes de que se creen o se actualicen. Este webhook llama a una de las réplicas de ALB desde cada despliegue de ALB (donde la validación está habilitada) y ese pod de ALB valida el recurso. El webhook tiene una FailurePolicy configurada que impide que la operación se realice correctamente en caso de que no haya ningún pod disponible para un ALB.

La validación de Ingress deniega los recursos no válidos como parte de su funcionamiento normal, por lo que es importante identificar la razón por la que se rechaza un recurso determinado.

Consulte las secciones siguientes para identificar y mitigar el problema.

Configuraciones no válidas denegadas por el webhook de validación

En casos de funcionamiento normal, cuando se deniega el recurso de Ingress, la información de anomalía contiene una respuesta denied the request con una razón que indica el problema.

Error from server (BadRequest): error when creating "example-ingress.yaml": admission webhook "validate.nginx.ingress.kubernetes.io" denied the request: nginx.ingress.kubernetes.io/configuration-snippet annotation cannot be used. Snippet directives are disabled by the Ingress administrator

En este caso, debe verificar que el recurso de Ingress que está intentando aplicar es válido para dicho ALB, y también que las características que está intentando utilizar están disponibles y habilitadas (como las anotaciones de fragmento de código). Después de corregir el recurso, simplemente puede volver a intentar aplicar el recurso.

El propio webhook está fallando

En caso de un problema con el propio webhook, no verá denied the request en la información de anomalía, sino que encontrará un mensaje Internal error occurred, como el ejemplo siguiente.

Error from server (InternalError): error when creating "example-ingress.yaml": Internal error occurred: failed calling webhook "validate.nginx.ingress.kubernetes.io": Post https://public-crcppcl2s207t5c95g1qgg-alb1-ingress-admission.kube-system.svc:443/networking/v1/ingresses?timeout=10s: dial tcp 172.21.70.236:443: connect: connection timed out

Para depurar el propio webhook, revise nuestra documentación sobre Depuración de webhooks. Como parte de la investigación o de la solución del problema, es posible que desee inhabilitar la característica de validación para el ALB; para ello, consulte la sección Inhabilitación de la característica de validación.

Inhabilitación de la característica de validación

A veces es posible que desee inhabilitar el webhook de validación como parte de un servicio de depuración o restauración. Para ello, debe establecer la opción de configuración enableIngressValidation en "false" en ConfigMap para personalizar el despliegue de ingress.

Tenga en cuenta que esta opción de configuración existe por ALB, por lo que puede habilitar o inhabilitar selectivamente esta característica para despliegues de ALB individuales.

La habilitación o inhabilitación de los webhooks de validación puede tardar unos minutos. Para comprobar los webhooks de validación actualmente en vigor para el clúster, puede utilizar el siguiente mandato kubectl:

kubectl get -n kube-system ValidatingWebhookConfiguration -l 'app.kubernetes.io/part-of=managed-ingress'