허용 웹훅 문제 해결

이 페이지에서는 구성 동기화 허용 웹훅 문제를 해결하는 방법을 설명합니다. 웹훅에 대한 자세한 내용은 구성 드리프트 방지를 참조하세요.

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는 구성 동기화 허용 웹훅을 다시 만듭니다.

이 방법이 작동하지 않으면 구성 동기화를 다시 설치해야 합니다.

오류가 다시 발생하지 않도록 하려면 네임스페이스를 삭제하기 전에 네임스페이스 저장소를 삭제합니다.

다음 단계