Calico Whisker 웹 콘솔에서 플로우 로그 보기
Calico Whisker 웹 콘솔에서 플로우 로그 보기 (View flow logs in the Calico Whisker web console)
Calico Whisker 웹 콘솔에서 플로우 로그를 확인하면 클러스터의 네트워크 트래픽을 관찰할 수 있어요. 소스, 목적지, 정책 판정(verdict) 기준으로 필터링하면서 집계된 플로우 로그를 살펴볼 수 있어요. 이 기능은 기술 프리뷰(tech preview) 단계라는 점만 기억해 두세요.
출처: 문서
본문
참고 (SECONDARY): 이 기능은 기술 프리뷰예요. 기술 프리뷰 기능은 GA(정식 출시) 전에 크게 변경될 수 있어요.
Calico Whisker 웹 콘솔에서 플로우 로그를 확인하면 클러스터의 네트워크 트래픽을 관찰할 수 있어요.

그림 1. Kubernetes 클러스터의 플로우 로그를 보여 주는 Calico Whisker 웹 콘솔 화면.
Calico Open Source의 플로우 로그 소개
클러스터에서 네트워크 활동을 추적하는 것은 애플리케이션이 서로 어떻게 통신하는지 이해하는 데 필수적이에요. Calico는 네트워크 연결을 처리해서 플로우 로그(flow log)라 부르는 이해하기 쉬운 형태로 기록함으로써 네트워크 활동을 파악하도록 도와줘요.
플로우 로그는 일정 기간 동안 클러스터에서 동일한 기준 집합(예: 소스, 목적지, 정책)에 해당하는 연결 데이터를 집계한 것이에요. 플로우 로그는 클러스터에서 발생한 모든 네트워크 연결을 하나하나 기록하지 않아요. 대신 클러스터에서 발생하는 네트워크 플로우의 '유형'을 나타내요. 예를 들어 1분 안에 1000개의 개별 네트워크 연결이 발생했다고 상상해 보세요. 1000개 연결을 일일이 훑어보기는 어렵고, 그 의미를 파악하는 건 더 어렵겠죠. 하지만 그 1분에 해당하는 플로우 로그는 1000개 항목을 15개의 플로우 로그로 줄여 줄 수 있어요. 각 플로우 로그는 서로 다른 연결 유형(팟 A에서 팟 B로, 퍼블릭 인터넷에서 팟 C로)을 대표하지만, 중복된 플로우 유형 항목은 없어요. 이렇게 하면 방대한 데이터에 압도되지 않으면서 전체 네트워크 활동을 이해할 수 있어요.
플로우 로그 활용
플로우 로그는 다음을 포함한 다양한 목적으로 활용할 수 있어요.
- 네트워크 가시성. 클러스터 내부, 네임스페이스 간, 외부 서비스와의 트래픽 패턴을 이해할 수 있어요.
- 연결 문제 트러블슈팅. 팟끼리 통신하지 않을 때, 정책이 트래픽을 차단한 것인지 아니면 실제로 목적지에 도달하고 있는 것인지 플로우 로그가 보여 줘요.
- 보안. 정책 위반(예상치 못한 deny 로그) 감지, 비정상 트래픽 패턴 식별(예: 비정상적으로 높은 데이터 전송), 잠재적 보안 사고 조사에 활용할 수 있어요.
- 정책 검증. 네트워크 정책이 의도대로 동작하는지(허용해야 할 트래픽은 허용하고, 금지된 트래픽은 차단하는지) 확인할 수 있어요. 스테이지드 네트워크 정책(staged network policy)을 프로덕션으로 옮기기 전에 테스트할 때 특히 유용해요.
Calico Whisker
Calico Whisker 웹 콘솔은 클러스터의 플로우 로그 스트림을 실시간으로 보여 주는 브라우저 기반 인터페이스예요. 콘솔이 열려 있는 동안 전용 플로우 로그 API(Goldmane)에서 라이브 데이터를 받아요. 스트림을 필터링해서 특정 정책, 네임스페이스, 팟 등 기준에 맞는 로그만 볼 수도 있어요.
플로우 로그 데이터 유형
다음 표는 Calico Whisker가 사용하는 플로우 로그 데이터 유형을 설명해요.
| 이름 | 데이터 유형 | 설명 |
|---|---|---|
start_time |
date | Unix 타임스탬프 형식의 로그 수집 시작 시각이에요. |
end_time |
date | Unix 타임스탬프 형식의 로그 수집 종료 시각이에요. |
action |
keyword | - allow: Calico가 이 플로우를 허용했어요. - deny: Calico가 이 플로우를 거부했어요. |
bytes_in |
long | 해당 기간 동안의 수신 바이트 수예요. |
bytes_out |
long | 해당 기간 동안의 송신 바이트 수예요. |
dest_name |
keyword | 다음 값 중 하나를 담고 있어요: - 목적지 팟의 이름. - 집계된 팟의 이름 또는 엔드포인트가 팟이 아닌 경우의 이름. |
dest_namespace |
keyword | 목적지 엔드포인트의 네임스페이스예요. -이면 엔드포인트가 네임스페이스에 속하지 않는다는 뜻이에요. |
dest_port |
long | 목적지 포트예요. ICMP 패킷에는 해당하지 않아요. |
dest_labels |
array of keywords | 목적지 팟에 적용된 라벨이에요. |
reporter |
keyword | - src: 연결을 시작한 소스 쪽에서 보고한 플로우예요. - dst: 최초 연결을 받은 목적지 쪽에서 보고한 플로우예요. |
packets_in |
long | 해당 기간 동안의 수신 패킷 수예요. |
packets_out |
long | 해당 기간 동안의 송신 패킷 수예요. |
protocol |
keyword | 프로토콜이에요. |
policies |
array of arrays | 이 플로우와 상호작용한 정책 목록이에요. |
source_name |
keyword | 다음 값 중 하나를 담고 있어요: - 소스 팟의 이름. - 집계된 팟의 이름 또는 엔드포인트가 팟이 아닌 경우의 이름. 집계됐다면 팟 이름 같은 추가 정보는 source_name_aggr에서 확인하세요. |
source_namespace |
keyword | 소스 엔드포인트의 네임스페이스예요. -이면 엔드포인트가 네임스페이스에 속하지 않는다는 뜻이에요. |
source_labels |
array of keywords | 소스 팟에 적용된 라벨이에요. 하이픈은 집계를 의미해요. |
플로우 로그 보기
Calico Whisker 웹 콘솔을 여러분의 워크스테이션으로 포트 포워딩하면 빠르고 안전하게 플로우 로그를 볼 수 있어요. 기본적으로 Whisker는 엔드포인트를 자동으로 노출하지 않아요.
Calico는 기본적으로 Calico Whisker로 들어오는(ingress) 트래픽을 거부하는 네트워크 정책을 만들어요. 포트 포워딩 외의 방법으로 Calico Whisker를 노출하고 싶다면, 그 트래픽을 허용하는 새 네트워크 정책을 만들어야 해요.
경고 (WARNING): Calico Whisker와 Goldmane에는 민감한 네트워크 및 워크로드 데이터가 들어 있어요. 추가 보안 조치 없이 이 데이터를 외부에 노출하면 안 돼요.
이 서비스들을 안전하게 노출하는 한 가지 방법은 인증 계층을 갖춘 Calico Ingress Gateway를 사용하는 거예요.
웹 콘솔에서 플로우 로그 보기
Whisker 서비스를 포트 포워딩하는 것은 플로우 로그를 보는 간단하고 안전한 방법이에요.
사전 준비물
- Calico가 설치된 Kubernetes 클러스터에 로컬
kubectl접근 권한이 있어야 해요. - operator 방식 또는 Helm으로 Calico Open Source를 설치했어야 해요. 매니페스트 설치는 지원하지 않아요. (단, 매니페스트 설치를 operator 설치로 변환할 수는 있어요.)
- 클러스터에서 Calico Whisker와 플로우 로그 API가 활성화되어 있어야 해요. 새 설치에는 둘 다 기본으로 활성화되어 있어요. Calico Open Source 3.29 이하에서 업그레이드했다면 수동으로 활성화해야 해요.
절차
-
Calico Whisker 웹 콘솔을 워크스테이션으로 포트 포워딩하세요.
kubectl port-forward -n calico-system service/whisker 8443:8443예상 출력
Forwarding from 127.0.0.1:8443 -> 8443 Forwarding from [::1]:8443 -> 8443 -
Calico Whisker를 열려면 브라우저에서
https://localhost:8443으로 이동하세요. Calico Whisker는 자체 서명(self-signed) 인증서를 사용하기 때문에 처음에는 브라우저에 보안 경고가 표시돼요. 경고를 수락하고 계속 진행하세요. Whisker가 데이터를 받으면서 플로우 테이블이 채워지고, 몇 분 안에 채워져요.
Calico Ingress Gateway로 웹 콘솔 노출
포트 포워딩은 간단히 살펴보기에는 좋지만, kubectl 접근 권한이 있는 워크스테이션에서만 동작해요. 팀에 안정적인 URL을 제공하려면 Calico Ingress Gateway를 통해 Whisker를 노출하세요. operator가 선택한 호스트네임에 대한 Gateway, Whisker로의 라우트, TLS 인증서를 만들어 주고, 기능을 끄면 다시 제거해 줘요.
사전 준비물
- Calico Ingress Gateway가 활성화되어 있어야 해요. 즉, 클러스터에
GatewayAPI리소스가 존재해야 해요. 인그레스 게이트웨이 만들기를 참고하세요. - 베어 메탈 클러스터에서는 게이트웨이의 로드 밸런서 주소로 사용할 IP 풀이 준비되어 있어야 해요.
절차
-
Whisker리소스에 호스트네임을 설정하세요.kubectl patch whisker default --type merge \ -p '{"spec":{"ingressGateway":{"hostname":"whisker.example.com"}}}'Gateway를 원하는 네임스페이스에 두려면
gatewayNamespace를 추가하세요. 네임스페이스가 없으면 operator가 만들어 줘요.spec: ingressGateway: hostname: whisker.example.com gatewayNamespace: my-gateway-namespaceGatewayAPI리소스가 둘 이상의 게이트웨이 클래스를 정의한다면, 하나를 고르도록gatewayClassName도 설정하세요. -
Gateway가 프로그래밍될 때까지 기다린 뒤 주소를 확인하세요.
gatewayNamespace를 설정하지 않았다면 Gateway는calico-system에 있어요.kubectl get gateway -n calico-system calico-whisker-gateway예상 출력
NAME CLASS ADDRESS PROGRAMMED calico-whisker-gateway tigera-gateway-class <IP Address> True -
DNS에서 해당 호스트네임을 이 주소로 연결한 다음, 브라우저에서
https://whisker.example.com을 여세요. 게이트웨이는 자체 서명 인증서를 제공하기 때문에 처음에는 브라우저에 보안 경고가 표시돼요. 경고를 수락하고 계속 진행하세요.
경고 (WARNING): Calico Whisker와 Goldmane에는 민감한 네트워크 및 워크로드 데이터가 들어 있어요. 게이트웨이 호스트네임에 도달할 수 있는 사람이라면 누구나 플로우 로그를 읽을 수 있어요. 자체 인증을 앞에 두지 않은 채로 외부에 노출하지 마세요.
spec.ingressGateway가 설정되어 있는 동안 Calico는 Whisker에 도달할 수 있는 팟을 제한해요. 이 게이트웨이의 프록시 팟만 들어올 수 있어요. 이 필드를 제거하면 operator가 게이트웨이를 위해 만든 모든 것이 삭제돼요.
kubectl patch whisker default --type json \
-p '[{"op":"remove","path":"/spec/ingressGateway"}]'
추가 리소스
- 플로우 로그를 자신만의 스크립트나 애플리케이션에서 사용하려면 플로우 로그 API 문서를 참고하세요.
- 더 많은 무료 옵저버빌리티 도구를 원하면 Calico Cloud Free Tier를 사용해 보세요.
- Calico 옵저버빌리티 기능 시작 방법 블로그도 참고할 수 있어요.
- 여기서 지금 바로 브라우저에서 Kubernetes 옵저버빌리티를 체험해 볼 수 있어요.
- 이 영상 프레젠테이션으로 Calico Whisker에 관한 모든 것을 배워 보세요.
더 알아보기 (Learn more)
플로우 로그는 클러스터 네트워크의 가시성, 연결 문제 트러블슈팅, 정책 검증에 모두 쓰이는 기본 데이터예요. Calico Whisker 콘솔을 포트 포워딩으로 여는 것이 가장 간단하고 안전한 방법이에요. 외부 노출이 필요하다면 반드시 인증 계층을 앞에 두세요.