VPP 구현 상세와 알려진 이슈
VPP를 Calico 데이터플레인으로 활성화하는 것은 대부분의 애플리케이션에 투명하지만, 몇 가지 동작은 다르게 나타날 수 있어요. 이 페이지는 주요 차이점과 아직 지원되지 않는 기능이나 알려진 이슈를 정리해 줘요.
본문
다른 데이터플레인과의 동작 차이
VPP와 일반적인 iptables/IPVS 데이터플레인의 가장 큰 차이는 NodePorts 구현이에요. 제약 조건이 다르기 때문에 VPP는 서비스 구현을 최적화할 수 있지만, 그 결과 일부 동작이 달라질 수 있어요. 주로 패킷이 소스 NAT 되었는지 아닌지를 전제로 하는 정책에 영향을 줘요.
-
ClusterIPs,ExternalIPs,LoadBalancerIPs의 로드 밸런싱은 Maglev 알고리즘으로 수행되고, 패킷은 선택된 백엔드가 살아 있는 노드에서만 NAT돼요. 덕분에 소스 NAT를 피할 수 있어서 목적지 파드에 실제 클라이언트 주소가 보여요. 파드가 ClusterIP로 연결할 때도 마찬가지예요. 이 동작 덕분에 서비스 로드 밸런싱이 기본으로 DSR(direct service return)을 쓸 수 있어요. -
NodePorts의 경우 패킷은 항상 트래픽이 도달한 노드에서 NAT돼요. eBPF 데이터플레인은 목적지 IP와 관계없이 모든 노드가 node port 트래픽을 NAT하기 때문에 이 점이 달라요. 또한 응답 트래픽이 같은 노드로 돌아오도록, 트래픽은 항상 소스 NAT돼요.
알려진 이슈와 지원되지 않는 기능
기능 완성을 목표로 하지만 아직 지원되지 않거나 알려진 이슈가 있는 기능들이 있어요:
- 호스트 엔드포인트 정책에서
doNotTrack또는preDNAT설정은 지원되지 않아요.- 이 값을
true로 설정하면 정책이 무시되고 calico-vpp-agent가 에러 메시지를 출력해요.
- 이 값을
- VPP는
BGP disabled상태로 실행하는 걸 지원하지 않아요. Session affinity for services는 지원되지 않아요.WireGuard는 시작 시점에 클러스터 전체로 활성화된 경우에만 지원돼요. 라이브 파드가 있는 실행 중인 클러스터에서 WireGuard를 켜거나 끄는 건 불안정한 것으로 알려져 있어요.EndpointSlices는 지원되지 않아요.
더 알아보기 (Learn more)
VPP 데이터플레인은 대부분 애플리케이션에 투명하지만 NodePorts의 NAT 동작이 iptables/eBPF와 달라요. 소스 NAT 여부에 의존하는 정책이라면 이 차이를 먼저 확인하는 게 좋아요. doNotTrack, preDNAT, EndpointSlices 같은 미지원 기능 목록도 함께 기억해 두세요.