본문 바로가기

컨테이너/쿠버네티스 네트워크

[Cilium] (7) 실리움 네트워킹 _ Routing

Routing

🔧 Cilium 네트워크 모드 비교  


📦 방식 1: Encapsulation (VXLAN, Geneve)

  • 기본 모드 (요구 사항이 가장 적음)
  • 노드 간 터널 메시(VXLAN/Geneve)를 자동 구성
  • 모든 Cilium 노드 간 트래픽이 캡슐화되어 전달됨

🟢 장점

  • 단순성: 네트워크가 PodCIDR을 몰라도 됨 : 이부분이 가장 중요한 점인데 노드의 연결만 보장 된다면 그 이후의 파드 라우팅에는 신경을 쓰지 않아도 됨. 이는 Cilium 노드가 이미 서로 연결된다면 모든 라우팅 요구사항이 이미 충족됬기 때문
  • 유연성: 다양한 L2/L3 구조에서도 동작
  • 정체성 컨텍스트 지원: 메타데이터(예: 보안 ID) 전송 가능

🔴 단점

  • MTU 오버헤드: 패킷당 약 50바이트 손실 (VXLAN 기준)
  • 성능 저하 가능성 → 점보 프레임으로 완화 가능

⚙️ 설정


tunnel-protocol: vxlan # 또는 geneve 
tunnel-port: 8472 # geneve는 6081

🚀 방식 2: Native Routing (PodCIDR 라우팅)

  • 캡슐화 없이 Linux 커널의 라우팅 테이블을 활용
  • PodCIDR 경로가 노드 간 라우팅 가능해야 함

🟢 장점

  • 높은 성능: 캡슐화 없음 → MTU 손실 없음
  • 클라우드 친화적: VPC 라우팅 등과 잘 통합
  • 직접 전달: 커널 라우팅 활용으로 최적 경로 제공

🔴 단점

  • 구성 복잡도 증가: PodCIDR 라우팅 구성 필요
    • L2 네트워크일 경우 auto-direct-node-routes: true
    • 아니면 BGP 또는 라우터 필요

⚙️ 설정

routing-mode: native
ipv4-native-routing-cidr: 10.x.0.0/16
auto-direct-node-routes: true # (L2 네트워크 시)
 

 

💬 Tip: AWS, GCP, Azure 같은 퍼블릭 클라우드에서는 Native Routing + CNI 연동이 일반적입니다. 하지만 네트워크 구성 권한이 없거나 복잡한 라우팅이 어려운 환경이라면 Encapsulation 방식이 더 실용적입니다.


Native Routing 실습 1. 

 

  • auto-direct-node-routes: true 는 동일 L2 네트워크 공유 시, 걱 노드의 PodCIDR에 대한 Linux 커널 라우팅 테이블에 삽입.
  • 설정 방법 : routing-mode: native 
routing-mode: native
ipv4-native-routing-cidr: 10.x.0.0/16
auto-direct-node-routes: true # (L2 네트워크 시)

 

1. 통신이 되려면 curlpod가 위치한 워커노드가 webpod의 pod cidr을 라우팅 테이블에 가지고 있어야함

#
kubectl get pod -owide

# Webpod1,2 파드 IP
export WEBPODIP1=$(kubectl get -l app=webpod pods --field-selector spec.nodeName=k8s-ctr -o jsonpath='{.items[0].status.podIP}')
export WEBPODIP2=$(kubectl get -l app=webpod pods --field-selector spec.nodeName=k8s-w1  -o jsonpath='{.items[0].status.podIP}')
echo $WEBPODIP1 $WEBPODIP2

# curl-pod 에서 WEBPODIP2 로 ping
kubectl exec -it curl-pod -- ping $WEBPODIP2

2. ctr노드의 라우팅 테이블 확인

  • 172.20.0 대역에 대한 모든 IP에 대해서 node eth1로 보낸 후 워커노드 101번으로 보냄 
  • 해당 워커노드에 자기 pod에 대한 lxc 라우팅 정보가 있음 

2. hubble-observe로 확인

# 
cilium hubble port-forward&
hubble observe -f --pod curl-pod
Jul 27 04:21:27.648: default/curl-pod (ID:15584) -> default/webpod-857687f8b6-wdxhq (ID:46396) to-network FORWARDED (ICMPv4 EchoRequest)
Jul 27 04:21:27.649: default/curl-pod (ID:15584) <- default/webpod-857687f8b6-wdxhq (ID:46396) to-endpoint FORWARDED (ICMPv4 EchoReply)

#
tcpdump -i eth1 icmp

#
tcpdump -i eth1 icmp -w /tmp/icmp.pcap
termshark -r /tmp/icmp.pcap

터미널 샤크로 보면 pod IP 로 직접 통신하는것을 볼수 있다.

오버레이 , Encapsulation , NAT 하지 않기 때문에 성능 우위.