하이브리드 노드용 Cilium BGP 구성하기

하이브리드 노드용 Cilium BGP 구성하기 (Configure Cilium BGP for hybrid nodes)

이 주제는 Amazon EKS Hybrid Nodes용 Cilium BGP(Border Gateway Protocol)를 구성하는 방법을 설명해요. Cilium의 BGP 기능을 Cilium BGP Control Plane이라고 하며, 온프레미스 네트워크에 Pod 및 서비스 주소를 광고하는 데 사용할 수 있어요. 온프레미스 네트워크에서 Pod CIDR을 라우팅 가능하게 만드는 다른 방법은 라우팅 가능한 원격 Pod CIDR을 참고하세요.

출처: 문서

본문

Cilium BGP 구성하기

사전 요구 사항

  • 하이브리드 노드용 CNI 구성하기의 지침에 따라 Cilium이 설치되어 있어야 해요.

절차

Cilium으로 BGP를 사용해 온프레미스 네트워크에 Pod 또는 서비스 주소를 광고하려면 Cilium을 bgpControlPlane.enabled: true로 설치해야 해요. 기존 Cilium 배포에서 BGP를 활성화하는 경우, 이전에 BGP가 활성화되지 않았다면 BGP 구성을 적용하려면 Cilium operator를 재시작해야 해요. Helm 값에서 operator.rollOutPods를 true로 설정하면 Helm install/upgrade 프로세스의 일부로 Cilium operator를 재시작할 수 있어요.

helm upgrade cilium oci://public.ecr.aws/eks/cilium/cilium \
  --namespace kube-system \
  --reuse-values \
  --set operator.rollOutPods=true \
  --set bgpControlPlane.enabled=true

Cilium operator와 에이전트가 재시작되어 실행 중인지 확인하세요.

kubectl -n kube-system get pods --selector=app.kubernetes.io/part-of=cilium
NAME                               READY   STATUS    RESTARTS   AGE
cilium-grwlc                       1/1     Running   0          4m12s
cilium-operator-68f7766967-5nnbl   1/1     Running   0          4m20s
cilium-operator-68f7766967-7spfz   1/1     Running   0          4m20s
cilium-pnxcv                       1/1     Running   0          6m29s
cilium-r7qkj                       1/1     Running   0          4m12s
cilium-wxhfn                       1/1     Running   0          4m1s
cilium-z7hlb                       1/1     Running   0          6m30s

CiliumBGPClusterConfig 정의가 있는 cilium-bgp-cluster.yaml 파일을 만드세요. 네트워크 관리자에게 다음 정보를 받아야 할 수도 있어요.

  • localASN을 Cilium을 실행하는 노드의 ASN으로 구성하세요.
  • peerASN을 온프레미스 라우터의 ASN으로 구성하세요.
  • peerAddress를 Cilium을 실행하는 각 노드가 피어링할 온프레미스 라우터 IP로 구성하세요.
apiVersion: cilium.io/v2alpha1
kind: CiliumBGPClusterConfig
metadata:
  name: cilium-bgp
spec:
  nodeSelector:
    matchExpressions:
    - key: eks.amazonaws.com/compute-type
      operator: In
      values:
      - hybrid
  bgpInstances:
  - name: "rack0"
    localASN: NODES_ASN
    peers:
    - name: "onprem-router"
      peerASN: ONPREM_ROUTER_ASN
      peerAddress: ONPREM_ROUTER_IP
      peerConfigRef:
        name: "cilium-peer"

Cilium BGP 클러스터 구성을 클러스터에 적용하세요.

kubectl apply -f cilium-bgp-cluster.yaml

BGP 피어 구성을 정의하는 CiliumBGPPeerConfig 리소스가 있는 cilium-bgp-peer.yaml 파일을 만드세요. 여러 피어가 동일한 구성을 공유하고 공통 CiliumBGPPeerConfig 리소스를 참조할 수 있어요. 구성 옵션의 전체 목록은 Cilium 문서의 BGP Peer 구성을 참고하세요.

다음 Cilium 피어 설정의 값은 피어링하는 온프레미스 라우터의 값과 일치해야 해요.

  • holdTimeSeconds를 구성하세요. 이 값은 BGP 피어가 세션이 다운되었다고 선언하기 전에 keepalive 또는 update 메시지를 기다리는 시간을 결정해요. 기본값은 90초예요.
  • keepAliveTimeSeconds를 구성하세요. 이 값은 BGP 피어가 여전히 도달 가능하고 BGP 세션이 활성 상태인지 결정해요. 기본값은 30초예요.
  • restartTimeSeconds를 구성하세요. 이 값은 Cilium의 BGP 컨트롤 플레인이 재시작 후 BGP 세션을 다시 설정할 것으로 예상되는 시간을 결정해요. 기본값은 120초예요.
apiVersion: cilium.io/v2alpha1
kind: CiliumBGPPeerConfig
metadata:
  name: cilium-peer
spec:
  timers:
    holdTimeSeconds: 90
    keepAliveTimeSeconds: 30
  gracefulRestart:
    enabled: true
    restartTimeSeconds: 120
  families:
    - afi: ipv4
      safi: unicast
      advertisements:
        matchLabels:
          advertise: "bgp"

Cilium BGP 피어 구성을 클러스터에 적용하세요.

kubectl apply -f cilium-bgp-peer.yaml

온프레미스 네트워크에 Pod CIDR을 광고하려면 CiliumBGPAdvertisement 리소스가 있는 cilium-bgp-advertisement-pods.yaml 파일을 만드세요.

CiliumBGPAdvertisement 리소스는 광고 유형과 관련 속성을 정의하는 데 사용돼요. 아래 예시는 Cilium이 Pod CIDR만 광고하도록 구성해요. 서비스 주소를 광고하도록 Cilium을 구성하는 방법에 대한 자세한 내용은 Service type LoadBalancer 및 Cilium in-cluster load balancing의 예시를 참고하세요.

Cilium 에이전트를 실행하는 각 하이브리드 노드는 업스트림 BGP 지원 라우터와 피어링해요. 아래 예시처럼 Cilium의 advertisementType이 PodCIDR로 설정되면 각 노드는 자기가 소유한 Pod CIDR 범위를 광고해요. 자세한 내용은 Cilium 문서의 BGP Advertisements 구성을 참고하세요.

apiVersion: cilium.io/v2alpha1
kind: CiliumBGPAdvertisement
metadata:
  name: bgp-advertisement-pods
  labels:
    advertise: bgp
spec:
  advertisements:
    - advertisementType: "PodCIDR"

Cilium BGP Advertisement 구성을 클러스터에 적용하세요.

kubectl apply -f cilium-bgp-advertisement-pods.yaml

Cilium CLI의 cilium bgp peers 명령으로 BGP 피어링이 작동하는지 확인할 수 있어요. 출력에 환경에 맞는 올바른 값과 Session State가 established로 표시되어야 해요. 문제 해결에 대한 자세한 내용은 Cilium 문서의 Troubleshooting and Operations Guide를 참고하세요.

아래 예시에는 Cilium 에이전트를 실행하는 5개의 하이브리드 노드가 있고 각 노드가 소유한 Pod CIDR 범위를 광고하고 있어요.

cilium bgp peers
Node                   Local AS    Peer AS               Peer Address        Session State   Uptime     Family         Received   Advertised
mi-026d6a261e355fba7   NODES_ASN
                  ONPREM_ROUTER_ASN
                  ONPREM_ROUTER_IP    established     1h18m58s   ipv4/unicast   1          2
mi-082f73826a163626e   NODES_ASN
                  ONPREM_ROUTER_ASN
                  ONPREM_ROUTER_IP    established     1h19m12s   ipv4/unicast   1          2
mi-09183e8a3d755abf6   NODES_ASN
                  ONPREM_ROUTER_ASN
                  ONPREM_ROUTER_IP    established     1h18m47s   ipv4/unicast   1          2
mi-0d78d815980ed202d   NODES_ASN
                  ONPREM_ROUTER_ASN
                  ONPREM_ROUTER_IP    established     1h19m12s   ipv4/unicast   1          2
mi-0daa253999fe92daa   NODES_ASN
                  ONPREM_ROUTER_ASN
                  ONPREM_ROUTER_IP    established     1h18m58s   ipv4/unicast   1          2
cilium bgp routes
Node                   VRouter       Prefix           NextHop   Age         Attrs
mi-026d6a261e355fba7   NODES_ASN     10.86.2.0/26     0.0.0.0   1h16m46s   [{Origin: i} {Nexthop: 0.0.0.0}]
mi-082f73826a163626e   NODES_ASN     10.86.2.192/26   0.0.0.0   1h16m46s   [{Origin: i} {Nexthop: 0.0.0.0}]
mi-09183e8a3d755abf6   NODES_ASN     10.86.2.64/26    0.0.0.0   1h16m46s   [{Origin: i} {Nexthop: 0.0.0.0}]
mi-0d78d815980ed202d   NODES_ASN     10.86.2.128/26   0.0.0.0   1h16m46s   [{Origin: i} {Nexthop: 0.0.0.0}]
mi-0daa253999fe92daa   NODES_ASN     10.86.3.0/26     0.0.0.0   1h16m46s   [{Origin: i} {Nexthop: 0.0.0.0}]

더 알아보기 (Learn more)