본문으로 건너뛰기

Kyverno

Kyverno는 Lumie의 클러스터 admission guardrail입니다. 저장소는 admission controller에 업스트림 차트를 사용하고, 정책 집합은 security/kyverno/manifests/ 아래 체크인된 YAML 파일로 유지합니다.

책임

  • Kyverno admission 컨트롤러 실행
  • 체크인된 정책 집합이 지시하는 경우 들어오는 pod spec 변형
  • validation 정책을 Audit 모드로 유지해 워크로드 생성을 막지 않고 admission 시점 가시성 제공
  • admission-controller 메트릭을 Prometheus에 노출

소스 경로

경로역할
lumie-infra/security/kyverno/argocd.yamlkyverno 네임스페이스를 대상으로 하는 ArgoCD Application
lumie-infra/security/kyverno/helm-values.yamladmission-컨트롤러 이미지, 리소스, metrics, 클러스터 전역 필터
lumie-infra/security/kyverno/kustomization.yaml차트 위에 로컬 정책 파일 추가
lumie-infra/security/kyverno/manifests/policies/require-zot-registry.yaml이미지 출처에 대한 audit 정책
lumie-infra/security/kyverno/manifests/policies/require-security-context.yamlnon-root 및 privilege 설정에 대한 audit 정책
lumie-infra/security/kyverno/manifests/policies/require-resource-limits.yaml메모리/CPU request와 CPU limit 금지에 대한 audit 정책
lumie-infra/security/kyverno/manifests/policies/remove-cpu-limits.yamlpod에서 CPU limit를 제거하는 admission 시점 mutation
lumie-infra/security/kyverno/manifests/policy-exceptions.yaml부트스트랩 네임스페이스, Falco, Tekton DinD, CNPG에 대한 명시적 예외

정책 표면

체크인된 정책은 의도적으로 보수적입니다.

  • 이 폴더의 모든 validation 정책은 validationFailureAction: Audit를 사용합니다.
  • remove-cpu-limits만 체크인된 mutate 규칙이며 background reconciliation이 아니라 admission 시점에만 실행됩니다.

즉, 현재 Kyverno 계약은 강제 차단이나 background report가 아니라 admission 시점 가시성과 정규화입니다.

런타임 흐름

중요한 구현 세부 사항

  • Helm은 crds.install: false로 설정됩니다. 저장소는 Kyverno CRD가 이미 존재한다고 가정하며, values 파일 주석에 수동 CRD 설치를 문서화합니다.
  • 차트는 config.resourceFilters를 통해 시스템 네임스페이스와 churn이 큰 리소스 종류를 제외합니다.
  • admission-컨트롤러 ServiceMonitor만 활성입니다. Background, cleanup, reports controller는 6Gi 노드 footprint 계획에 맞춰 비활성화되어 있습니다.

장애 동작과 운영 리스크

  • CRD 누락 또는 CRD/버전 불일치가 있으면 ArgoCD 앱은 synced로 보이더라도 정책 오브젝트가 적용되지 않거나 dry-run에서 건너뛰어질 수 있습니다.
  • validation이 audit 전용이므로 정책 위반은 여전히 admission될 수 있습니다.
  • PolicyException 오브젝트는 일부 경우, 특히 Tekton DinD 예외에서 의도적으로 범위가 넓으므로 더 많은 carve-out을 추가하기 전에 신중히 검토해야 합니다.
  • 이미지 레지스트리 정책은 container와 init container만 검사하고 네임스페이스 제외를 사용하므로, 부트스트랩 네임스페이스는 이 보장 밖에 남아 있습니다.

관측성

  • Kyverno는 admission-컨트롤러 메트릭을 ServiceMonitor로 노출합니다.
  • 정책의 효과는 background PolicyReport가 아니라 admission 로그와 메트릭에서 확인합니다.
  • ArgoCD 헬스는 컨트롤러 가용성을 확인할 뿐 정책 정확성까지 보장하지는 않습니다.

검증

kubectl get applications.argoproj.io -n argocd kyverno
kubectl get deploy,pods -n kyverno -l app.kubernetes.io/instance=kyverno
kubectl get clusterpolicy
kubectl get policyexception -n kyverno
kubectl logs -n kyverno -l app.kubernetes.io/instance=kyverno --all-containers --tail=200

성공 신호:

  • kyverno Argo CD application이 HealthySynced 상태입니다.
  • Kyverno 네임스페이스에 준비된 kyverno-admission-controller deployment 하나가 존재합니다.
  • kubectl get clusterpolicy가 CRD 누락 오류 없이 체크인된 audit 및 mutate 정책을 반환합니다.
  • kubectl get policyexception -n kyverno가 부트스트랩, Falco, Tekton DinD, CNPG에 대한 체크인된 carve-out을 반환합니다.

관련 페이지