Le operazioni della risorsa Ingress sono state rifiutate dalla convalida del webhook
Virtual Private Cloud Infrastruttura classica
Quando esegui i comandi kubectl per aggiornare o creare le risorse Ingress, visualizzi dei messaggi di errore simili ai seguenti esempi.
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"
A seconda del problema, potresti non essere in grado di creare o aggiornare alcune o tutte le risorse Ingress. È inoltre possibile che venga impedito l'utilizzo di determinate configurazioni.
La convalida Ingress è abilitata per impedire l'applicazione di eventuali risorse Ingress non valide. La configurazione che si sta tentando di applicare non è valida e si è rifiutata oppure il webhook ha esito negativo.
Quando è abilitata la convalida Ingress, un webhook di convalida viene distribuito al cluster che convalida ciascuna risorsa Ingress prima che venga creata o aggiornata. Questo webhook richiama una delle repliche ALB da ogni distribuzione ALB (dove la convalida è abilitata) e tale pod ALB convalida la risorsa. Il webhook ha configurato una FailurePolicy che impedisce la riuscita dell'operazione nel caso in cui non sia disponibile alcun pod per un ALB.
La convalida di Ingress nega le risorse non valide come parte della sua normale operazione, quindi è importante identificare il motivo per rifiutare una particolare risorsa.
Consulta le seguenti sezioni per individuare e mitigare il problema.
Configurazioni non valide negate dal webhook di convalida
Nei casi di funzionamento normale, quando la risorsa Ingress viene negata, le informazioni sull'errore contengono una risposta denied the request con un motivo che indica il 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
In questo caso, dovresti verificare che la risorsa Ingress che stai tentando di applicare sia valida per tale ALB e che anche le funzionalità che sta tentando di utilizzare siano disponibili e abilitate (come le annotazioni del frammento). Dopo aver corretto la risorsa, è possibile semplicemente riprovare ad applicare la risorsa.
Il webhook stesso è in errore
In caso di problemi con il webhook stesso, non vedrai denied the request nelle informazioni sull'errore, invece riscontrerai un messaggio Internal error occurred, come il seguente esempio.
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
Per il debug del webhook stesso, consulta la nostra documentazione su Debug dei webhook. Come parte dell'indagine o della correzione del problema, potresti voler disabilitare la funzione di convalida per l'ALB, a tale scopo, fai riferimento alla sezione Disabilitazione della funzione di convalida.
Disabilitazione della funzione di convalida
A volte si potrebbe voler disabilitare il webhook di convalida come parte di un servizio di debug o ripristino. A tale scopo, è necessario impostare l'opzione di configurazione enableIngressValidation su "false" in ConfigMap per personalizzare la distribuzione in ingresso.
Tieni presente che questa opzione di configurazione esiste per ALB in modo da poter abilitare o disabilitare selettivamente questa funzione per le singole distribuzioni ALB.
L'abilitazione o la disabilitazione dei webhook di convalida potrebbe richiedere alcuni minuti. Per controllare i webhook di convalida attualmente in vigore per il tuo cluster, puoi utilizzare il seguente comando kubectl:
kubectl get -n kube-system ValidatingWebhookConfiguration -l 'app.kubernetes.io/part-of=managed-ingress'