Kubernetes의 허용 웹훅 또는 웹훅은 제어 영역에 대한 요청을 유지하기 전에 Kubernetes 클러스터에서 요청을 검증하거나 변형하는 데 사용할 수 있는 허용 컨트롤러의 한 유형입니다. 제3자 애플리케이션은 일반적으로 시스템에 중요한 리소스 및 네임스페이스에서 작동하는 웹훅을 사용합니다. 잘못 구성된 웹훅은 제어 영역 성능과 안정성에 영향을 줄 수 있습니다. 예를 들어 제3자 애플리케이션에서 만든 웹훅이 잘못 구성된 경우 GKE가 관리형 kube-system
네임스페이스에서 리소스를 만들고 수정하지 못하게 되어 클러스터 기능이 저하될 수 있습니다.
Google Kubernetes Engine(GKE)은 클러스터를 모니터링하고 추천자 서비스를 사용하여 플랫폼 사용량을 최적화하는 방법을 안내합니다. 클러스터의 안정성과 성능을 유지하려면 다음 시나리오에 대한 GKE의 권장사항을 참조하세요.
- 작동하지만 사용 가능한 엔드포인트가 없는 웹훅
- 시스템 중요 리소스 및 네임스페이스에서 작동할 때 안전하지 않은 것으로 간주되는 웹훅
이 가이드에서는 잘못 구성된 웹훅을 확인하고 필요한 경우 업데이트하는 방법을 확인할 수 있습니다.
통계 및 추천을 관리하는 방법에 대한 자세한 내용은 통계 및 추천으로 GKE 사용 최적화를 참조하세요.
클러스터에 영향을 줄 수 있는 잘못 구성된 웹훅 식별
클러스터 성능 및 안정성에 영향을 미칠 수 있는 웹훅을 식별하는 통계를 가져오려면 안내 및 권장사항 보기 안내를 따르세요. 다음과 같은 방법으로 통계를 확인할 수 있습니다.
- Google Cloud 콘솔 사용하기
- Google Cloud CLI 또는 Recommender API를 사용하여 하위 유형
K8S_ADMISSION_WEBHOOK_UNSAFE
및K8S_ADMISSION_WEBHOOK_UNAVAILABLE
으로 필터링하기
통계를 통해 웹훅을 식별한 후 안내에 따라 감지된 웹훅 문제 해결을 수행합니다.
GKE가 잘못 구성된 웹훅을 감지하는 경우
GKE는 다음 기준 중 하나가 클러스터에 대해 true이면 통계 및 권장사항을 생성합니다.
K8S_ADMISSION_WEBHOOK_UNAVAILABLE
: GKE 클러스터에 사용 가능한 엔드포인트가 없는 웹훅이 하나 이상 보고됨. 사용 가능한 엔드포인트가 없는 웹훅을 점검하려면 지침을 따르세요.K8S_ADMISSION_WEBHOOK_UNSAFE
: GKE 클러스터에는 가로채는 리소스를 기준으로 안전하지 않은 것으로 간주되는 웹훅이 하나 이상 있음. 안전하지 않은 것으로 간주되는 웹훅을 점검하려면 지침을 따르세요. 다음은 안전하지 않은 것으로 간주되는 웹훅입니다.kube-system
네임스페이스에서 포드 및 임대를 비롯한 리소스를 가로채는 웹훅kube-node-lease
네임스페이스에서 임대를 가로채는 웹훅Nodes
,TokenReviews
,SubjectAccessReviews
및CertificateSigningRequests
를 비롯해 클러스터 범위 시스템 리소스를 가로채는 웹훅
감지된 웹훅 문제 해결
다음 섹션에는 GKE가 잘못 구성되었을 수 있는 웹훅의 문제 해결을 위한 안내가 포함되어 있습니다.
안내를 구현하고 웹훅이 올바르게 구성되면 24시간 이내에 권장사항이 해소되어 더 이상 콘솔에 표시되지 않습니다. 권장사항의 안내를 구현하고 24시간이 지나지 않았으면 권장사항을 해결됨으로 표시할 수 있습니다. 권장사항을 구현하지 않으려면 무시하기를 선택하세요.
사용 가능한 엔드포인트가 없는 웹훅 보고
웹훅에 사용 가능한 엔드포인트가 없다고 보고하면 웹훅 엔드포인트를 지원하는 서비스에 실행 중이 아닌 포드가 하나 이상 있습니다. 웹훅 엔드포인트를 사용하려면 다음 안내에 따라 이 웹훅 엔드포인트를 지원하는 서비스의 포드를 찾아 문제를 해결하세요.
통계 및 권장사항 보기를 통해 한 번에 한 통계씩 선택하여 문제를 해결합니다. GKE는 클러스터당 하나의 통계를 생성하고 조사해야 하는 손상된 엔드포인트가 있는 하나 이상의 웹훅을 나열합니다. 이러한 웹훅마다 통계는 서비스 이름, 손상된 엔드포인트, 엔드포인트가 마지막으로 호출된 시간도 명시합니다.
웹훅과 연결된 서비스의 제공 포드를 찾으세요.
콘솔
통계의 사이드바 패널에서 잘못 구성된 웹훅 테이블을 참조하세요. 서비스 이름을 클릭합니다.
kubectl
다음 명령어를 실행하여 서비스를 설명합니다.
kubectl describe svc SERVICE_NAME -n SERVICE_NAMESPACE
SERVICE_NAME 및 SERVICE_NAMESPACE를 각각 서비스의 이름과 네임스페이스로 바꿉니다.
웹훅에 나열된 서비스 이름을 찾을 수 없는 경우 구성에 나열된 이름과 서비스의 실제 이름 간의 불일치로 인해 사용할 수 없는 엔드포인트가 생길 수 있습니다. 엔드포인트 가용성을 수정하려면 웹훅 구성의 서비스 이름을 올바른 서비스 객체와 일치하도록 업데이트합니다.
이 서비스의 제공 포드를 검사합니다.
콘솔
서비스 세부정보의 제공 포드에서 이 서비스를 지원하는 포드 목록을 확인하세요.
kubectl
배포 또는 포드를 나열하여 실행 중이 아닌 포드를 식별합니다.
kubectl get deployment -n SERVICE_NAMESPACE
또는 다음 명령어를 실행합니다.
kubectl get pods -n SERVICE_NAMESPACE -o wide
실행 중이 아닌 포드의 경우 포드 로그를 검사하여 포드가 실행 중이 아닌 이유를 확인합니다. 포드와 관련된 일반적인 문제에 대한 안내는 배포된 워크로드 문제 해결을 참조하세요.
안전하지 않은 것으로 간주되는 웹훅
웹훅이 시스템 관리 네임스페이스의 리소스 또는 특정 유형의 리소스를 가로채는 경우 GKE는 이를 안전하지 않은 것으로 간주하여 이들 리소스를 가로채지 않도록 웹훅을 업데이트하도록 권장합니다.
- 안내에 따라 통계 및 권장사항 보기를 통해 한 번에 하나의 통계를 선택하여 문제를 해결합니다. GKE는 클러스터당 하나의 통계만 생성하며 이 통계는 하나 이상의 웹훅 구성을 나열하며 각 구성은 웹훅을 하나 이상 나열합니다. 통계는 나열된 각 웹훅 구성에 대해 구성이 플래그로 표시된 이유를 설명합니다.
웹훅 구성을 검사합니다.
콘솔
통계의 사이드바 패널에서 테이블을 참조하세요. 각 행에는 웹훅 구성의 이름과 이 구성이 플래그된 이유입니다.
각 구성을 검사하려면 GKE 객체 브라우저 대시보드에서 이 구성으로 이동할 이름을 클릭합니다.
kubectl
다음
kubectl
명령어를 실행하여 웹훅 구성을 가져오고 CONFIGURATION_NAME을 웹훅 구성 이름으로 바꿉니다.kubectl get validatingwebhookconfigurations CONFIGURATION_NAME -o yaml
이 명령어가 아무것도 반환하지 않으면
validatingwebhookconfigurations
을mutatingwebhookconfigurations
로 바꿔 명령어를 다시 실행합니다.webhooks
섹션에는 하나 이상의 웹훅이 나열됩니다.웹훅이 신고된 이유에 따라 구성을 수정합니다.
kube-system 및 kube-node-lease 네임스페이스 제외
scope
가*
이면 웹훅이 신고됩니다. 또는 범위가Namespaced
이고 다음 조건 중 하나가 true인 경우 웹훅이 플래그 지정됩니다.다음 예시와 같이
operator
조건은NotIn
이고values
는kube-system
과kube-node-lease
를 생략합니다.webhooks: - admissionReviewVersions: ... namespaceSelector: matchExpressions: - key: kubernetes.io/metadata.name operator: NotIn values: - blue-system objectSelector: {} rules: - apiGroups: ... scope: '*' sideEffects: None timeoutSeconds: 3
웹훅이 특정 네임스페이스에서만 작동하도록
scope
가*
가 아닌Namespaced
로 설정되어 있는지 확인합니다. 또한operator
가NotIn
이면values
에kube-system
및kube-node-lease
를 포함합니다(이 예시에서는blue-system
).다음 예시와 같이
operator
조건은In
이고values
는kube-system
과kube-node-lease
를 포함합니다.namespaceSelector: matchExpressions: - key: kubernetes.io/metadata.name operator: In values: - blue-system - kube-system - kube-node-lease
웹훅이 특정 네임스페이스에서만 작동하도록
scope
가*
가 아닌Namespaced
로 설정되어 있는지 확인합니다.operator
가In
이면values
에kube-system
및kube-node-lease
를 포함하지 마세요. 이 예시에서는operator
가In
이므로blue-system
만values
에 있어야 합니다.
일치하는 리소스 제외
웹훅은 다음 예시와 같이 리소스에
nodes
,tokenreviews
,subjectaccessreviews
또는certificatesigningrequests
가 나열된 경우에도 신고됩니다.- admissionReviewVersions: ... resources: - 'pods' - 'nodes' - 'tokenreviews' - 'subjectacessreviews' - 'certificatesigningrequests' scope: '*' sideEffects: None timeoutSeconds: 3
리소스 섹션에서
nodes
,tokenreviews
,subjectaccessreviews
,certificatesigningrequests
를 삭제하세요.pods
를resources
로 유지할 수 있습니다.