Cilium을 설치하면 기본적으로 cilium-operator와 cilium-agent가 함께 설치됩니다.
또한, Cilium은 트래픽 모니터링을 위한 도구인 Hubble을 제공합니다.
Hubble을 Helm으로 설치해보면 hubble, hubble-ui 그리고 hubble-relay 에대한 옵션이 있습니다. hubble-ui와 hubble-relay는 별도의 파드로 뜨게 되지만 이번 글에서 다루고자 하는 내용은 이 두 컴포넌트가 아니라 cilium-agent 내부에 내장된 Hubble에 관한 것입니다.
완전 기본 설정으로 cilium을 설치하면 hubble은 활성화 되어있습니다. 만약 비활성화 한 상태로 설치해보면 cilium-agent 내부에서 hubble 명령어 사용시 다음과 같은 에러가 발생합니다.
비활성화 된 상태에서 cilium-config의 enale-hubble 설정을 true로 변경하고 cilium-agent를 재시작 해보면 hubble 명령어가 정상적으로 실행되게 됩니다.
또, cilium-agent 파드에서 살펴보면 여러 포트가 열려있는 것을 확인할 수 있습니다. 이중에서도 4244포트는 hubble이 사용하는 포트로 hubble-relay가 hubble과 통신할 때 사용되는 포트입니다.
9879는 cilium의 healthcheck 포트 9890은 gops를 위한 포트 4240은 cilium 노드간의 통신 가능 여부를 확인하기 위한 용도라고 합니다.
* 추가로 cilium 공식 문서(Scalability report)에서는 3대~10대의 워커노드보다 더 큰 클러스터에서는 성능 문제로 인해 헬스체크와 관련된 포트는 모두 disable 하라고 합니다.
왜냐 노드가 서로간의 통신을 통해 상태가 정상인지 확인하려고 하는데 10대라고 하면 각 서버당 10번의 확인을 해야하고 총 100번의 통신이 이루어지게 됩니다. 그러다보니 메트릭 정보도 늘어나게 되고 60초에 한번씩 확인하다 보니 클러스터의 규모가 커지면 커질수록 노드의 상태를 확인하는데 걸리는 시간도 오래걸리게 된다고 합니다. 아래 링크에서 해결중인듯!
https://github.com/cilium/cilium/issues/32820
CFP: Scalable node-to-node connectivity health-checking · Issue #32820 · cilium/cilium
Problem statement Currently, we recommend turning off node-to-node connectivity testing for larger clusters, from https://docs.cilium.io/en/stable/operations/performance/scalability/report/ : --set...
github.com
통신 확인해보기
2개의 노드에 파드를 하나씩 띄워보고 hubble로 통신 흐름을 살펴보겠습니다. 각 노드에 nginx 파드를 띄웠습니다.
kind-worker노드의 파드에서 kind-worker2파드로 3초에 한번씩 호출을 시킨 뒤 각각의 노드에서 hubble 로그를 확인해보겠습니다.
observe 명령어를 사용하면 통신 흐름을 확인할 수 있는데 너무 많은것이 보이기 때문에 80포트만 잡고선 확인했습니다.
hubble observe --from-port 80 -f
로그를 확인해보면 어떤 네임스페이스의 파드에서 어떤 네임스페이스 파드로 호출이 오갔는지 확인할 수 있습니다.
신기한건 호출을 보낸 파드와 받은 파드가 다르지만 같은 ID를 부여받은 것을 알 수 있습니다. 여기서의 ID는 security itentity로 같은 라벨이 붙은 파드들은 같은 security identity ID를 부여받는 것을 알 수 있습니다.
먼저 첫번째 로그는 서버 파드에서 SYN, ACK 클라이언트 파드로 응답을 보냈고 두번째 세번째 로그의 pre-xlate-rev(= pre-translation reverse)는 NAT translation 이전 상태를 기록한다는 표시입니다. 네번째 로그에서는 PSH, 서버가 클라이언트로 데이터를 보냈고 마지막 로그에서는 FIN, 통신이 종료된 것을 알 수 있습니다.
로그를 보다 또 특이하다 생각되는건 현재 구성된 cilium이 다이렉트 라우팅이라 nat가 필요없을것으로 예상되는데도 왜 로그가 찍혔을가에 대한 부분입니다.
이번엔 두 통신과 관련이 없는 노드에서도 확인해보겠습니다.
아무런 로그가 찍히지 않았는데 이것으로 hubble 명령어는 명령어를 수행하는 노드에서 발생하는 트래픽만을 보여준다는 것을 알 수 있습니다.
'K8S > 🔥 network study🔥' 카테고리의 다른 글
[cilium] hubble exporter 설정하기 (0) | 2025.07.26 |
---|---|
[cilium] 스타워즈 데모로 cilium 테스트 해보기 (3) | 2025.07.26 |
[cilium] flannel에서 cilium으로 마이그레이션 해보기 (1) | 2025.07.18 |
[cilium] flannel 설치하기 (0) | 2025.07.16 |
[네떡스터디🔥kans] AWS - EKS와 AWS LoadBalancer Controller (1) | 2024.11.02 |