

 **協助改進此頁面** 

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

若要為本使用者指南貢獻內容，請點選每個頁面右側面板中的**在 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. 若要搭配 Cilium 使用 BGP 向內部部署網路公告 Pod 或服務地址，Cilium 必須與 `bgpControlPlane.enabled: true` 一起安裝。如果您要為現有的 Cilium 部署啟用 BGP，則必須重新啟動 Cilium 運算子才能套用 BGP 組態 (如果先前尚未啟用 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. 建立稱為 `cilium-bgp-cluster.yaml` 的檔案，其中具有 `CiliumBGPClusterConfig` 定義。您可能需要向您的網路管理員取得下列資訊。
   + 針對執行 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 對等組態](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 公告組態](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` 命令，確認 BGP 對等互連與 [Cilium CLI](https://docs.cilium.io/en/stable/gettingstarted/k8s-install-default/#install-the-cilium-cli) 搭配運作。您應該會在環境的輸出中看到正確的值，且工作階段狀態為 `established`。如需有關故障診斷的詳細資訊，請參閱 Cilium 文件中的[故障診斷和操作指南](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}]
   ```