跳转至

Egress Gateway BGP 和 EVPN 支持

实验性功能

BGP 和 EVPN 支持目前为实验性功能,后续版本可能会发生变更。我们欢迎更多的使用和意见来完善这个功能。

当前存在以下限制:

  • 仅实现了 L3VPN,尚不支持 L2VPN
  • 不支持 FRR 热重载(配置变更需要重启 Pod)
  • 不支持 BGP BFD

概述

VPC Egress Gateway 支持通过 BGP 和 EVPN/VXLAN 与外部网络建立动态路由。其主要架构为在 Egress Gateway Pod 内运行 FRR(Free Range Routing)容器来处理 BGP 和 EVPN 的控制面与数据面。Gateway 的 init 容器会根据 BgpConf 和 EvpnConf 资源自动渲染 FRR 配置。

启用 BGP 时,Egress Gateway 会通过 BGP 协议与外部路由器建立邻居关系,通告和学习路由。启用 EVPN 时,init 脚本会在 Pod 内创建 Linux VRF、bridge 和 VXLAN 设备,使用 L2VPN EVPN 地址族进行路由交换。VXLAN 封装仅发生在 Egress Gateway Pod 内,Kubernetes 节点间的网络仍然使用 Geneve。

此功能与高级功能中的 BGP 支持不同,后者使用 kube-ovn-speaker 实现 Pod/子网/Service 路由通告。

使用要求

使用 BGP/EVPN 功能前,请确保已满足 VPC Egress Gateway 的使用要求,包括 Multus-CNI 的部署。

此外,还需要一个支持 BGP(以及可选的 EVPN)的外部路由器或网络设备作为 BGP 邻居。

使用方法

创建 BgpConf 资源

BgpConf 是一个集群级别的资源,用于定义 BGP 配置。示例如下:

apiVersion: kubeovn.io/v1
kind: BgpConf
metadata:
  name: bgp-conf-6502
spec:
  localASN: 65002
  peerASN: 65001
  neighbours:
    - 10.0.1.1
  holdTime: 90s
  keepaliveTime: 30s
  connectTime: 10s
  ebgpMultiHop: true

上述资源定义了一个本地 AS 号为 65002、对端 AS 号为 65001 的 BGP 配置,邻居地址为 10.0.1.1,并启用了 EBGP Multi-Hop。

创建 EvpnConf 资源

EvpnConf 是一个集群级别的资源,用于定义 EVPN 配置。EvpnConf 需要与 BgpConf 配合使用,不可单独使用。示例如下:

apiVersion: kubeovn.io/v1
kind: EvpnConf
metadata:
  name: evpn-conf-1016
spec:
  vni: 1016
  routeTargets:
    - "65000:1016"

上述资源定义了一个 VNI 为 1016 的 EVPN 配置,Route Target 为 65000:1016

创建启用 BGP/EVPN 的 VPC Egress Gateway

首先按照 VPC Egress Gateway 文档创建 NetworkAttachmentDefinition 和对应的子网。

然后在 VpcEgressGateway 的 .spec 中通过 bgpConfevpnConf 字段引用对应的配置资源。示例如下:

apiVersion: kubeovn.io/v1
kind: VpcEgressGateway
metadata:
  name: gateway1
  namespace: default
spec:
  vpc: ovn-cluster
  replicas: 1
  externalIPs:
    - 10.0.1.13
  internalIPs:
    - 10.16.0.13
  externalSubnet: macvlan1
  bgpConf: bgp-conf-6502
  evpnConf: evpn-conf-1016
  policies:
    - snat: false
      subnets:
        - ovn-default
    - snat: false
      ipBlocks:
        - 10.17.0.0/16

上述资源会创建一个启用了 BGP 和 EVPN 的 VPC Egress Gateway。Gateway Pod 内会运行 FRR 容器,通过 BGP EVPN 与外部路由器交换路由信息,并通过 VXLAN 隧道转发流量。由于路由由 BGP/EVPN 管理,策略中的 snat 设置为 false

仅使用 BGP(不启用 EVPN)

如果仅需使用 BGP 进行路由通告而不使用 EVPN/VXLAN,只需设置 bgpConf 字段而不设置 evpnConf 字段。此模式下 FRR 将运行纯 BGP IPv4 Unicast 地址族。示例如下:

apiVersion: kubeovn.io/v1
kind: VpcEgressGateway
metadata:
  name: gateway-bgp-only
  namespace: default
spec:
  vpc: ovn-cluster
  replicas: 1
  externalSubnet: macvlan1
  bgpConf: bgp-conf-6502
  policies:
    - snat: true
      subnets:
        - ovn-default

配置参数

BgpConf

字段 类型 可选 默认值 说明 示例
localASN uint32 - 本地 AS 号。 65002
peerASN uint32 - 对端 AS 号。 65001
routerId string Pod IP BGP Router ID。 10.0.1.13
neighbours string array - BGP 邻居 IP 地址列表。 10.0.1.1
password string - BGP 认证密码。 secret
holdTime string (duration) - BGP Hold 时间。 90s
keepaliveTime string (duration) - BGP Keepalive 时间。 30s
connectTime string (duration) - BGP 连接计时器。 10s
ebgpMultiHop boolean false 是否启用 EBGP Multi-Hop。 true

EvpnConf

字段 类型 可选 默认值 说明 示例
vni uint32 - VXLAN Network Identifier。 1016
routeTargets string array - 用于导入和导出的 Route Target 列表。 65000:1016

VpcEgressGateway 新增字段

以下字段为 VpcEgressGateway .spec 中新增的 BGP/EVPN 相关字段,完整的 VpcEgressGateway 配置参数请参考 Egress Gateway 文档中的配置参数章节。

字段 类型 可选 默认值 说明 示例
bgpConf string - 引用的 BgpConf 资源名称。设置后将在 Egress Gateway 中启用 BGP。 bgp-conf-6502
evpnConf string - 引用的 EvpnConf 资源名称。需要同时设置 bgpConf。设置后将在 Egress Gateway 中启用 EVPN/VXLAN。 evpn-conf-1016

PDF Slack Support

评论