Kyverno는 Kubernetes 용 policy engine입니다. Kyverno 정책을 활용하여 kubernetes 리소스가 정책에 부합하는지 검사하고, 필요하면 리소스를 변경하거나 생성할 수 있습니다. 이 문서에서는 Kyverno 구조 및 동작 방식과 활용 방안을 간략히 소개합니다.
맛보기 : Kyverno 정책 설정 및 활용 예시
먼저 모든 Pod는 app.kubernetes.io/name 라벨을 포함하도록 하는 규칙을 포함하는 아래 정책을 배포하고 실제로 어떻게 동작하는지 확인해보려고 합니다.
A. Policy 적용하기
아래와 같이 예시 정책을 적용합니다. 만일 아직 Kyverno가 설치되지 않았다면 아래 설치하기 섹션을 먼저 진행합니다.
Kyverno는 Kubernetes Cluster에서 dynamic admission controller로 동작합니다. Kyverno는 kube-apiserver로부터 admission HTTP callback들의 확인 또는 변경을 수신하고, 정책 수용과 요청 거절을 반환하기 위한 정책을 적용합니다.
Webhook : kube-apiserver의 AdmissionReview 요청을 처리
Monitor : webhook에 필요한 설정을 생성하고 관리
PolicyController : policy 리소스를 감시하며, 설정된 스캔 간격에 따라서 백그라운드 스캔을 시작
GenerateController : 생성된 리소스들의 생명주기를 관리
설치하기
Kyverno는 최신 버전의 manifest 또는 Helm을 사용하여 설치할 수 있습니다.
# Scan your Helm repositories to fetch the latest available charts. helm repo update
# Install the Kyverno Helm chart into a new namespace called "kyverno" helm install kyverno kyverno/kyverno -n kyverno --create-namespace --set replicaCount=3
Kubernetes 1.23.0-1.23.2의 알려진 문제 때문에 1.23 버전은 1.23.3부터 지원합니다.
Kyverno v1.7.0은 N-2 version에 호환하는 Kubernetes project와 동일한 정책을 따릅니다. 일반적으로는 이전 버전에서도 동작하겠지만, 테스트되지는 않았습니다.
Policies and Rules
Policy는 Rule들의 집합이고, 각 rule은 하나의 match와 mutate, validate, generate resource 또는 verifyImages 중 하나로 구성됩니다. Policy의 종류(kind)는 클러스터 전체에 적용되는 ClusterPolicy와 namespace에 적용되는 Policy가 있습니다.
정책은 정의된 순서대로 적용됩니다. admission control에서 mutation 규칙은 validation 규칙 전에 적용되기 때문에 mutation에 의한 결과를 validation할 수 있습니다. 모든 mutation 규칙은 모든 정책에서 validation 규칙이 적용되기 전에 적용됩니다.