Ingress-Ressourcenoperationen durch Validierung des Webhooks zurückgewiesen

Virtuelle Private Cloud Klassische Infrastruktur

Wenn Sie kubectl-Befehle ausführen, um Ingress-Ressourcen zu aktualisieren oder zu erstellen, werden Fehlernachrichten ähnlich den folgenden angezeigt.

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"

Je nach Problem können Sie möglicherweise nicht bestimmte oder alle Ingress-Ressourcen erstellen oder aktualisieren. Möglicherweise werden Sie auch daran gehindert, bestimmte Konfigurationen zu verwenden.

Die Ingress-Validierung ist aktiviert, um die Anwendung möglicherweise ungültiger Ingress-Ressourcen zu verbieten. Die Konfiguration, die Sie anwenden möchten, ist ungültig und abgelehnt oder der Webhook schlägt fehl.

Wenn die Ingress-Validierung aktiviert ist, wird ein validierender Webhook im Cluster bereitgestellt, der jede Ingress-Ressource validiert, bevor sie erstellt oder aktualisiert werden. Dieser Webhook ruft eines der ALB-Replikate aus jeder ALB-Bereitstellung auf (sofern die Validierung aktiviert ist) und dieser ALB-Pod validiert die Ressource. Für den Webhook ist eine FailurePolicy konfiguriert, die die erfolgreiche Operation verhindert, falls keine Pods für eine ALB verfügbar sind.

Bei der Ingress-Validierung werden ungültige Ressourcen im Rahmen des normalen Betriebs zurückgewiesen. Daher ist es wichtig, die Ursache für die Ablehnung einer bestimmten Ressource zu ermitteln.

Lesen Sie die folgenden Abschnitte, um das Problem zu identifizieren und zu mindern.

Ungültige Konfigurationen vom Validierungs-Webhook verweigert

Wenn bei normalem Betrieb die Ingress-Ressource verweigert wird, enthalten die Fehlerinformationen eine denied the request-Antwort mit einer Ursache, die auf das Problem hinweist.

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 diesem Fall sollten Sie überprüfen, dass die Ingress-Ressource, die Sie anwenden möchten, für diese ALB gültig ist und auch die Features, die sie zu verwenden versucht, verfügbar und aktiviert sind (z. B. Snippetannotationen). Nachdem Sie die Ressource korrigiert haben, können Sie einfach erneut versuchen, die Ressource anzuwenden.

Der Webhook selbst schlägt fehl

Wenn ein Problem mit dem Webhook selbst auftritt, wird denied the request nicht in den Fehlerinformationen angezeigt. Stattdessen wird eine Internal error occurred-Nachricht wie im folgenden Beispiel angezeigt.

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

Informationen zum Debugging des Webhooks selbst finden Sie in der Dokumentation unter Debugging webhooks. Im Rahmen der Untersuchung oder Behebung des Problems können Sie die Validierungsfunktion für die ALB inaktivieren. Weitere Informationen hierzu finden Sie im Abschnitt Validierungsfunktion inaktivieren.

Validierungsfunktion inaktivieren

Manchmal können Sie den Validierungs-Webhook als Teil eines Debugging-oder Wiederherstellungsservice inaktivieren. Dazu müssen Sie die Konfigurationsoption enableIngressValidation in der ConfigMap für die Anpassung der Ingress-Implementierung auf "false" setzen.

Beachten Sie, dass diese Konfigurationsoption pro ALB vorhanden ist, sodass Sie diese Funktion selektiv für einzelne ALB-Implementierungen aktivieren oder inaktivieren können.

Das Aktivieren oder Inaktivieren der Webhooks für die Validierung kann einige Minuten dauern. Sie können den folgenden kubectl-Befehl verwenden, um die derzeit für Ihren Cluster wirksamen Validierungs-Webhooks zu überprüfen:

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