이 페이지에서는 Google Distributed Cloud에서 문제가 있거나 안전하지 않은 웹훅 문제를 해결하는 방법을 설명합니다.
추가 지원이 필요하면 Cloud Customer Care에 문의하세요.문제가 있는 웹훅 유형
Kubernetes의 허용 웹훅 또는 웹훅은 컨트롤 플레인에 대한 요청을 유지하기 전에 Kubernetes 클러스터에서 요청을 검증하거나 변형하는 데 사용할 수 있는 허용 컨트롤러의 한 유형입니다. 서드 파티 애플리케이션은 일반적으로 시스템에 중요한 리소스 및 네임스페이스에서 작동하는 웹훅을 사용합니다. 잘못 구성된 웹훅은 컨트롤 플레인 성능과 신뢰성에 영향을 줄 수 있습니다. 예를 들어 서드 파티 애플리케이션에서 만든 웹훅이 잘못 구성된 경우 Google Distributed Cloud에서 관리형 kube-system
네임스페이스에 리소스를 만들고 수정하지 못할 수 있으며 이로 인해 클러스터 기능이 저하될 수 있습니다.
문제가 있는 웹훅에는 다음 유형이 포함됩니다.
- 작동하지만 사용 가능한 엔드포인트가 없는 웹훅. 사용 가능한 엔드포인트가 없는 웹훅을 검사하려면 안내를 따르세요.
시스템에서 중요한 리소스 및 네임스페이스를 작동할 때 안전하지 않다고 간주되는 웹훅.
다음은 안전하지 않은 것으로 간주되는 웹훅입니다.
- 포드를 가로채고
kube-system
네임스페이스에서 임대하는 웹훅 kube-node-lease
네임스페이스에서 임대를 가로채는 웹훅Nodes
,TokenReviews
,SubjectAccessReviews
,CertificateSigningRequests
리소스를 가로채는 웹훅
안전하지 않다고 간주되는 웹훅을 검사하려면 안내를 따르세요.
- 포드를 가로채고
사용 가능한 엔드포인트가 없는 웹훅
웹훅에 사용 가능한 엔드포인트가 없으면 웹훅 엔드포인트를 지원하는 서비스에 실행되지 않고 있는 포드가 하나 이상 있습니다. 웹훅 엔드포인트를 사용하려면 안내에 따라 이 웹훅 엔드포인트를 지원하는 서비스의 포드를 찾아 문제를 해결합니다.
웹훅과 연결된 서비스의 서빙 포드를 찾습니다. 다음 명령어를 실행하여 서비스를 설명합니다.
kubectl describe svc SERVICE_NAME -n SERVICE_NAMESPACE
다음을 바꿉니다.
- SERVICE_NAME: 서비스 이름
- SERVICE_NAMESPACE: 네임스페이스 이름
웹훅에 나열된 서비스 이름을 찾을 수 없는 경우 구성에 나열된 이름과 서비스의 실제 이름 간의 불일치로 인해 사용할 수 없는 엔드포인트가 생길 수 있습니다. 엔드포인트 가용성을 수정하려면 웹훅 구성의 서비스 이름이 올바른 서비스 객체와 일치하도록 업데이트합니다.
이 서비스의 서빙 포드를 검사합니다. 배포를 나열하여 실행되지 않고 있는 포드를 식별합니다.
kubectl get deployment -n SERVICE_NAMESPACE
또는 다음 명령어를 실행하여 포드를 나열합니다.
kubectl get pods -n SERVICE_NAMESPACE -o wide
실행되지 않고 있는 포드의 경우 포드 로그를 검사하여 포드가 실행되지 않고 있는 이유를 확인합니다.
안전하지 않다고 간주되는 웹훅
웹훅이 시스템 관리형 네임스페이스의 리소스를 가로채는 경우에는 이러한 리소스가 가로채기되지 않도록 웹훅을 업데이트하는 것이 좋습니다.
웹훅 구성을 검사합니다. 다음
kubectl
명령어를 실행하여 웹훅 구성을 가져옵니다.kubectl get validatingwebhookconfigurations CONFIGURATION_NAME -o yaml
CONFIGURATION_NAME을 웹훅 구성 이름으로 바꿉니다.
이 명령어에서 아무것도 반환하지 않으면
validatingwebhookconfigurations
를mutatingwebhookconfigurations
로 바꿔 명령어를 다시 실행합니다.출력의
webhooks
섹션에 웹훅이 하나 이상 나열됩니다.웹훅이 안전하지 않다고 간주되는 이유에 따라 구성을 수정합니다.
kube-system 및 kube-node-lease 네임스페이스 제외
scope
가*
이거나 범위가Namespaced
이고 다음 조건 중 하나가 해당되는 경우에 웹훅이 안전하지 않다고 간주됩니다.다음 예시와 같이
operator
조건은NotIn
이고values
는kube-system
과kube-node-lease
를 생략합니다.webhooks: - admissionReviewVersions: ... namespaceSelector: matchExpressions: - key: kubernetes.io/metadata.name operator: NotIn values: - blue-system # add 'kube-system' and 'kube-node-lease' if `NotIn` objectSelector: {} rules: - apiGroups: ... scope: '*' # 'Namespaced' sideEffects: None timeoutSeconds: 3
웹훅이 특정 네임스페이스에서만 작동하도록
scope
가*
가 아닌Namespaced
로 설정되어 있는지 확인합니다.operator
가NotIn
이면kube-system
및kube-node-lease
가values
에 포함되어 있는지 확인합니다.다음 예시와 같이
operator
조건은In
이고values
는kube-system
과kube-node-lease
를 포함합니다.namespaceSelector: matchExpressions: - key: kubernetes.io/metadata.name operator: In values: - blue-system - kube-system # remove as operator is `In` - kube-node-lease # remove as operator is `In`
웹훅이 특정 네임스페이스에서만 작동하도록
scope
가*
가 아닌Namespaced
로 설정되어 있는지 확인합니다.operator
이In
이면kube-system
및kube-node-lease
가values
에 포함되지 않아야 합니다.
일치하는 리소스 제외
다음 예시와 같이
nodes
,tokenreviews
,subjectaccessreviews
또는certificatesigningrequests
가 리소스 아래에 나열되면 웹훅이 안전하지 않다고 간주됩니다.- admissionReviewVersions: ... resources: - 'pods' # keep, remove everything else - 'nodes' - 'tokenreviews' - 'subjectacessreviews' - 'certificatesigningrequests' scope: '*' sideEffects: None timeoutSeconds: 3
리소스 섹션에서
nodes
,tokenreviews
,subjectaccessreviews
,certificatesigningrequests
를 삭제하세요.