본문으로 건너뛰기

Cilium에서 ARP/NDP 사용하기

L2 Announcements 설정

  • 1.18.2 버전 기준으로 IPv6/NDP를 지원하지 않습니다.
  • 하나의 Node가 모든 ARP 요청을 수신합니다.
  • 트래픽이 비대칭적으로 흐를 수 있습니다.
  • service.spec.externalTrafficPolicy: Local와 함께 사용할 수 없습니다.
cilium-values.yaml
l2announcements:
enabled: true

# externalIPs:
# enabled: true

kubeProxyReplacement: "true"
k8sServiceHost: auto
k8sServicePort: auto
  • k8sServiceHost: auto|<ip|hostname>
    • auto: cluster-info ConfigMap에서 API 서버 주소를 가져옵니다.
    • <ip|hostname>: API 서버 주소를 직접 지정합니다.
    • Node Local DNS를 사용하는 경우 localhost로 설정합니다.
  • k8sServicePort: auto|<port>
    • auto: cluster-info ConfigMap에서 API 서버 포트를 가져옵니다.
    • <port>: API 서버 포트를 직접 지정합니다.

리더 선출

ARP/NDP 작동 방식 상 IP당 하나의 MAC 주소만 저장하므로 트래픽을 받기위한 리더를 선출해야합니다. Cilium은 이를 위해 Kubernetes의 Lease 메커니즘을 사용합니다.

cilium-values.yaml
k8sClientRateLimit:
qps: 5
burst: 10

l2announcements:
leaseDuration: 15s
leaseRenewDeadline: 5s
leaseRetryPeriod: 2s

CiliumL2AnnouncementPolicy

apiVersion: "cilium.io/v2alpha1"
kind: CiliumL2AnnouncementPolicy
metadata:
name: <name>
spec:
# externalIPs 또는 loadBalancerIPs 둘 중 하나는 true여야 합니다.
# externalIPs: true
loadBalancerIPs: true
  • serviceSelector
  • nodeSelector
  • interfaces