Node IPAM LB
Node IPAM LB (노드 IPAM 로드밸런서)
Node IPAM LoadBalancer는 k3s의 "ServiceLB"에서 영감을 받은 기능으로, Service LoadBalancer 안에서 노드의 IP를 직접 "광고"할 수 있게 해줘요. 자신이 제어하지 않는 네트워크에서 Cilium의 L2나 BGP 기능을 쓸 수 없을 때 특히 유용해요.
출처: Node IPAM LB
본문
Node IPAM LoadBalancer는 k3s의 "ServiceLB"에서 영감을 받은 기능으로, Service LoadBalancer 안에서 노드의 IP를 직접 "광고"할 수 있게 해줘요. 이 기능은 자신이 실행 중인 네트워크를 제어할 수 없고 Cilium의 L2 또는 BGP 기능을 사용할 수 없을 때 특히 유용해요.
선택된 노드의 Node 주소를 가져와서 광고하는 방식으로 동작해요. IPv4 또는 IPv6 주소 중 무엇을 사용할지 결정하기 위해 .spec.ipFamilies를 존중하며, ExternalIP 주소가 있으면 그것을, 그렇지 않으면 InternalIP 주소를 사용해요.
Service의 .spec.externalTrafficPolicy가 Cluster로 설정되어 있으면 Node IPAM은 모든 노드를 선택 후보로 간주해요. 반면 .spec.externalTrafficPolicy가 Local로 설정되어 있으면 Service가 선택한 모든 Pod(그들의 EndpointSlices를 통해)를 후보로 간주해요.
Warning
.spec.externalTrafficPolicy가Local로 설정되어 있는데 해당 Service에 연결된 EndpointSlice(또는 더미 EndpointSlice)가 없으면 Node IPAM은 제대로 동작하지 않아요. 결과적으로 GatewayAPI 또는 Ingress용 Cilium 구현에서는.spec.externalTrafficPolicy를Local로 설정할 수 없어요. Cilium이 현재 Service LoadBalancer에 더미 Endpoints를 사용하기 때문이에요 (여기 참고). 이 제한에 영향을 받는 것으로 알려진 구현은 Cilium뿐이에요. 대부분의 다른 구현은 이 구성에서 동작할 것으로 예상돼요. 동작하지 않는다면 매칭되는 EndpointSlices가 올바른지 확인하거나,.spec.externalTrafficPolicy를Cluster로 설정해 보세요.
Node IPAM은 Node 라벨 node.kubernetes.io/exclude-from-external-load-balancers와 Node taint ToBeDeletedByClusterAutoscaler를 존중해요. 라벨 node.kubernetes.io/exclude-from-external-load-balancers 또는 taint ToBeDeletedByClusterAutoscaler가 있으면 Node IPAM은 해당 노드를 로드 밸런싱 후보로 간주하지 않아요.
들어오는 트래픽을 수신해야 할 Node를 제한하려면 Service에 io.cilium.nodeipam/match-node-labels 어노테이션을 추가하세요. 어노테이션 값은 Label Selector예요.
Node IPAM 활성화 및 사용 (Enable and use Node IPAM)
이 기능을 사용하려면 Service가 LoadBalancer 타입이어야 하고 loadBalancerClass가 io.cilium/node로 설정되어 있어야 해요. 또한 defaultLBServiceIPAM을 nodeipam으로 설정하면 loadBalancerClass를 지정하지 않는 Service에서 이 기능을 사용하도록 허용할 수도 있어요.
Cilium의 node IPAM은 기본적으로 비활성화되어 있어요. node IPAM으로 Cilium을 설치하려면 다음을 실행하세요:
Helm Repository OCI Registry
helm install cilium cilium/cilium --version 1.20.2 \
--namespace kube-system \
--set nodeIPAM.enabled=true
helm install cilium oci://quay.io/cilium/charts/cilium 1.20.2 \
--namespace kube-system \
--set nodeIPAM.enabled=true
기존 설치에서 node IPAM을 활성화하려면 다음을 실행하세요:
Helm Repository OCI Registry
helm upgrade cilium cilium/cilium --version 1.20.2 \
--namespace kube-system \
--reuse-values \
--set nodeIPAM.enabled=true
kubectl -n kube-system rollout restart deployment/cilium-operator
helm upgrade cilium oci://quay.io/cilium/charts/cilium 1.20.2 \
--namespace kube-system \
--reuse-values \
--set nodeIPAM.enabled=true
kubectl -n kube-system rollout restart deployment/cilium-operator