정책 컨트롤러 문제 해결

이 페이지에서는 정책 컨트롤러 관련 문제를 해결하는 방법을 보여줍니다.

일반적인 도움말

다음 섹션에서는 정책 컨트롤러 관련 문제를 해결하기 위한 일반적인 조언을 제공합니다.

정책 컨트롤러 중지

정책 컨트롤러가 클러스터에 문제를 일으키는 경우 문제를 조사하는 동안 정책 컨트롤러를 중지할 수 있습니다.

측정항목 검사

정책 컨트롤러 측정항목 검사를 수행하면 정책 컨트롤러 문제를 진단하는 데 도움이 됩니다.

설치 확인

정책 컨트롤러 및 제약조건 템플릿 라이브러리가 성공적으로 설치되었는지 확인할 수 있습니다.

정책 컨트롤러 분리

드물지만 클러스터에서 정책 컨트롤러를 분리해야 할 수도 있습니다. 이렇게 하면 정책 컨트롤러 관리가 완전히 사용 중지됩니다. detach 명령어를 사용하기 전에 문제를 해결할 수 있는지 확인하기 위해 정책 컨트롤러를 일시적으로 중지해 보세요.

  1. Fleet에서 정책 컨트롤러를 분리합니다.

    gcloud container fleet policycontroller detach
    
  2. 정책 컨트롤러를 다시 연결합니다.

    gcloud container fleet policycontroller enable
    

제약조건 템플릿 생성 오류

disallowed ref를 언급하는 오류가 표시되면 참조 제약조건을 사용하는지 확인합니다. 예를 들어 먼저 참조 제약조건 사용 없이 제약조건 템플릿에서 data.inventory를 사용하는 경우 다음과 같은 오류가 발생합니다.

admission webhook "validation.gatekeeper.sh" denied the request: check refs failed on module {templates["admission.k8s.gatekeeper.sh"]["MyTemplate"]}: disallowed ref data.inventory...

제약조건이 적용되지 않음

다음 섹션에서는 제약조건이 적용되지 않는 것으로 확인되거나 의심되는 경우 문제 해결 안내를 제공합니다.

제약조건 적용 여부 확인

제약조건이 적용되지 않을지 우려되는 경우 제약조건의 spec.status와 제약조건 템플릿을 확인할 수 있습니다. 상태를 확인하려면 다음 명령어를 실행하세요.

kubectl describe CONSTRAINT_TEMPLATE_NAME CONSTRAINT_NAME

다음을 바꿉니다.

  • CONSTRAINT_TEMPLATE_NAME: 확인할 제약조건 템플릿의 이름입니다. 예를 들면 K8sNoExternalServices입니다.
  • CONSTRAINT_NAME: 확인할 제약조건의 Name입니다.

    필요한 경우 kubectl get constraint를 실행하여 시스템에 설치된 제약조건 템플릿과 제약조건을 확인합니다.

kubectl describe 명령어 출력에서 metadata.generationstatus.byPod.observedGeneration 필드의 값을 기록해 둡니다. 다음 예시에서는 이러한 값이 굵게 표시됩니다.

Name:         no-internet-services
Namespace:
API Version:  constraints.gatekeeper.sh/v1beta1
Kind:         K8sNoExternalServices
Metadata:
  Creation Timestamp:  2021-12-03T19:00:06Z
  Generation:          1
  Managed Fields:
    API Version:  constraints.gatekeeper.sh/v1beta1
    Fields Type:  FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          f:config.k8s.io/owning-inventory:
          f:configmanagement.gke.io/cluster-name:
          f:configmanagement.gke.io/managed:
          f:configmanagement.gke.io/source-path:
          f:configmanagement.gke.io/token:
          f:configsync.gke.io/declared-fields:
          f:configsync.gke.io/git-context:
          f:configsync.gke.io/manager:
          f:configsync.gke.io/resource-id:
        f:labels:
          f:app.kubernetes.io/managed-by:
          f:configsync.gke.io/declared-version:
      f:spec:
        f:parameters:
          f:internalCIDRs:
    Manager:      configsync.gke.io
    Operation:    Apply
    Time:         2022-02-15T17:13:20Z
    API Version:  constraints.gatekeeper.sh/v1beta1
    Fields Type:  FieldsV1
    fieldsV1:
      f:status:
    Manager:         gatekeeper
    Operation:       Update
    Time:            2021-12-03T19:00:08Z
  Resource Version:  41460953
  UID:               ac80849d-a644-4c5c-8787-f73e90b2c988
Spec:
  Parameters:
    Internal CID Rs:
Status:
  Audit Timestamp:  2022-02-15T17:21:51Z
  By Pod:
    Constraint UID:       ac80849d-a644-4c5c-8787-f73e90b2c988
    Enforced:             true
    Id:                   gatekeeper-audit-5d4d474f95-746x4
    Observed Generation:  1
    Operations:
      audit
      status
    Constraint UID:       ac80849d-a644-4c5c-8787-f73e90b2c988
    Enforced:             true
    Id:                   gatekeeper-controller-manager-76d777ddb8-g24dh
    Observed Generation:  1
    Operations:
      webhook
  Total Violations:  0
Events:              <none>

observedGeneration 값이 metadata.generation 값과 동일한(이전 예시 사례) 정책 컨트롤러 포드가 표시될 때마다 제약조건이 적용되었을 수 있습니다. 하지만 이러한 값이 일치해도 제약조건 적용 문제가 발생하는 경우 다음 섹션을 참조하세요. 일치하는 값이 일부만 있거나 일부 포드가 나열되지 않으면 제약조건 상태를 알 수 없습니다. 제약조건이 정책 컨트롤러의 포드 간에 일관되지 않게 적용되었거나 전혀 적용되지 않았을 수 있습니다. 일치하는 값이 없으면 제약조건이 적용되지 않았습니다.

제약조건이 적용되지 않았지만 감사 결과가 보고됨

이전 섹션에서 설명한 observedGeneration 검사에 일치하는 값이 있고 예상 위반을 표시하는 제약조건에 감사 결과가 보고된 경우(인바운드 요청이 아닌 기존 객체) 제약조건이 적용되지 않으면 문제가 웹훅과 관련될 가능성이 높습니다. 웹훅에 다음 문제 중 하나가 발생할 수 있습니다.

  • 정책 컨트롤러 웹훅 포드가 작동하지 않을 수 있습니다. Kubernetes 디버깅 기법을 사용하면 웹훅 포드의 문제를 해결하는 데 도움이 될 수 있습니다.
  • API 서버와 웹훅 서비스 사이에 방화벽이 있을 수 있습니다. 방화벽 문제 해결 방법에 대한 자세한 내용은 방화벽 제공업체 문서를 참조하세요.

참조 제약조건이 적용되지 않음

제약조건이 참조 제약조건인 경우 필요한 리소스가 캐시되었는지 확인합니다. 리소스 캐시 방법은 참조 제약조건의 정책 컨트롤러 구성을 참조하세요.

제약조건 템플릿 문법 확인

자체 제약조건 템플릿을 작성했지만 적용되지 않았으면 제약조건 템플릿 문법에 오류가 있을 수 있습니다.

다음 명령어를 사용하여 템플릿을 검토할 수 있습니다.

kubectl describe constrainttemplate CONSTRAINT_TEMPLATE_NAME

CONSTRAINT_TEMPLATE_NAME을 조사하려는 템플릿의 이름으로 바꿉니다. 오류가 status 필드에 보고됩니다.

다음 단계