实现支持 BGP 的平面模式网络模型

本文档介绍如何实现支持边界网关协议 (BGP) 的平面模式网络模型。在实现支持 BGP 的网络模型时,BGP 会动态确保不同 L2 网域中的 pod 可以相互通信。

如需详细了解平面模式网络模型,请参阅平面模式与孤岛模式网络模型

如何实现使用 BGP 的平面模式网络

如需在支持 BGP 的平面模式网络上实现集群,请对集群的 cluster.yaml 文件进行以下更改:

  • 在集群资源中将 spec.clusterNetwork.advancedNetworking 字段设置为 true
  • 在集群资源中将 spec.clusterNetwork.flatIPv4 字段设置为 true
  • spec.clusterNetwork.flatIPv4 设置为 true 时,字段 spec.clusterNetwork.pods.cidrBlocks 会被忽略,因此可予以省略。但是,您需要在 yaml 文件中定义 ClusterCIDRConfigs 部分(按节点、按节点池和/或按集群)。如需了解详情,请参阅下面的 cluster.yaml 文件示例。
  • NetworkGatewayGroup 资源附加到 cluster.yaml 文件,并指定要用于 BGP 对等互连的浮动 IP。确保名称为 default,且命名空间为集群命名空间。
  • FlatIPModeBGPPeer 资源附加到 cluster.yaml 文件。FlatIPMode 资源的名称必须为 default,且所有资源都必须位于集群命名空间中。

对于预览版,仅支持 IPv4 BGP 对等互连和会话。不过,如果您的环境支持多协议 BGP (MP-BGP),则可以通过这些 IPv4 会话通告 IPv4 和 IPv6 路由。不支持 IPv6 BGP 对等连接配置。

以下 cluster.yaml 文件摘录显示了如何实现支持 BGP 的平面模式网络。请注意,此摘录中显示的 IP 地址只是示例,您需要将其替换为专属 IP 地址:


apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: bm
  namespace: cluster-bm
spec:

...

  clusterNetwork:
    advancedNetworking: true
    flatIPv4: true

  ... (other cluster config omitted)

apiVersion: networking.gke.io/v1
kind: NetworkGatewayGroup
metadata:
  name: default
  namespace: cluster-bm
spec:
  floatingIPs:
  - 10.0.1.100
  - 10.0.2.100

....

apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: FlatIPMode
metadata:
  name: default
  namespace: cluster-bm
spec:
  enableBGPIPv4: true
  enableBGPIPv6: false
  peerSelector:
    flatip-peer: "true"

....

apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
  name: bgppeer1
  namespace: cluster-bm
  labels:
    flatip-peer: "true"
spec:
  localASN: 65001
  peerASN: 65000
  peerIP: 10.0.1.254
  sessions: 2

....

apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
  name: bgppeer2
  namespace: cluster-bm
  labels:
    flatip-peer: "true"
spec:
  localASN: 65001
  peerASN: 65000
  peerIP: 10.0.2.254
  sessions: 2

....

apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: ClusterCIDRConfig
metadata:
  name: cluster-wide-1
  namespace: cluster-bm
spec:
  ipv4:
    cidr: "192.168.0.0/16"
    perNodeMaskSize: 24