配置Terway Edge实现IDC复杂网络环境中的容器通信

Terway Edge提供了Underlay的容器网络方案,可以直接通过路由和交换机设备实现容器间网络通信能力,提供高效、可扩展、稳定的容器网络能力。本文介绍如何在IDC的复杂网络环境中采用Terway Edge实现容器之间的通信。

前提条件

已创建1.28或以上版本的ACK Edge集群,且集群采用Terway Edge网络插件

计费说明

云边容器间通信

云边通信为云上计算设备、容器、云产品和边缘侧的设备进行双向通信,您可以通过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集群时自定义)

image

前提条件

  • 已完成专有网络VPC、云企业网CEN、边界路由器VBR、专线的建设。

  • CEN中已存在一个用于连通VPCIDC的转发路由器TR,并且分别将边界路由器VBRVPC挂载到这个转发路由器TR上。

配置方法

image

一、配置上行路由(IDC访问云端VPC

  1. 在核心交换机上配置VPC 192.168.0.0/16网段的下一跳为VBR。

    说明

    如果上一级还有交换机或边界网关,则按照路由规则的标准配置方式使得访问VPC 192.168.0.0/16网段的数据包通过专线可以直接到达阿里云的VBR。

  2. VBR上配置访问VPC 192.168.0.0/16网段的下一跳为TR。

  3. TR的路由表中配置VPC 192.168.0.0/16网段的下一跳为云端VPC。

二、配置下行路由(云端VPC访问边缘IDC)

  1. VPC路由表中配置访问云下主机网段10.0.0.0/16和容器网段10.10.0.0/16的下一跳为TR。

  2. TR的路由表中配置主机网段10.0.0.0/16和容器网段10.10.0.0/16的下一跳为VBR。

  3. VBR上配置主机网段10.0.0.0/16和容器网段10.10.0.0/16的下一跳通过专线到达核心交换机。

三、配置集群内节点BGP宣告容器路由

上行路由和下行路由的配置完成后,云端VPCIDC的主机之间的网络通信已建立。根据当前网络的配置,当容器网络的数据包到达云下IDC的核心交换机后,由于交换机上缺少容器路由,数据包将无法进一步传输。因此您需要为Terway Edge配置BGPPeer,让集群内的一些节点可以通过BGP协议向交换机宣告容器路由。更多信息,请参见如何使用Terway Edge网络插件

以上图云边容器通信示意图为例,选择两个节点Node-1Node-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-1Node-2BGP对象,此外推荐您配置开启BGPGraceful Restart。其中,配置的超时时间建议大于300秒。当BGP会话意外中断后,在超时时间内仍然能保持BGP路由。

五、检查交换机

检查交换机BGP会话是否建立,即查看交换机路由表是否有容器路由,例如10.10.0.0/24(容器子网) -> 10.0.0.10(容器子网所在的节点IP)。

跨局域网的容器间通信

当您的数据中心IDC网络拓扑更加复杂,在一个IDC网络域中构建了多个局域网,您需要将位于多个局域网的设备统一接入到一个ACK Edge集群进行管理,您可以参考如下场景示例。

image

同一个节点上的容器间通信会直接在节点主机网络栈上实现互通。

对于跨节点的容器间通信Terway Edge插件的路由配置策略如下:

  • 如果两个节点位于同一个局域网(同样的ASN),则会直接将容器路由的下一跳指定到对应节点地址。

  • 如果两个节点位于不同的局域网(不同的ASN),则会走主机默认路由(一般指向交换机地址)。

两个节点位于同一局域网

两个节点位于同一局域网的场景中,节点间二层网络互通,以上图Node-1上的Pod访问Node-2Pod为例,容器网络数据包会直接通过二层网络到达Node-2,通过Node-2主机网络栈进入到Pod中。

两个节点位于不同局域网

两个节点位于不同局域网的场景中,由于节点之间二层网络不互通,因此需要借助交换机的三层网络转发能力,您需要配置BGP会话以保证网络的畅通。以上图Node-1上的Pod访问Node-5Pod为例介绍如何将容器路由发布到位于集群外的网络设备中,相关配置如下:

  1. 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   # 选择所有有这个标签的节点。
  2. 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   # 选择所有有这个标签的节点。
  3. 在交换机A和交换机B之间构建BGP会话,让交换机A和交换机B互相得知对方的容器路由。

    • 此时去包路由为:Node-1 -> 交换机A -> 交换机B -> Node-5

    • 此时回包路由为:Node-5 -> 交换机B -> 交换机A -> Node-1

  4. (可选)如果您的网络设备如图所示,还有一个核心交换机连接云端VPC的主机和容器,您还需要在交换机A、核心交换机以及交换机B之间构建BGP会话。即分别在交换机A与核心交换机之间构建BGP会话,在交换机B与核心交换机之间构建BGP会话。

跨网络域的容器间通信

当您需要将多个不同网络域中的IDC设备接入到ACK Edge集群时,您可以参考如下场景示例。

image
  1. 参考以下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   # 选择所有有这个标签的节点。
  2. 参考以下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   # 选择所有有这个标签的节点。
  3. 将不同的IDC进行互通。

    • 如果您的两个IDC之间已通过专线实现三层网络互通,您需要在交换机A和交换机B之间构建BGP会话,互相发布各自网络域的容器路由。

    • 如果您的两个IDC之间没有直接通过专线实现三层互通,您需要分别在交换机A和云上边界路由器VBR、交换机B和云上边界路由器VBR之间构建BGP协议,通过云上边界路由器VBR实现跨网络域的容器网络数据包的转发。

相关文档