이 페이지에서는 구성 동기화 허용 웹훅 문제를 해결하는 방법을 설명합니다. 웹훅에 대한 자세한 내용은 구성 드리프트 방지를 참조하세요.
KNV 2009 오류 문제 해결
다음 섹션은 KNV2009
오류를 해결하는 데 도움이 됩니다.
허용 웹훅 연결이 거부됨
드리프트 보호가 사용 설정된 경우 조정자가 클러스터에 구성을 적용하려고 할 때 다음 오류가 표시될 수 있습니다.
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
이 오류는 허용 웹훅이 아직 준비되지 않았거나 비정상 상태가 되었음을 의미합니다. 일반적으로 구성 동기화를 부트스트랩할 때 발생할 수 있는 일시적인 오류입니다.
문제가 지속되면 허용 웹훅 배포를 설명하고 포드가 예약될 수 있고 정상 상태인지 확인합니다.
kubectl describe deploy admission-webhook -n config-management-system
kubectl get pods -n config-management-system -l app=admission-webhook
정상 상태의 포드가 있는 배포의 출력은 다음과 비슷합니다.
Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable
...
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
...
허용 웹훅 요청 I/O 시간 초과
조정자가 클러스터에 구성을 적용하려고 할 때 다음과 유사한 오류가 발생하면 방화벽으로 인해 제어 영역 네트워크에 대한 허용 웹훅 포트 8676
이 차단될 수 있습니다.
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
이 문제를 해결하려면 방화벽 규칙을 추가하여 구성 동기화 허용 웹훅이 드리프트 방지에 사용하는 포트 8676
를 허용합니다. 제어 영역이 클러스터 노드의 웹훅 백엔드에 도달할 수 있어야 하므로 제어 영역에서 노드로 포트 8676
이 열려 있어야 합니다.
허용 웹훅이 요청을 거부함
구성 동기화에서 관리되는 필드에 변경사항을 적용하려고 시도할 때 다음 오류가 표시되면 변경사항 충돌이 발생했기 때문일 수 있습니다.
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
드리프트 보호가 사용 설정된 경우 구성에서 필드를 선언하고 저장소가 클러스터에 동기화되면 구성 동기화가 해당 필드를 관리합니다. 이 필드에 시도하는 모든 변경사항이 충돌하는 변경사항입니다.
예를 들어 저장소에 environment:prod
라벨이 포함된 배포 구성이 있고 클러스터에서 라벨을 environment:dev
로 변경하려고 시도하면 변경사항이 충돌하고 위의 오류 메시지가 표시됩니다. 하지만 배포에 tier:frontend
와 같은 새 라벨을 추가하는 것은 충돌이 되지 않습니다.
구성 동기화가 객체에 대한 모든 변경사항을 무시하도록 하려면 객체 변형 무시에 설명된 주석을 추가할 수 있습니다.
모든 리소스 유형을 삭제할 수 없음
Terminating
단계에서 멈추는 네임스페이스는 다음 조건을 갖습니다.
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
이 오류는 루트 저장소에서 Namespace
객체를 삭제하려고 시도하지만 네임스페이스 아래의 일부 객체가 네임스페이스 조정자에서 여전히 관리되고 있는 경우에 발생합니다. 네임스페이스가 삭제되면 해당 서비스 계정이 system:serviceaccount:kube-system:namespace-controller
인 네임스페이스 컨트롤러가 해당 네임스페이스에서 모든 객체를 삭제하려고 시도합니다. 하지만 구성 동기화 허용 웹훅은 루트 또는 네임스페이스 조정자만 이러한 객체를 삭제하도록 허용하고, 네임스페이스 컨트롤러가 이러한 객체를 삭제하는 것은 거부합니다.
이 문제를 해결하려면 구성 동기화 허용 웹훅을 삭제합니다.
kubectl delete deployment.apps/admission-webhook -n config-management-system
ConfigManagement Operator는 구성 동기화 허용 웹훅을 다시 만듭니다.
이 방법이 작동하지 않으면 구성 동기화를 다시 설치해야 합니다.
오류가 다시 발생하지 않도록 하려면 네임스페이스를 삭제하기 전에 네임스페이스 저장소를 삭제합니다.
다음 단계
- 문제가 계속되면 이 문제가 알려진 문제인지 확인합니다.