Terway Edge提供了Underlay的容器網路方案,可以直接通過路由和交換器裝置實現容器間網路通訊能力,提供高效、可擴充、穩定的容器網路能力。本文介紹如何在IDC的複雜網路環境中採用Terway Edge實現容器之間的通訊。
前提條件
計費說明
關於雲企業網CEN計費,請參見雲企業網計費說明。
關於Express Connect物理專線計費,請參見Express Connect專線計費概述。
雲邊容器間通訊
雲邊通訊為雲上計算裝置、容器、雲產品和邊緣側的裝置提供雙向通訊,您可以通過ACK Edge叢集實現雲端和邊緣側裝置的通訊。
雲端:在阿里雲Virtual Private Cloud中,即雲端節點池(雲端ECS、ECI執行個體以及其他雲產品)和託管控制面。
邊緣:在自建資料中心IDC中,即邊緣節點池,主要為您自有的IDC網路裝置以及計算裝置。
雲邊容器間網路通訊樣本如下:
類別 | 涉及網段 |
雲端 | VPC網段:192.168.0.0/16 |
邊緣IDC | 主機網段:10.0.0.0/16 容器網段:10.10.0.0/16(建立ACK Edge叢集時自訂) |
前提條件
已完成Virtual Private Cloud、雲企業網CEN、邊界路由器VBR、專線的建設。
在CEN中已存在一個用於連通VPC和IDC的轉寄路由器TR,並且分別將邊界路由器VBR和VPC掛載到這個轉寄路由器TR上。
配置方法
步驟一:配置上行路由(IDC訪問雲端VPC)
在IDC核心交換器上配置VPC網段
192.168.0.0/16的下一跳為VBR。說明如果上一級還有交換器或邊界網關,則按照路由規則的標準配置方式使得訪問VPC網段
192.168.0.0/16的資料包通過專線可以直接到達阿里雲的VBR。在VBR上配置訪問VPC網段
192.168.0.0/16的下一跳為TR。在TR的路由表中配置VPC網段
192.168.0.0/16的下一跳為雲端VPC。
步驟二:配置下行路由(雲端VPC訪問邊緣IDC)
在VPC路由表中配置訪問IDC主機網段
10.0.0.0/16和容器網段10.10.0.0/16的下一跳為TR。在TR的路由表中配置IDC主機網段
10.0.0.0/16和容器網段10.10.0.0/16的下一跳為VBR。在VBR上配置IDC主機網段
10.0.0.0/16和容器網段10.10.0.0/16的下一跳通過專線到達IDC核心交換器。
步驟三:配置叢集內節點BGP宣告容器路由
上行路由和下行路由的配置完成後,雲端VPC和IDC主機之間的網路通訊已建立。根據當前網路的配置,當容器網路的資料包到達雲下IDC核心交換器後,由於交換器上缺少容器路由,資料包將無法進一步傳輸。因此您需要配置叢集內的BGPPeer,讓叢集內的一些節點可以通過BGP協議向IDC核心交換器宣告容器路由。更多資訊,請參見使用Terway Edge網路外掛程式。
以上圖雲邊容器通訊示意圖為例,選擇三個節點Node-1、Node-2和Node-3作為BGP的宣告者(speaker),宣告在IDC核心交換器下所有節點的容器網路,為該交換器下所有節點添加標籤ASN=65010,參考YAML樣本如下:
apiVersion: network.openyurt.io/v1alpha1
kind: BGPPeer
metadata:
name: peer
spec:
localSpeakers:
- Node-1
- Node-2
- Node-3
localAsNumber: 65010 # 容器網路自治域編號。
peerIP: 10.0.0.1 # 交換器地址。
peerAsNumber: 65001 # 交換器自治域編號。
nodeSelector: ASN=65010 # 選擇所有有這個標籤的節點。建議您在叢集中選擇至少三個節點作為BGP宣告者,保證在組件升級過程中保持BGP會話,避免因容器路由老化導致容器網路不通。
步驟四:配置交換器接受BGP宣告路由
根據您網路裝置的型號以及BGP服務的配置方式啟動BGP服務。
在網路裝置上,配置Node-1、Node-2和Node-3為BGP對等體(peer),並且確保可以成功建立BGP會話。
此外推薦您配置開啟BGP的Graceful Restart。其中,配置的逾時時間建議大於300秒。當BGP會話意外中斷後,在逾時時間內仍然能保持BGP路由。
步驟五:檢查交換器
檢查IDC核心交換器BGP會話是否建立,即查看交換器路由表是否有容器路由,例如10.10.0.0/24(容器子網) -> 10.0.0.10(容器子網所在的節點IP)。
跨區域網路的容器間通訊
當您的資料中心IDC網路拓撲更加複雜,在一個IDC網路域中構建了多個區域網路,您需要將位於多個區域網路的裝置統一接入到一個ACK Edge叢集進行管理,您可以參考如下情境樣本。
同一個節點上的容器間通訊會直接在節點主機網路棧上實現互連。
對於跨節點的容器間通訊Terway Edge外掛程式的路由配置策略如下:
如果兩個節點位於同一個區域網路(同樣的ASN),則會直接將容器路由的下一跳指定到對應節點地址。
如果兩個節點位於不同的區域網路(不同的ASN),則會走主機預設路由(一般指向交換器地址)。
兩個節點位於同一區域網路
兩個節點位於同一區域網路的情境中,節點間二層網路互連,以上圖Node-1上的Pod訪問Node-2的Pod為例,容器網路資料包會直接通過二層網路到達Node-2,通過Node-2主機網路棧進入到Pod中。
兩個節點位於不同區域網路
兩個節點位於不同區域網路的情境中,由於節點之間二層網路不互連,因此需要藉助交換器的三層網路轉寄能力,您需要配置BGP會話以保證網路的暢通。以上圖Node-1上的Pod訪問Node-5的Pod為例介紹如何將容器路由發布到位於叢集外的網路裝置中,相關配置如下:
在Node-1和交換器A之間構建BGP會話,將區域網路A中的容器路由發布給交換器A。參考YAML樣本如下:
apiVersion: network.openyurt.io/v1alpha1 kind: BGPPeer metadata: name: peer-a spec: localSpeakers: - Node-1 localAsNumber: 65010 # 容器網路自治域編號。 peerIP: 10.0.10.1 # 交換器地址。 peerAsNumber: 65002 # 交換器自治域編號。 nodeSelector: ASN=65010 # 選擇所有有這個標籤的節點。在Node-5和交換器B之間構建BGP會話,將區域網路B中的容器路由發布給交換器B。參考YAML樣本如下:
apiVersion: network.openyurt.io/v1alpha1 kind: BGPPeer metadata: name: peer-b spec: localSpeakers: - Node-5 localAsNumber: 65020 # 容器網路自治域編號。 peerIP: 10.0.20.1 # 交換器地址。 peerAsNumber: 65003 # 交換器自治域編號。 nodeSelector: ASN=65020 # 選擇所有有這個標籤的節點。在交換器A和交換器B之間構建BGP會話,讓交換器A和交換器B互相得知對方的容器路由。
此時去包路由為:Node-1 -> 交換器A -> 交換器B -> Node-5
此時回包路由為:Node-5 -> 交換器B -> 交換器A -> Node-1
(可選)如果您的網路裝置如圖所示,還有一個核心交換器串連雲端VPC的主機和容器,您還需要在交換器A、核心交換器以及交換器B之間構建BGP會話。即分別在交換器A與核心交換器之間構建BGP會話,在交換器B與核心交換器之間構建BGP會話。
跨網路域的容器間通訊
當您需要將多個不同網路域中的IDC裝置接入到ACK Edge叢集時,您可以參考如下情境樣本。
參考以下YAML樣本構建BGP會話,將網路域A中的容器路由發布給交換器A。
apiVersion: network.openyurt.io/v1alpha1 kind: BGPPeer metadata: name: peer-a spec: localSpeakers: - Node-1 localAsNumber: 65010 # 容器網路自治域編號。 peerIP: 10.0.10.1 # 交換器地址。 peerAsNumber: 65001 # 交換器自治域編號。 nodeSelector: ASN=65010 # 選擇所有有這個標籤的節點。參考以下YAML樣本構建BGP會話,將網路域B中的容器路由發布給交換器B。
apiVersion: network.openyurt.io/v1alpha1 kind: BGPPeer metadata: name: peer-b spec: localSpeakers: - Node-5 localAsNumber: 65020 # 容器網路自治域編號。 peerIP: 10.0.20.1 # 交換器地址。 peerAsNumber: 65002 # 交換器自治域編號。 nodeSelector: ASN=65020 # 選擇所有有這個標籤的節點。將不同的IDC進行互連。
如果您的兩個IDC之間已通過專線實現三層網路互連,您需要在交換器A和交換器B之間構建BGP會話,互相發布各自網路域的容器路由。
如果您的兩個IDC之間沒有直接通過專線實現三層互連,您需要分別在交換器A和雲上邊界路由器VBR、交換器B和雲上邊界路由器VBR之間構建BGP協議,通過雲上邊界路由器VBR實現跨網路域的容器網路資料包的轉寄。