본문으로 건너뛰기

Cilium Load Balancer 사용하기

CiliumLoadBalancerIPPool​

apiVersion: cilium.io/v2alpha1
kind: CiliumLoadBalancerIPPool
metadata:
name: <name>
spec:
blocks:
- cidr: <cidr>
  • spec
    • blocks
      • LoadBalancer IP로 사용할 cidr을 설정하거나 start, stop을 설정합니다.
      • 다른 CiliumLoadBalancerIPPool과 겹치면 안됩니다.
      • cidr: <cidr>
      • start: <ip>
      • stop: <ip>
    • serviceSelector
      • IP를 할당 받을 수 있는 Service들을 선택할 수 있습니다.
      • 선언하지 않으면 모든 Service들이 선택됩니다.
      • matchExpressions
      • matchLabels
        • io.kubernetes.service.namespace 레이블로 .metadata.namespace를 선택할 수 있습니다.
        • io.kubernetes.service.name 레이블로 .metadata.name을 선택할 수 있습니다.

LB IPAM은 LoadBalancer 타입의 Service들에 ExternalIP를 할당하는 역할만 하고 로드벨런싱 기능은 수행하지 않습니다. 때문에 로드벨런싱 자체는 Cilium이 제공하는 BGP 등의 기능을 사용하거나 다른 툴이 제공하는 것을 사용해야 합니다.

Node IPAM LB​

Service에 아래와 같은 설정을 추가하면 별도의 네트워크 제어 없이 Node IP를 LoadBalancer IP로 사용할 수 있습니다.

cilium-values.yaml
nodeIPAM:
enabled: true
apiVersion: v1
kind: Service
spec:
loadBalancerClass: io.cilium/node

IP는 .spec.ipFamilies, .spec.ExternalIPs에 의해 결정됩니다.

L2 Aware LB​

ARP/NDP 설정이 활성화되어 있어야 합니다.

apiVersion: v1
kind: Service
spec:
loadBalancerClass: io.cilium/l2-announcer

BGP LB​

BGP 설정이 활성화되어 있어야 합니다.

apiVersion: v1
kind: Service
spec:
loadBalancerClass: io.cilium/io.cilium/bgp-control-plane

IP 요청​

Service는 .metadata.annotations["io.cilium/lb-ipam-ips"]에 할당 받고 싶은 IP를 ,로 구분하여 선언할 수 있습니다.

apiVersion: v1
kind: Service
metadata:
annotations:
"io.cilium/lb-ipam-ips": "1.2.3.4,1.2.3.5"