Kyverno를 사용하여 클러스터 정책 관리 단순화하기

IMKUNYOUNG·2025년 4월 24일
0
post-thumbnail

Kyverno는 Kubernetes 클러스터에서 다양한 정책(Policy)을 선언적으로 정의하고 적용할 수 있는 Kubernetes 네이티브 오픈소스 정책 엔진입니다. Kyverno를 활용하면 특정 이미지 태그 제한, 호스트 포트 사용 제한, 이미지 레지스트리 제한 등 보안과 거버넌스에 필요한 다양한 정책을 손쉽게 관리할 수 있습니다.

기존의 OPA Gatekeeper와 같은 도구와 달리, Kyverno는 별도의 정책 언어를 배우지 않아도 되고, Kubernetes의 YAML 매니페스트 형태로 정책을 작성할 수 있어 진입장벽이 낮고, kubectl, git, kustomize 등 익숙한 도구들과 바로 연동할 수 있습니다.

Kyverno의 주요 특징

  • Kubernetes Native: 정책을 Kubernetes 리소스(CR)로 관리. 별도의 DSL이 필요 없음.
  • 정책의 유형:
    • 유효성 검사(Validate): 리소스가 정책을 준수하는지 확인
    • 변형(Mutate): 리소스를 자동으로 수정
    • 생성(Generate): 새로운 리소스 자동 생성
    • 정리(Cleanup): 불필요한 리소스 자동 삭제
  • 정책 적용 방식: 정책 위반 시 차단(enforce) 또는 감사(audit) 모드 선택 가능.
  • CLI 지원: Kyverno CLI를 통해 정책을 미리 테스트하고, CI/CD 파이프라인에 통합 가능.
  • 확장성: 여러 클러스터에 동시에 정책 적용 가능. 멀티테넌시 환경이나 대규모 운영에 적합.
  • 보안 강화: 컨테이너 이미지 서명 검사, root 권한 방지 등 보안 정책 적용 가능.
  • 정책 라이브러리: 즉시 사용 가능한 다양한 정책 템플릿 제공.

Kyverno의 동작 방식

Kyverno는 Kubernetes의 Admission Controller로 동작하며, API 서버로 들어오는 리소스 생성/수정/삭제 요청을 가로채어 정책을 적용합니다. 정책에 맞지 않는 리소스는 거부하거나, 자동으로 수정하거나, 경고 메시지만 남길 수 있습니다.

  • Webhook: AdmissionReview 요청을 받아 정책을 적용.
  • PolicyController: 정책 리소스를 감시하고, 주기적으로 백그라운드 스캔 수행.
  • GenerateController: 리소스 생성 및 생명주기 관리.

Kyverno 활용 사례

  • 모든 Pod에 특정 라벨 강제 적용
  • 미승인 이미지 사용 차단
  • Pod의 CPU/메모리 limit 강제
  • 네임스페이스 생성 시 자동으로 네트워크 정책 생성
  • 여러 클러스터에 정책 일괄 적용

예시: Pod에 라벨 강제 적용

apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: require-labels
spec:
  validationFailureAction: enforce
  rules:
    - name: check-for-labels
      match:
        any:
          - resources:
              kinds:
                - Pod
      validate:
        message: "label 'app.kubernetes.io/name' is required"
        pattern:
          metadata:
            labels:
              app.kubernetes.io/name: "?*"

이 정책을 적용하면, 해당 라벨이 없는 Pod은 생성이 거부됩니다.

설치 방법

  • Manifest 설치:
    kubectl create -f https://raw.githubusercontent.com/kyverno/kyverno/main/config/install.yaml
  • Helm 설치:
    helm repo add kyverno https://kyverno.github.io/kyverno/
    helm repo update
    helm install kyverno kyverno/kyverno -n kyverno --create-namespace
    고가용성(HA)이 필요한 경우 replicaCount를 늘릴 수 있습니다.

Kyverno vs OPA Gatekeeper

특징KyvernoOPA Gatekeeper
정책 언어YAML (Kubernetes CRD)Rego (별도 DSL)
진입장벽낮음다소 높음
정책 관리 방식kubectl, git, kustomize 등 사용 가능별도 도구 필요
정책 유형Validate, Mutate, Generate, CleanupValidate, Mutate
네이티브 통합Kubernetes 네이티브Kubernetes 네이티브

마치며

Kyverno는 Kubernetes 환경에서 정책 기반의 거버넌스와 보안을 쉽고 강력하게 실현할 수 있는 도구입니다. 별도의 언어 학습 없이 YAML만으로 정책을 선언할 수 있어, DevOps 및 SRE 환경에서 빠르게 도입할 수 있고, 대규모 클러스터 운영에도 적합합니다.

0개의 댓글