Skip to content

필사 모드: Kyverno 프로덕션 운영: HA, 모니터링, 트러블슈팅

한국어
0%
정확도 0%
💡 왼쪽 원문을 읽으면서 오른쪽에 따라 써보세요. Tab 키로 힌트를 받을 수 있습니다.
원문 렌더가 준비되기 전까지 텍스트 가이드로 표시합니다.

1. HA(고가용성) 배포

1.1 레플리카 구성

helm install kyverno kyverno/kyverno -n kyverno --create-namespace \

--set admissionController.replicas=3 \

--set backgroundController.replicas=2 \

--set cleanupController.replicas=2 \

--set reportsController.replicas=2

1.2 리소스 할당

values.yaml

admissionController:

replicas: 3

container:

resources:

limits:

cpu: '2'

memory: 2Gi

requests:

cpu: 500m

memory: 512Mi

topologySpreadConstraints:

- maxSkew: 1

topologyKey: kubernetes.io/hostname

whenUnsatisfiable: DoNotSchedule

labelSelector:

matchLabels:

app.kubernetes.io/component: admission-controller

backgroundController:

replicas: 2

resources:

limits:

cpu: '1'

memory: 1Gi

requests:

cpu: 200m

memory: 256Mi

1.3 failurePolicy 전략

프로덕션 권장: 핵심 정책은 Fail, 비핵심은 Ignore

Helm values

admissionController:

failurePolicy: Fail # Webhook 장애 시 요청 거부 (보안 우선)

또는 개별 정책에서 설정

apiVersion: kyverno.io/v1

kind: ClusterPolicy

metadata:

name: critical-policy

spec:

failurePolicy: Fail

validationFailureAction: Enforce

**주의**: `failurePolicy: Fail` 설정 시 Kyverno가 다운되면 모든 리소스 생성/수정이 차단됩니다. PDB(PodDisruptionBudget)를 반드시 설정하세요.

apiVersion: policy/v1

kind: PodDisruptionBudget

metadata:

name: kyverno-admission-controller

namespace: kyverno

spec:

minAvailable: 2

selector:

matchLabels:

app.kubernetes.io/component: admission-controller

2. 정책 보고서(Policy Reports)

2.1 PolicyReport CRD

네임스페이스별 정책 보고서 조회

kubectl get policyreport -n production

클러스터 레벨 보고서

kubectl get clusterpolicyreport

상세 보고서 조회

kubectl get policyreport -n production -o yaml

2.2 보고서 구조

apiVersion: wgpolicyk8s.io/v1alpha2

kind: PolicyReport

metadata:

name: polr-ns-production

namespace: production

results:

- message: "Validation rule 'require-labels' passed"

policy: require-labels

rule: check-app-label

result: pass

source: kyverno

category: Best Practices

timestamp:

nanos: 0

seconds: 1710950400

resources:

- apiVersion: apps/v1

kind: Deployment

name: web-app

namespace: production

summary:

pass: 45

fail: 3

warn: 2

error: 0

skip: 0

2.3 Policy Reporter UI

Policy Reporter 설치 (선택적 UI)

helm repo add policy-reporter https://kyverno.github.io/policy-reporter

helm install policy-reporter policy-reporter/policy-reporter -n kyverno \

--set ui.enabled=true \

--set kyvernoPlugin.enabled=true

3. 모니터링

3.1 Prometheus 메트릭

Kyverno는 기본적으로 Prometheus 메트릭을 노출합니다:

메트릭 엔드포인트

http://kyverno-svc.kyverno:8000/metrics

주요 메트릭:

| 메트릭 | 설명 |

| ----------------------------------------- | -------------------------------- |

| kyverno_admission_requests_total | 총 Admission 요청 수 |

| kyverno_admission_review_duration_seconds | Admission 리뷰 처리 시간 |

| kyverno_policy_results_total | 정책 결과 (pass/fail/warn/error) |

| kyverno_policy_execution_duration_seconds | 정책 실행 시간 |

| kyverno_policy_changes_total | 정책 변경 횟수 |

| kyverno_client_queries_total | Kubernetes API 쿼리 수 |

3.2 ServiceMonitor 설정

apiVersion: monitoring.coreos.com/v1

kind: ServiceMonitor

metadata:

name: kyverno

namespace: kyverno

spec:

selector:

matchLabels:

app.kubernetes.io/name: kyverno

endpoints:

- port: metrics

interval: 30s

path: /metrics

3.3 Grafana 대시보드

주요 대시보드 패널:

- Admission 요청률 및 레이턴시

- 정책 결과 분포 (pass/fail/warn)

- 정책별 실행 시간

- Webhook 에러율

- 리소스 사용량 (CPU/메모리)

알림 규칙 예시 (PrometheusRule)

apiVersion: monitoring.coreos.com/v1

kind: PrometheusRule

metadata:

name: kyverno-alerts

namespace: kyverno

spec:

groups:

- name: kyverno

rules:

- alert: KyvernoWebhookHighLatency

expr: histogram_quantile(0.99, rate(kyverno_admission_review_duration_seconds_bucket[5m])) > 10

for: 5m

labels:

severity: warning

annotations:

summary: 'Kyverno webhook latency is high'

- alert: KyvernoHighFailureRate

expr: rate(kyverno_admission_requests_total{success="false"}[5m]) > 0.1

for: 5m

labels:

severity: critical

4. 백그라운드 스캐닝

4.1 기존 리소스 정책 평가

Background Controller가 기존 리소스에 대해 정책을 주기적으로 평가합니다:

apiVersion: kyverno.io/v1

kind: ClusterPolicy

metadata:

name: check-existing-resources

spec:

validationFailureAction: Audit # 기존 리소스는 Audit 모드 권장

background: true # 백그라운드 스캐닝 활성화 (기본값: true)

rules:

- name: check-labels

match:

any:

- resources:

kinds:

- Deployment

validate:

message: 'Required label missing'

pattern:

metadata:

labels:

app.kubernetes.io/name: '?*'

4.2 스캐닝 주기 설정

Helm values로 스캐닝 주기 조정

helm upgrade kyverno kyverno/kyverno -n kyverno \

--set backgroundController.backgroundScanInterval=1h

5. PolicyException (예외 메커니즘)

5.1 정책 예외 정의

특정 리소스나 네임스페이스에 대해 정책 예외를 정의할 수 있습니다:

apiVersion: kyverno.io/v2beta1

kind: PolicyException

metadata:

name: allow-privileged-monitoring

namespace: monitoring

spec:

exceptions:

- policyName: disallow-privileged

ruleNames:

- check-privileged

match:

any:

- resources:

kinds:

- Pod

namespaces:

- monitoring

names:

- 'prometheus-*'

- 'node-exporter-*'

5.2 예외 활성화

PolicyException 기능 활성화 (Helm)

helm upgrade kyverno kyverno/kyverno -n kyverno \

--set features.policyExceptions.enabled=true \

--set features.policyExceptions.namespace="*"

6. 트러블슈팅

6.1 Webhook 타임아웃

Webhook 타임아웃 확인

kubectl get mutatingwebhookconfigurations kyverno-resource-mutating-webhook-cfg -o yaml | grep timeout

타임아웃 증가

helm upgrade kyverno kyverno/kyverno -n kyverno \

--set admissionController.webhookTimeout=30

6.2 API 서버 연결 문제

Kyverno Pod 로그 확인

kubectl logs -n kyverno -l app.kubernetes.io/component=admission-controller --tail=100

Webhook 상태 확인

kubectl get mutatingwebhookconfigurations

kubectl get validatingwebhookconfigurations

Kyverno 서비스 엔드포인트 확인

kubectl get endpoints -n kyverno kyverno-svc

6.3 정책이 적용되지 않는 경우

정책 상태 확인

kubectl get clusterpolicy -o wide

kubectl describe clusterpolicy require-labels

정책 보고서에서 실패 원인 확인

kubectl get policyreport -A -o jsonpath='{range .items[*].results[?(@.result=="fail")]}{.policy}: {.message}{"\n"}{end}'

dry-run으로 정책 테스트

kubectl apply -f test-resource.yaml --dry-run=server

6.4 성능 문제

Admission 리뷰 레이턴시 확인

kubectl exec -n kyverno deploy/kyverno-admission-controller -- wget -qO- localhost:8000/metrics | grep admission_review_duration

리소스 사용량 확인

kubectl top pods -n kyverno

Background Controller 스캔 상태

kubectl logs -n kyverno -l app.kubernetes.io/component=background-controller --tail=50

7. 업그레이드 전략

현재 버전 확인

helm list -n kyverno

업그레이드 (Helm)

helm repo update

helm upgrade kyverno kyverno/kyverno -n kyverno \

--reuse-values \

--version X.Y.Z

CRD 수동 업그레이드 (필요 시)

kubectl apply -f https://raw.githubusercontent.com/kyverno/kyverno/release-X.Y/config/crds/kyverno.io_clusterpolicies.yaml

업그레이드 주의사항:

- CRD 변경이 있을 수 있으므로 릴리스 노트 확인

- Audit 모드에서 먼저 테스트

- PDB가 설정되어 있는지 확인

- 롤백 계획 준비

8. 정리

Kyverno 프로덕션 운영 핵심:

1. **HA 배포**: 레플리카 3+, PDB 설정, TopologySpreadConstraints

2. **정책 보고서**: PolicyReport CRD로 정책 준수 현황 가시화

3. **모니터링**: Prometheus 메트릭 + Grafana 대시보드 + 알림 규칙

4. **백그라운드 스캐닝**: 기존 리소스에 대한 주기적 정책 평가

5. **예외 메커니즘**: PolicyException으로 정당한 예외 관리

6. **트러블슈팅**: Webhook 로그, 정책 상태, 보고서를 통한 진단

현재 단락 (1/213)

helm install kyverno kyverno/kyverno -n kyverno --create-namespace \

작성 글자: 0원문 글자: 6,136작성 단락: 0/213