

 **이 페이지 개선에 도움 주기** 

이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 **GitHub에서 이 페이지 편집** 링크를 선택합니다.

# 하이브리드 노드에 대한 Cilium BGP 구성
<a name="hybrid-nodes-cilium-bgp"></a>

이 주제에서는 Amazon EKS Hybrid Nodes에 대한 Cilium Border Gateway Protocol(BGP)을 구성하는 방법을 설명합니다. Cilium의 BGP 기능은 [Cilium BGP Control Plane](https://docs.cilium.io/en/stable/network/bgp-control-plane/bgp-control-plane/)이라고 하며 포드 및 서비스 주소를 온프레미스 네트워크에 알리는 데 사용할 수 있습니다. 온프레미스 네트워크에서 포드 CIDR을 라우팅 가능하도록 하는 다른 방법은 [라우팅 가능한 원격 포드 CIDR](hybrid-nodes-concepts-kubernetes.md#hybrid-nodes-concepts-k8s-pod-cidrs) 섹션을 참조하세요.

## Cilium BGP 구성
<a name="hybrid-nodes-cilium-bgp-configure"></a>

### 사전 조건
<a name="_prerequisites"></a>
+ [하이브리드 노드에 대한 CNI 구성](hybrid-nodes-cni.md)의 지침에 따라 Cilium이 설치되어 있습니다.

### 절차
<a name="_procedure"></a>

1. BGP를 Cilium과 함께 사용하여 온프레미스 네트워크에 포드 또는 서비스 주소를 알리려면 `bgpControlPlane.enabled: true`로 Cilium을 설치해야 합니다. 기존 Cilium 배포에 대해 BGP를 활성화하는 경우 BGP가 이전에 활성화되지 않은 경우 BGP 구성을 적용하려면 Cilium 연산자를 다시 시작해야 합니다. Helm 값에서 `operator.rollOutPods`를 `true`로 설정하여 Helm 설치/업그레이드 프로세스의 일부로 Cilium 연산자를 다시 시작할 수 있습니다.

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

1. Cilium 운영자와 에이전트가 다시 시작되어 실행 중인지 확인합니다.

   ```
   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
   ```

1. `CiliumBGPClusterConfig` 정의를 포함하여 `cilium-bgp-cluster.yaml` 파일을 생성합니다. 네트워크 관리자로부터 다음 정보를 얻어야 할 수 있습니다.
   + Cilium을 실행하는 노드의 ASN으로 `localASN`을 구성합니다.
   + 온프레미스 라우터의 ASN으로 `peerASN`을 구성합니다.
   + Cilium을 실행하는 각 노드가 피어링할 온프레미스 라우터 IP로 `peerAddress`을 구성합니다.

     ```
     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"
     ```

1. 클러스터에 Cilium BGP 클러스터 구성을 적용합니다.

   ```
   kubectl apply -f cilium-bgp-cluster.yaml
   ```

1. BGP 피어 구성을 정의하는 `CiliumBGPPeerConfig` 리소스를 포함하여 `cilium-bgp-peer.yaml` 파일을 생성합니다. 여러 피어가 동일한 구성을 공유하고 공통 `CiliumBGPPeerConfig` 리소스에 대한 참조를 제공할 수 있습니다. 구성 옵션의 전체 목록은 Cilium 문서의 [BGP Peer configuration](https://docs.cilium.io/en/latest/network/bgp-control-plane/bgp-control-plane-v2/#bgp-peer-configuration) 페이지를 참조하세요.

   다음 Cilium 피어 설정의 값은 피어링하려는 온프레미스 라우터의 값과 일치해야 합니다.
   + 세션의 중단 상태를 선언하기 전에 BGP 피어가 킵얼라이브 또는 업데이트 메시지를 기다리는 시간을 결정하는 `holdTimeSeconds`를 구성합니다. 기본값은 90초입니다.
   + BGP 피어가 계속 연결할 수 있고 BGP 세션이 활성 상태인지 여부를 결정하는 `keepAliveTimeSeconds`를 구성합니다. 기본값은 30초입니다.
   + 재시작 후 Cilium의 BGP Control Plane에서 BGP 세션을 다시 설정할 것으로 예상되는 시간을 결정하는 `restartTimeSeconds`를 구성합니다. 기본값은 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"
     ```

1. 클러스터에 Cilium BGP 피어 구성을 적용합니다.

   ```
   kubectl apply -f cilium-bgp-peer.yaml
   ```

1. `CiliumBGPAdvertisement` 리소스를 포함하는 `cilium-bgp-advertisement-pods.yaml` 파일을 생성하여 포드 CIDR을 온프레미스 네트워크에 알립니다.
   + `CiliumBGPAdvertisement` 리소스는 광고 유형 및 이와 관련된 속성을 정의하는 데 사용됩니다. 아래 예시에서는 포드 CIDR만 알리도록 Cilium을 구성합니다. 서비스 주소를 알리도록 Cilium을 구성하는 방법에 대한 자세한 내용은 [Service 유형 LoadBalancer](hybrid-nodes-ingress.md#hybrid-nodes-ingress-cilium-loadbalancer) 및 [Cilium 클러스터 내 로드 밸런싱](hybrid-nodes-load-balancing.md#hybrid-nodes-service-lb-cilium)의 예시를 참조하세요.
   + Cilium 에이전트를 실행하는 각 하이브리드 노드는 업스트림 BGP 지원 라우터와 피어링됩니다. 각 노드는 아래 예시와 같이 Cilium의 `advertisementType`이 `PodCIDR`로 설정된 경우 소유한 포드 CIDR 범위를 알립니다. 자세한 내용은 Cilium 문서의 [BGP Advertisements configuration](https://docs.cilium.io/en/stable/network/bgp-control-plane/bgp-control-plane-v2/#bgp-advertisements)을 참조하세요.

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

1. 클러스터에 Cilium BGP 광고 구성을 적용합니다.

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

1. `cilium bgp peers` 명령을 사용하여 [Cilium CLI](https://docs.cilium.io/en/stable/gettingstarted/k8s-install-default/#install-the-cilium-cli)에서 작동하는 BGP 피어링을 확인할 수 있습니다. 환경에 대한 출력에 올바른 값이 표시되고 세션 상태가 `established`로 설정되어야 합니다. 문제 해결에 대한 자세한 내용은 Cilium 설명서의 [Troubleshooting and Operations Guide](https://docs.cilium.io/en/latest/network/bgp-control-plane/bgp-control-plane/#troubleshooting-and-operation-guide)를 참조하세요.

   아래 예시에서는 Cilium 에이전트를 실행하는 하이브리드 노드가 5개 있으며 각 노드는 소유한 포드 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}]
   ```