[CloudaNet-Cilium-Study[1기]] 2주차

진웅·2025년 7월 20일

CILIUM

목록 보기
3/14

1. Network Observability with Hubble

Hubble: 분산 네트워킹 및 보안 관측 가능성 플랫폼

개요

  • Hubble은 Cilium과 eBPF를 기반으로 구축된 완전히 분산된 네트워킹 및 보안 관측 가능성 플랫폼임.
  • 서비스 통신 및 동작뿐만 아니라 네트워킹 인프라에 대한 깊은 가시성을 완전히 투명하게 제공함.

핵심 기능

  • Hubble은 eBPF를 활용하여 가시성 확보
  • 모든 가시성을 프로그래밍할 수 있어(❓🤔) 오버헤드를 최소화하는 동적 접근 방식을 제공함.

    • 기존 방식: 고정된 모니터링 도구들이 미리 정해진 메트릭만 수집
      - 예: CPU, 메모리, 네트워크 패킷 수 등 정해진 항목만 관찰 가능
      - eBPF 방식: 필요에 따라 원하는 데이터를 직접 프로그래밍해서 수집
      - 예: "특정 포트로 들어오는 HTTP 요청 중 응답시간이 1초 이상인 것만 추적"
      - 예: "특정 서비스 간 통신에서 실패한 연결의 상세 정보만 수집"
      즉, 고정된 모니터링이 아닌 필요에 맞춰 맞춤형 관찰 로직을 코드로 작성할 수 있다

  • 다중 클러스터 환경에서 노드, 클러스터, 클러스터 간 가시성을 지원함.

❓🤔 그럼 cilium에서 ebpf 프로그래밍을 직접해야하는가? No

  • 기본적으로 Cilium은 워크로드의 identity를 기반으로 커널 내부에서 eBPF 프로그램을 정책 기반 자동으로 생성
  • Cilium Agent는 각 노드에서 DaemonSet으로 동작하며, eBPF 프로그램을 통해 pod 트래픽을 효과적으로 제어
    • 설정 → 코드 변환: Kubernetes 정책을 eBPF 바이트코드로 자동 변환
    • 커널 삽입: 생성된 eBPF 프로그램을 커널의 적절한 hook point에 삽입
    • 실시간 업데이트: 정책 변경 시 eBPF 프로그램 실시간 업데이트

아키텍처

  • Hubble API는 기본적으로 Cilium 에이전트가 실행되는 개별 노드 범위 내에서 작동함. Hubble CLI는 로컬 유닉스 도메인 소켓을 통해 Hubble API를 쿼리하며, Cilium 에이전트 포드에 기본 설치됨.
    Hubble Relay를 배포하면 전체 클러스터 또는 여러 클러스터에 대한 네트워크 가시성을 제공함. Hubble UI는 웹 인터페이스로 L3/L4 및 L7 계층에서 서비스 종속성 그래프를 자동 검색하여 사용자 친화적인 시각화와 데이터 흐름 필터링을 지원함.

주요 활용 사례

서비스 종속성 및 통신 맵

  • 서비스 간 통신 현황 및 빈도 파악
  • 서비스 종속성 그래프 시각화
  • HTTP 호출 및 Kafka 토픽 모니터링

네트워크 모니터링 및 알림

  • 네트워크 통신 실패 원인 분석 (DNS, 애플리케이션, 네트워크 문제)
  • TCP 연결 중단 및 타임아웃 모니터링
  • TCP SYN 요청 응답률 추적

애플리케이션 모니터링

  • HTTP 5xx/4xx 응답 코드 비율 추적
  • 95, 99 퍼센타일 지연시간 측정
  • 서비스 간 성능 분석

보안 관측성

  • 네트워크 정책으로 인한 연결 차단 모니터링
  • 클러스터 외부 접근 서비스 추적
  • DNS 조회 기록 분석

실습

  • AI-CODING 을 활용한 자동화 (계속 버전업 예정)

git clone https://github.com/riverjin839/cilium-study.git

my-config.yaml <- custom 설정을 yaml 형식으로 정할수있다. 안정하면 default값으로 설치

lab_config:
  k8s_version: '1.33.2-1.1'
  containerd_version: '1.7.27-1'
  cilium_version: '1.17.6'
  worker_nodes: 3
  lab_name: 'Advanced-K8s-Lab'
  network_prefix: '192.168.20'
  pod_cidr: '172.30.0.0/16'
  box_image: "ubuntu/jammy64"  
  box_version: ">=0"

python k8s_lab_generator.py --config my-config.yaml

  • 수행하면 vagrant 실행 전까지 셋업 환경 폴더가 만들어진다.

cd cilium-lab 들어가서 vagrant up 하기

vagrant status 로 확인하기

Setting up Hubble Observability

설치 전 확인

cilium status
![](https://velog.velcdn.com/images/bytebliss/post/e1c087b0-87fa-4c7b-8b22-450b683a7e90/image.png)
cilium config view | grep -i hubble
kubectl get cm -n kube-system cilium-config -o json | jq

#
kubectl get secret -n kube-system | grep -iE 'cilium-ca|hubble'
ss -tnlp | grep -iE 'cilium|hubble' | tee before.txt

Hubble 설치

설치방안 1 : hubble 활성화, 메트릭 설정 등등

helm upgrade cilium cilium/cilium --namespace kube-system --reuse-values \
--set hubble.enabled=true \
--set hubble.relay.enabled=true \
--set hubble.ui.enabled=true \
--set hubble.ui.service.type=NodePort \
--set hubble.ui.service.nodePort=31234 \
--set hubble.export.static.enabled=true \
--set hubble.export.static.filePath=/var/run/cilium/hubble/events.log \
--set prometheus.enabled=true \
--set operator.prometheus.enabled=true \
--set hubble.metrics.enableOpenMetrics=true \
--set hubble.metrics.enabled="{dns,drop,tcp,flow,port-distribution,icmp,httpV2:exemplars=true;labelsContext=source_ip\,source_namespace\,source_workload\,destination_ip\,destination_namespace\,destination_workload\,traffic_direction}"

설치방안 2 : hubble 활성화

cilium hubble enable
cilium hubble enable --ui
#
cilium config view | grep -i hubble

kubectl get cm -n kube-system cilium-config -o json | grep -i hubble

#
kubectl get secret -n kube-system | grep -iE 'cilium-ca|hubble'

# Enabling Hubble requires the TCP port 4244 to be open on all nodes running Cilium.
ss -tnlp | grep -iE 'cilium|hubble' | tee after.txt
vi -d before.txt after.txt

for i in w1 w2 ; do echo ">> node : k8s-$i <<"; sshpass -p 'vagrant' ssh vagrant@k8s-$i sudo ss -tnlp |grep 4244 ; echo; done

kc describe pod -n kube-system -l k8s-app=hubble-relay

kc get svc,ep -n kube-system hubble-relay

kubectl get cm -n kube-system
kubectl describe cm -n kube-system hubble-relay-config
  • hubble-relay 는 hubble-peer 의 서비스(ClusterIP :443)을 통해 모든 노드의 :4244에 요청 가져올 수 있음
kubectl get svc,ep -n kube-system hubble-peer

kc describe pod -n kube-system -l k8s-app=hubble-ui

kc describe cm -n kube-system hubble-ui-nginx

kubectl get svc,ep -n kube-system hubble-ui

# hubble ui 웹 접속 주소 확인
NODEIP=$(ip -4 addr show eth1 | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
echo -e "http://$NODEIP:31234"
  • 현재 cilium 상태가 설치 초기부터 이상해서 고행중(VM 죽고, cilium pod 하나 응답없고,vagrant up 안됨
    (동일한 vm 이름으로 설치시 virtual box 폴더가 삭제가 안되는 문제가 있었음(나만그런가..))
  • 원인 불명..MAC에서 다시 설치 예정..
profile
bytebliss

0개의 댓글