Broadcom VMware ESXi / NSX에 Cilium 설치하기

Broadcom VMware ESXi / NSX에 Cilium 설치하기

이 페이지에서는 공식 이미지를 사용해 VMware ESXi에 Cilium을 설치하는 방법을 다뤄요. NSX(-T)가 있든 없든 VXLAN 또는 Geneve 터널 프로토콜로 설치할 수 있어요.

출처: Installation on Broadcom VMware ESXi / NSX

본문

Cilium은 VMware vSphere ESXi에 NSX(-T) 유무와 관계없이 배포할 수 있어요. 다만 캡슐화(encapsulation) 방식으로 VXLAN 터널 모드를 사용할 때는 알려진 문제가 있어요.

VXLAN 프로토콜로 helm install 하기

helm install로 VXLAN 프로토콜을 사용해 Cilium을 설치해요.

helm install cilium cilium/cilium --version 1.20.2 \
   --namespace kube-system \
   --set image.pullPolicy=IfNotPresent \
   --set ipam.mode=kubernetes \
   --set tunnelProtocol=vxlan
helm install cilium oci://quay.io/cilium/charts/cilium 1.20.2 \
   --namespace kube-system \
   --set image.pullPolicy=IfNotPresent \
   --set ipam.mode=kubernetes \
   --set tunnelProtocol=vxlan

참고

NSX(-T)를 사용한다면 tunnelPort 플래그에 커스텀 포트를 지정하세요. 예를 들어 --set tunnelPort=8223처럼요. GitHub issue 21801에서 VXLAN UDP 표준 포트(4789)나 draft 포트(8472)를 사용할 때 오프로드(offload) 관련 문제가 보고된 사례들을 추적하고 있어요.

Geneve 프로토콜로 helm install 하기

helm install로 Geneve 프로토콜을 사용해 Cilium을 설치해요.

helm install cilium cilium/cilium --version 1.20.2 \
   --namespace kube-system \
   --set image.pullPolicy=IfNotPresent \
   --set ipam.mode=kubernetes \
   --set tunnelProtocol=geneve
helm install cilium oci://quay.io/cilium/charts/cilium 1.20.2 \
   --namespace kube-system \
   --set image.pullPolicy=IfNotPresent \
   --set ipam.mode=kubernetes \
   --set tunnelProtocol=geneve

참고

Network Virtualization(Edge T0/T1 포함)을 쓰는 NSX(-T)도 Transport Node(ESXi, Edge) 사이에서 Geneve 프로토콜을 사용해요. 문제를 진단할 때 네트워크에서 관찰되는 Geneve 트래픽이 NSX(-T)에서 온 것인지 Cilium에서 온 것인지 구분이 안 될 수 있으니 유의하세요.

문제 해결 (Troubleshooting)

호스트 간 Pod 통신 실패

VXLAN 캡슐화와 함께 일부 구버전 ESXi(7) 또는 NSX-T(3.x/4.x)에 Cilium을 배포하면, ICMP(ping)는 여전히 동작하지만 호스트 간 Pod 통신이 실패할 수 있어요.

Cilium-health 상태에서 다음과 같은 출력을 보게 될 거예요.

==== detail from pod cilium-mvrb6 , on node alg-cilium-cp
Probe time:   2025-03-12T16:55:02Z
Nodes:
alg-cilium-cp (localhost):
    Host connectivity to 10.44.144.20:
    ICMP to stack:   OK, RTT=640.959µs
    HTTP to agent:   OK, RTT=148.15µs
    Endpoint connectivity to 10.42.0.38:
    ICMP to stack:   OK, RTT=632.181µs
    HTTP to agent:   OK, RTT=295.409µs
alg-cilium-wk1:
    Host connectivity to 10.44.144.21:
    ICMP to stack:   OK, RTT=764.463µs
    HTTP to agent:   OK, RTT=1.154573ms
    Endpoint connectivity to 10.42.4.211:
    ICMP to stack:   OK, RTT=765.081µs
    HTTP to agent:   Get "http://10.42.4.211:4240/hello": context deadline exceeded (Client.Timeout exceeded while awaiting headers)

이 문제는 VXLAN 캡슐화를 위한 NIC 오프로드 지원과 관련된 VMXNET3 드라이버의 버그에서 비롯돼요. VXLAN에 구식 표준 포트(8472)를 사용하기 때문이에요.

이 경우 VXLAN 포트를 --set tunnelPort=8223로 바꾸거나 Geneve 터널 프로토콜 --set tunnelProtocol=geneve를 사용하면 돼요. NIC 오프로드 비활성화 같은 우회 방법도 있지만, 권장되는 해결책은 아니에요.

더 알아보기 (Learn more)