워크로드 가드레일
이 페이지는 Lumie의 애플리케이션 계층 워크로드 가드레일에 대한
reference 문서입니다. Helm values 파일과 실제 실행 중인 워크로드
사이에 놓인 체크인된 안전 장치, 즉 PodDisruptionBudget, 네임스페이스 수준
NetworkPolicy, audit 모드 Kyverno 정책, 매니페스트에 아직 남아 있는
Goldilocks 인접 라벨을 다룹니다.
소스 경로
| 경로 | 역할 |
|---|---|
lumie-infra/charts/common/values.yaml | 리소스 형태, 보안 컨텍스트, 롤아웃 전략, 선택적 PDB 설정을 포함한 공통 워크 로드 기본값 |
lumie-infra/charts/common/templates/pdb.yaml | 공통 PDB 렌더링 계약 |
lumie-infra/applications/lumie/backend/common-values.yaml | 백엔드의 PDB, 리소스 요청, 보안 컨텍스트 opt-in |
lumie-infra/applications/lumie/frontend/common-values.yaml | 프론트엔드의 PDB, 리소스 요청, 보안 컨텍스트 opt-in |
lumie-infra/applications/lumie/worker/grading-svc/common-values.yaml | 워커의 PDB, 리소스 요청, 보안 컨텍스트 opt-in |
lumie-infra/applications/lumie/{backend,frontend,worker/grading-svc,develop}/manifests/network-policy.yaml | default-deny와 명시적 allow를 조합한 NetworkPolicy 집합 |
lumie-infra/security/kyverno/argocd.yaml | Kyverno controller와 로컬 정책 집합을 위한 ArgoCD 애플리케이션 |
lumie-infra/security/kyverno/manifests/policies/*.yaml | 체크인된 validation 및 mutate 정책 |
lumie-infra/security/kyverno/manifests/policy-exceptions.yaml | bootstrap, Falco, Tekton DinD, CNPG에 대한 명시적 예외 |
lumie-infra/observability/goldilocks/argocd.yaml | 저장소에 남아 있는 Goldilocks 애플리케이션 정의 |
lumie-infra/observability/kustomization.yaml | 현재 Goldilocks를 비활성화한 활성 observability 루트 |
가드레일 계층
| 계층 | 위치 | 오늘 수행하는 역할 |
|---|---|---|
| 공통 chart 기본값 | charts/common/values.yaml | 리소스, 보안 컨텍스트, 롤아웃 전략, affinity, 선택적 PDB의 기본 형태를 정의 |
| 애플리케이션별 opt-in | applications/lumie/**/common-values.yaml | 개별 워크로드마다 가드레일을 켜거나 조정 |
| 네임스페이스 NetworkPolicy | applications/lumie/**/manifests/network-policy.yaml | default-deny와 명시적 의존성 허용을 강제 |
| admission 정책 | security/kyverno/manifests/** | 이미지 registry, 보안 컨텍스트, 리소스 정책을 감사하고 admission 시 CPU limit를 제거 |
| 권고 라벨 | ArgoCD 매니페스트의 goldilocks.fairwinds.com/enabled 라벨 | 매니페스트에는 남아 있지만 Goldilocks 자체는 활성 observability 루트에 없음 |
PodDisruptionBudget 계약
공통 PDB 템플릿은 의도적으로 maxUnavailable 기반입니다.
대표 발췌:
spec:
maxUnavailable: {{ $comp.podDisruptionBudget.maxUnavailable | default 1 }}
템플릿 주석은 그 이유를 설명합니다. KEDA가 관리하는 워크로드가 복제본 1개로
줄어든 상태에서 minAvailable: 1을 쓰면 노드 드레인이 교착 상태에 빠질 수
있습니다.
현재 opt-in은 좁고 명시적입니다.
| 워크로드 | PDB 상태 | 소스 |
|---|---|---|
lumie-backend | 활성, maxUnavailable: 1 | applications/lumie/backend/common-values.yaml |
lumie-frontend | 활성, maxUnavailable: 1 | applications/lumie/frontend/common-values.yaml |
grading-svc | 활성, maxUnavailable: 1 | applications/lumie/worker/grading-svc/common-values.yaml |
모든 워크로드가 PDB를 상속받는다고 가정하면 안 됩니다. 공통 chart는 애플리케이션 values가 opt-in할 때만 PDB를 렌더링합니다.
NetworkPolicy 계약
Lumie는 네임스페이스 수준 default-deny 정책과 명시적 allow 목록을 사용합니다.
현재 체크인된 적용 범위:
lumie-dev: 공용 dev 네임스페이스 가드레일lumie-backend: default-deny에 더해 Postgres, RabbitMQ, Redis, MinIO, Vault, 워커, DNS, HTTPS, Traefik, cert-manager, 프론트엔드에 대한 명시적 ingress 및 egress 허용lumie-frontend: default-deny에 더해 backend, Vault, DNS, HTTPS, Traefik, cert-manager 허용lumie-worker:grading-svc에 고정된 네임스페이스 전역 워커 가드레일이며,podSelector: {}를 사용해lumie-worker의 모든 워커 pod에 적용
현재 상태에서 중요한 세부사항:
- 운영 Traefik은 전용
traefik네임스페이스가 아니라kube-system에 있는 것이 전제입니다 - 워커 정책은 의도적으로 모든 워커 의존성을 합친 union입니다
- HTTPS egress는 체크인된 정책 모델에 FQDN 인지 egress가 없기 때문에
여전히
0.0.0.0/0을 사용합니다
마지막 항목은 누락이 아니라 설계입니다. 이를 문서에서 숨겨진 allow-list처럼 다시 쓰면 안 됩니다.
Kyverno 계약
Kyverno는 워크로드 가드레일의 일부이지만, 오늘 기준으로는 주된 차단 계층이 아닙니다.
현재 활성 체크인 정책:
| 정책 | 현재 모드 | 효과 |
|---|---|---|
require-zot-registry | Audit | zot.lumie-infra.com 밖의 container 또는 init-container 이미지를 표시 |
require-security-context | Audit | runAsNonRoot 누락, privileged container, 권한 상승 허용을 표시 |
require-resource-limits | Audit | memory request 또는 limit 누락, CPU request 누락, CPU limit 존재를 표시 |
remove-cpu-limits | admission 시 mutate만 수행 | 승인된 pod의 CPU limit를 제거 |
정책 예외도 체크인되어 있으며 운영상 의미가 있을 만큼 넓습니다.
argocd,cert-manager,external-secrets,vault,zot같은 bootstrap 네임스페이스- Falco pod
- Tekton DinD
springboot-testtask pod - CNPG cluster와 pooler pod
Goldilocks 인접 상태
매니페스트 라벨은 여전히 많은 ArgoCD 관리 네임스페이스와 애플리케이션에
goldilocks.fairwinds.com/enabled: 'true'를 붙이고 있지만, 활성
observability 루트는 다음을 주석 처리한 상태입니다.
goldilocks/argocd.yamlvpa/argocd.yamlblackbox-exporter/argocd.yaml
따라서 이 라벨은 오늘 기준으로 비활성 메타데이터일 뿐, 클러스터에서 권고나 VPA 가드레일이 실제로 동작한다는 증거가 아닙니다.