

 **帮助改进此页面** 

要帮助改进本用户指南，请选择位于每个页面右侧窗格中的**在 GitHub 上编辑此页面**链接。

# 为混合节点配置 Cilium BGP
<a name="hybrid-nodes-cilium-bgp"></a>

本主题介绍如何为 Amazon EKS 混合节点功能配置 Cilium 边界网关协议（BGP）。Cilium 的 BGP 功能称为 [Cilium BGP 控制面板](https://docs.cilium.io/en/stable/network/bgp-control-plane/bgp-control-plane/)，可用于向本地网络通告容器组（pod）和服务地址。有关将容器组（pod）CIDR 设置为可在本地网络上路由的替代方法，请参阅[可路由的远程容器组（pod）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 结合使用，以向本地网络通告容器组（pod）或服务地址，必须已经安装了 Cilium 并配置了 `bgpControlPlane.enabled: true`。如果要为现有 Cilium 部署启用 BGP，则如果之前未启用 BGP，则必须重新启动 Cilium 管理器才能应用 BGP 配置。可以在 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` 的文件。您可能需要从网络管理员获取以下信息：
   + 使用 ASN 为运行 Cilium 的节点配置 `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 对等设置的值必须与您正在与之对等的本地路由器的值相匹配。
   + 配置 `holdTimeSeconds`，其决定了 BGP 对等体在宣布会话关闭之前等待保持连接或更新消息的时间。默认值为 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"
     ```

1. 将 Cilium BGP 对等体配置应用于集群。

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

1. 使用 `CiliumBGPAdvertisement` 资源创建名为 `cilium-bgp-advertisement-pods.yaml` 的文件，用于向本地网络通告容器组（pod）CIDR。
   + `CiliumBGPAdvertisement` 资源用于定义各种通告类型以及与之相关的属性。以下示例将 Cilium 配置为仅通告容器组（pod）CIDR。有关配置 Cilium 以通告服务地址的更多信息，请参阅[服务类型 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` 时，每个节点都会通告其拥有的容器组（pod）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 CLI](https://docs.cilium.io/en/stable/gettingstarted/k8s-install-default/#install-the-cilium-cli)，使用 `cilium bgp peers` 命令来确认 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 代理，每个节点都会通告其拥有的容器组（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}]
   ```