LabHub

KCA — Kyverno 인증 어소시에이트 · 진짜 Kyverno 에서 확인하기 · 실습

정책이 실제로 막는 것을 본다

LabHub 에서 이어서 보기

이 실습은 진짜 Kyverno 에서 돕니다

VM 안에 k3s + Kyverno 가 실제로 떠 있습니다. 어드미션 웹훅이 등록되어
있어서 정책을 붙이면 **정말로 거부되고, 정말로 값이 주입되며, 정말로 다른
오브젝트가 만들어집니다.**

KCA 과정의 다른 실습은 CRD 만 적재된 가짜 클러스터에서 돕니다. 거기서는
정책을 아무리 잘 써도 아무 일도 일어나지 않습니다 — 그런데 kubectl apply
성공하므로 화면만 보면 정상입니다.

처음 뜨는 데 4~5분 걸립니다. Kyverno 를 설치하고 웹훅이 등록되기를
기다립니다.

목표

정책의 세 동작(validate·mutate·generate)이 각각 언제 어떻게 일어나는지
직접 확인하고, EnforceAudit 의 차이, 그리고 예외를 빠뜨렸을 때
무슨 일이 생기는지를 봅니다.

왜 중요한가

정책 엔진에서 가장 위험한 상태는 "정책이 틀린 것" 이 아니라 **"정책이 아무
데도 적용되지 않는 것"** 입니다. 후자는 조용하기 때문입니다.

그리고 세 동작은 일어나는 시점이 다릅니다.

| 동작 | 언제 | 무엇을 |
|---|---|---|
| mutate | 어드미션, validate 보다 먼저 | 오브젝트를 고친다 |
| validate | 어드미션 | 거절하거나 통과시킨다 |
| generate | 어드미션 뒤에, 별도 컨트롤러가 | 다른 오브젝트를 만든다 |

이 순서를 모르면 정책이 서로를 무력화합니다. mutate 가 라벨을 넣어 주는데
validate 가 그 라벨을 요구한다면, 순서 덕분에 통과합니다. 반대로
generate 는 어드미션 밖에서 일어나므로 별도의 권한이 필요합니다.

단계

파드는 kca 네임스페이스에 만듭니다.

1. Kyverno 가 어떻게 호출되는지 확인해 /root/kca/install.txt 에 담으세요. 웹훅 설정이 등록되어 있어야 합니다.
2. require-team ClusterPolicy(Enforce)로 team 라벨을 요구하고, 라벨 없는 파드가 거부되는 것과 갖춘 ok-pod 가 뜨는 것을 /root/kca/validate.txt 에 담으세요.
3. add-defaults 정책으로 파드에 owner 라벨을 주입하고, mutated 파드에 실제로 들어간 것을 /root/kca/mutate.txt 에 담으세요. mutate 와 validate 의 순서도 적습니다.
4. gen-baseline 정책으로 새 네임스페이스에 baseline ConfigMap 을 만들게 하고, tenant-x 를 만들어 확인해 /root/kca/generate.txt 에 담으세요.
5. warn-only 정책을 Audit 으로 걸고, 위반하는 violator 파드가 만들어지는 것PolicyReport 에 기록되는 것을 /root/kca/audit.txt 에 담으세요.
6. require-team예외를 더해 시스템 네임스페이스를 빼고, 왜 그래야 하는지를 /root/kca/exclude.txt 에 담으세요.
7. /root/kca/test-pod.yaml 을 만들고 kyverno CLI 로 클러스터에 올리기 전에 시험해 /root/kca/cli.txt 에 담으세요.
8. /root/kca/report.mdenforce_blocks=yes, audit_blocks=no, policies= 세 줄과 설명을 쓰세요.

참고

단계 8개

  1. 정책은 어떻게 불리는가
  2. 거절한다
  3. 고친다 — 그리고 순서가 있다
  4. 다른 것을 만든다
  5. 막지 않고 기록만 한다
  6. 시스템을 빼지 않으면 클러스터가 잠긴다
  7. 올리기 전에 시험한다
  8. 무엇을 배웠나