웹훅의 유효성을 검증하여 Ingress 리소스 오퍼레이션이 거부되었습니다.

가상 프라이빗 클라우드 클래식 인프라

kubectl 명령을 실행하여 Ingress 리소스를 업데이트하거나 작성할 때 다음 예제와 유사한 오류 메시지가 표시됩니다.

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"

문제에 따라 특정 또는 모든 Ingress 리소스를 작성하거나 업데이트할 수 없습니다. 특정 구성을 사용하지 못할 수도 있습니다.

올바르지 않을 수 있는 Ingress 리소스의 애플리케이션을 금지하기 위해 Ingress 유효성 검증이 사용으로 설정되었습니다. 적용하려는 구성이 올바르지 않아 거부되었거나 웹훅이 실패했습니다.

Ingress 유효성 검증이 사용으로 설정되면 각 Ingress 리소스가 작성되거나 업데이트되기 전에 이를 유효성 검증하는 클러스터에 유효성 검증 웹훅이 배치됩니다. 이 웹훅은 각 ALB 배치에서 ALB 복제본 중 하나를 호출하고 (여기서 유효성 검증이 사용으로 설정됨) ALB팟 (Pod) 이 자원의 유효성을 검증합니다. 웹 후크에는 ALB에 대한 팟 (Pod) 을 사용할 수 없는 경우에 조작이 성공하지 못하도록 하는 FailurePolicy 가 구성되어 있습니다.

Ingress 유효성 검증은 정상 조작의 일부로 올바르지 않은 자원을 거부하므로 특정 자원을 거부하는 이유를 식별하는 것이 중요합니다.

다음 섹션을 확인하여 문제를 식별하고 완화하십시오.

유효성 검증 웹훅에 의해 올바르지 않은 구성이 거부되었습니다.

정상 조작의 경우 Ingress 자원이 거부되면 실패 정보에는 문제점을 표시하는 이유와 함께 denied the request 응답이 포함됩니다.

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

이 경우, 적용하려는 Ingress 리소스가 해당 ALB에 대해 유효하며 사용하려는 기능 (예: 스니펫 어노테이션) 도 사용 가능하고 사용 가능한지 확인해야 합니다. 자원을 정정한 후 단순히 자원 적용을 재시도할 수 있습니다.

웹훅 자체가 실패함

웹훅 자체에 문제가 있는 경우 실패 정보에 denied the request 가 표시되지 않습니다. 대신 다음 예제와 같은 Internal error occurred 메시지가 표시됩니다.

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

웹훅 자체를 디버깅하려면 웹훅 디버깅 에 대한 문서를 검토하십시오. 조사 또는 문제 수정의 일부로 ALB의 유효성 검증 기능을 사용 안함으로 설정할 수 있습니다. 이를 수행하려면 유효성 검증 기능 사용 안함 절을 참조하십시오.

유효성 검증 기능 사용 안함

때때로 디버깅 또는 복원 서비스의 일부로 유효성 검증 웹훅을 사용하지 않도록 설정할 수 있습니다. 이를 수행하려면 Ingress 배치를 사용자 정의하기 위한 ConfigMap 에서 enableIngressValidation 구성 옵션을 "false" 로 설정해야 합니다.

이 구성 옵션은 ALB마다 존재하므로 개별 ALB 배치에 대해 이 기능을 선택적으로 사용 또는 사용 안함으로 설정할 수 있습니다.

유효성 검증 웹훅을 사용하거나 사용하지 않도록 설정하는 데 몇 분이 걸릴 수 있습니다. 현재 클러스터에 유효한 유효성 검증 웹훅을 확인하기 위해 다음 kubectl 명령을 사용할 수 있습니다.

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