CCA — 실리움 인증 어소시에이트 · Hubble 관측성 · 실습
관측 파이프라인과 아이덴티티 정리하기
목표
Hubble 관측 파이프라인을 값 파일로 선언하고, 아이덴티티에 들어가는 라벨과 제외되는 라벨을 명시적으로 정리하며, 실전에서 바로 쓰는 질의·진단표·알림 규칙을 만듭니다.
왜 중요한가
Cilium 운영에서 "관찰 → 정책화 → 감사 → 강제"의 루프가 닫히려면 관찰 축이 먼저 서 있어야 합니다. 그런데 Hubble 을 켜기만 하고 export 를 붙이지 않으면 링버퍼가 회전하는 순간 증거가 사라집니다. 노드당 기본 4095 플로우는 트래픽이 많은 노드에서 몇 초 분량일 수도 있습니다.
아이덴티티 라벨 정리도 실무에서 중요한 이유가 있습니다. pod-template-hash 처럼 롤아웃마다 바뀌는 라벨이 아이덴티티에 포함되면, 배포 한 번에 모든 파드가 새 아이덴티티를 받아 정책 맵이 통째로 다시 계산됩니다. 어떤 라벨이 의미를 갖고 어떤 라벨이 소음인지 팀이 합의해 두어야 합니다.
알림도 마찬가지입니다. 정책 강제 직후에는 임계값을 일부러 낮게 잡아 누락된 허용 규칙을 빨리 찾고, 안정화된 뒤 운영 수준으로 올리는 2단계 운영이 정석입니다.
Hubble 설정과 문서는 /root/cca-hubble/ 아래에 작성하고, Kubernetes 기본 리소스는 실제로 apply 합니다.
단계
1. 네임스페이스 cca-obs 를 만드세요.
2. /root/cca-hubble/hubble-values.yaml 을 만들고 hubble.enabled: true, hubble.relay.enabled: true, hubble.ui.enabled: true, hubble.eventBufferCapacity: 16383 을 쓰세요.
3. 같은 파일에 hubble.metrics.enabled 목록을 추가하고 drop, dns, flow, httpV2 네 계열이 모두 들어가게 하세요. 이어서 hubble.export 아래에 동적 export 설정을 두고, includeFilters 의 verdict 에 DROPPED 와 AUDIT 를 함께 담으세요.
4. 네임스페이스 cca-obs 에 디플로이먼트 checkout 을 2 레플리카로 배포하세요. 파드 템플릿 라벨은 app=checkout 과 team=payments 두 개이고 이미지는 nginx:1.27-alpine 입니다.
5. 같은 네임스페이스에 컨피그맵 identity-labels 를 만드세요. 키 included 에는 app, team, io.kubernetes.pod.namespace 를, 키 excluded 에는 pod-template-hash, controller-revision-hash, pod-template-generation 을 담습니다.
6. /root/cca-hubble/hubble-queries.txt 에 hubble observe 로 시작하는 질의를 5줄 이상 쓰세요. 그중에 --verdict DROPPED, --verdict AUDIT, --namespace cca-obs, --protocol dns, 그리고 --from-pod 로 특정 파드를 지정하는 질의가 각각 최소 한 번씩 들어가야 합니다. 이어서 /root/cca-hubble/drop-reasons.md 에 마크다운 표를 만들고 POLICY_DENIED, CT_MAP_INSERT_FAILED, UNSUPPORTED_L3_PROTOCOL, STALE_OR_UNROUTABLE_IP 네 가지 사유와 각각의 첫 의심 지점을 적으세요.
7. /root/cca-hubble/hubble-alerts.yaml 에 Prometheus 알림 규칙을 작성하세요. groups[0].name 은 cilium-policy 이고 규칙은 두 개입니다. 첫째는 이름 PolicyDropSpike, expr 에 hubble_drop_total 의 rate 를 쓰면서 POLICY_DENIED 사유로 좁히고, for: 10m, severity warning 입니다. 둘째는 이름 CiliumAgentDown, severity critical 입니다.
참고
- 컨피그맵은
kubectl create configmap identity-labels -n cca-obs --from-literal=included=... --from-literal=excluded=...로 만들면 빠릅니다. 값은 쉼표로 이어 붙여도 됩니다. - 마크다운 표의 줄은
|로 시작합니다. 헤더 줄과 구분선 줄까지 포함해 6줄 이상이 됩니다. - 흔한 실수 1: 라벨을 디플로이먼트의
metadata.labels에만 붙이는 것. 아이덴티티는 파드 라벨에서 계산되므로spec.template.metadata.labels에 있어야 합니다. - 흔한 실수 2: 알림 expr 에 누적 카운터를 그대로 쓰는 것. 증가율로 봐야 급증이 잡힙니다.
for는 YAML 키이므로 따옴표 없이 그대로 쓰면 됩니다.
단계 7개
- 관측 실습 네임스페이스 만들기
- Hubble 활성화 값 쓰기
- 메트릭과 보안 이벤트 내보내기
- 라벨이 있는 워크로드 배포
- 포함 라벨과 제외 라벨 정리하기
- 자주 쓰는 질의와 드롭 사유표 만들기
- 드롭 급증과 에이전트 다운 알림 만들기