Terway Edge提供了Underlay的容器网络方案,可以直接通过路由和交换机设备实现容器间网络通信能力,提供高效、可扩展、稳定的容器网络能力。本文介绍如何在IDC的复杂网络环境中采用Terway Edge实现容器之间的通信。
前提条件
计费说明
关于云企业网CEN计费,请参见云企业网计费说明。
关于高速通道物理专线计费,请参见高速通道专线计费概述。
云边容器间通信
云边通信为云上计算设备、容器、云产品和边缘侧的设备进行双向通信,您可以通过ACK Edge集群实现云端和边缘侧设备的通信。
云端:在阿里云专有网络VPC中,即云端节点池(云端ECS、ECI实例以及其他云产品)和托管控制面。
边缘:在自建数据中心IDC中,即边缘节点池,主要为您自有的IDC网络设备以及计算设备。
云边容器间网络通信示例如下:
类别 | 涉及网段 |
云端 | VPC网段:192.168.0.0/16 |
边缘IDC | 主机网段:10.0.0.0/16 容器网段:10.10.0.0/16(创建ACK Edge集群时自定义) |
前提条件
已完成专有网络VPC、云企业网CEN、边界路由器VBR、专线的建设。
在CEN中已存在一个用于连通VPC和IDC的转发路由器TR,并且分别将边界路由器VBR和VPC挂载到这个转发路由器TR上。
配置方法
一、配置上行路由(IDC访问云端VPC)
在核心交换机上配置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路由表中配置访问云下主机网段10.0.0.0/16和容器网段10.10.0.0/16的下一跳为TR。
在TR的路由表中配置主机网段10.0.0.0/16和容器网段10.10.0.0/16的下一跳为VBR。
在VBR上配置主机网段10.0.0.0/16和容器网段10.10.0.0/16的下一跳通过专线到达核心交换机。
三、配置集群内节点BGP宣告容器路由
上行路由和下行路由的配置完成后,云端VPC和IDC的主机之间的网络通信已建立。根据当前网络的配置,当容器网络的数据包到达云下IDC的核心交换机后,由于交换机上缺少容器路由,数据包将无法进一步传输。因此您需要为Terway Edge配置BGPPeer,让集群内的一些节点可以通过BGP协议向交换机宣告容器路由。更多信息,请参见如何使用Terway Edge网络插件。
以上图云边容器通信示意图为例,选择两个节点Node-1和Node-2作为BGP的宣告者,宣告在核心交换机下所有节点的容器网络,为该交换机下所有节点添加标签ASN=65010
,参考YAML示例如下:
apiVersion: network.openyurt.io/v1alpha1
kind: BGPPeer
metadata:
name: peer
spec:
localSpeakers:
- Node-1
- Node-2
localAsNumber: 65010 # 容器网络自治域编号。
peerIP: 10.0.0.1 # 交换机地址。
peerAsNumber: 65001 # 交换机自治域编号。
nodeSelector: ASN=65010 # 选择所有有这个标签的节点。
四、配置交换机接受BGP宣告路由
根据您的交换机BGP配置方法,配置Node-1和Node-2为BGP对象,此外推荐您配置开启BGP的Graceful Restart。其中,配置的超时时间建议大于300秒。当BGP会话意外中断后,在超时时间内仍然能保持BGP路由。
五、检查交换机
检查交换机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实现跨网络域的容器网络数据包的转发。