本文档介绍如何实现支持边界网关协议 (BGP) 的平面模式网络模型。在实现支持 BGP 的网络模型时,BGP 会动态确保不同第 2 层网域中的 Pod 可以相互通信。支持 BGP 的平面模式网络有时称为动态平面 IP。
如需详细了解平面模式网络模型,请参阅平面模式与孤岛模式网络模型。
如何实现使用 BGP 的平面模式网络
当您创建新集群时,系统会启用支持 BGP 的平面模式网络。您无法为现有集群启用此功能。此功能启用后,您可以更改某些配置设置。
如需在支持 BGP 的平面模式网络上实现集群,请执行以下操作:
修改集群配置文件:
- 将
spec.clusterNetwork.advancedNetworking
字段设置为true
。 如果要为 IPv4 启用平面模式网络,请将
spec.clusterNetwork.flatIPv4
字段设置为true
。另请参阅双栈集群(IPv4 孤岛模式、IPv6 动态平面 IP),使用仅 IPv6 平面模式网络配置集群。
apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: bm namespace: cluster-bm spec: type: user ... clusterNetwork: advancedNetworking: true flatIPv4: true ...
当
spec.clusterNetwork.flatIPv4
设置为true
时,字段spec.clusterNetwork.pods.cidrBlocks
会被忽略,因此可予以省略。 但是,您需要在集群配置文件中添加ClusterCIDRConfigs
清单(按节点、节点池和/或集群)。- 将
将
NetworkGatewayGroup
清单附加到集群配置文件。指定用于 BGP 对等互连的浮动 IP。确保资源名称为
default
,且命名空间为集群命名空间。--- apiVersion: networking.gke.io/v1 kind: NetworkGatewayGroup metadata: name: default namespace: cluster-bm spec: floatingIPs: - 10.0.1.100 - 10.0.2.100
NetworkGatewayGroup
自定义资源管理一个或多个浮动 IP 地址的列表。BGP 对等互连会话从您在NetworkGatewayGroup
自定义资源中指定的浮动 IP 地址发起。将
FlatIPMode
清单附加到集群配置文件。FlatIPMode
资源的名称必须为default
,并且命名空间为集群命名空间。peerSelector
值flatip-peer: "true"
与 BGPPeer 对象bgppeer1
和bgppeer2
(在以下步骤中定义)中的标签匹配,因此这两个对等方都用于平面模式网络。以下
FlatIPMode
清单适用于支持 BGP 的 IPv4 单栈平面模式网络。如需了解其他配置,请参阅配置示例。--- apiVersion: baremetal.cluster.gke.io/v1alpha1 kind: FlatIPMode metadata: name: default namespace: cluster-bm spec: enableBGPIPv4: true enableBGPIPv6: false peerSelector: flatip-peer: "true"
将一个或多个
BGPPeer
清单附加到集群配置文件:您可以为资源选择名称,但所有
BGPPeer
资源都必须位于集群命名空间中。--- 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
将
ClusterCIDRConfig
清单附加到集群配置文件。CusterCIDRConfig
资源也必须位于集群命名空间中。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
ClusterCIDRConfig 是自定义资源,它指定要动态分配给节点的 Pod CIDR 范围。CNI 使用在节点上分配的 Pod CIDR 范围来为节点上运行的各个 Pod 分配 IP 地址。
ClusterCIDRConfig
也用于双栈网络。如需详细了解ClusterCIDRConfig
自定义资源(包括使用示例),请参阅了解 ClusterCIDRConfig 自定义资源。创建集群:
bmctl create cluster
如需详细了解如何创建集群,请参阅集群创建概览。
如果您的环境支持多协议 BGP (MP-BGP),则可以通过这些 IPv4 会话通告 IPv4 和 IPv6 路由。如需查看不同配置的示例(包括使用 MP-BGP 的示例),请参阅配置示例。
修改基于 BGP 的平面模式网络配置
在创建集群并配置为使用支持 BGP 的平面模式网络模型后,您可以更新某些配置设置。当您对 BGP 相关资源(NetworkGatewayGroup
、FlatIPMode
和 BGPPeer
)进行后续更新时,请使用管理员集群 kubeconfig 文件。然后,管理员集群会将更改协调到用户集群。如果您在用户集群上直接修改这些资源,则管理员集群会在后续协调中覆盖您的更改。
配置示例
以下部分包含使用 BGP 的平面模式网络模型不同变体的集群配置示例。示例配置文件并不完整,其中忽略了与使用 BGP 的平面模式网络无关的大多数集群设置。
单栈 IPv4 集群
以下集群配置文件示例展示了使用支持 BGP 的平面模式网络配置单栈 IPv4 集群的设置:
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: bm
namespace: cluster-bm
spec:
...
clusterNetwork:
advancedNetworking: true
flatIPv4: true
services:
cidrBlocks:
- 10.96.0.0/12
...
---
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: ClusterCIDRConfig
metadata:
name: cluster-wide-1
namespace: cluster-bm # Must match the cluster namespace
spec:
ipv4:
cidr: "222.2.0.0/16"
perNodeMaskSize: 24
---
apiVersion: networking.gke.io/v1
kind: NetworkGatewayGroup
metadata:
name: default
namespace: cluster-bm # Must match the cluster namespace
spec:
floatingIPs:
- 10.0.1.100
- 10.0.3.100
---
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: FlatIPMode
metadata:
name: default
namespace: cluster-bm # Must match the cluster namespace
spec:
enableBGPIPv4: true
enableBGPIPv6: false
peerSelector:
flatipmode-peer: "true"
---
apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
name: bgppeer1
namespace: cluster-bm # Must match the cluster namespace
labels:
flatipmode-peer: "true"
spec:
localASN: 65001
peerASN: 65002
peerIP: 10.0.1.254
sessions: 2
---
apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
name: bgppeer2
namespace: cluster-bm # Must match the cluster namespace
labels:
flatipmode-peer: "true"
spec:
localASN: 65001
peerASN: 65002
peerIP: 10.0.3.254
sessions: 2
双栈集群(IPv4 孤岛模式、IPv6 动态平面 IP)
以下集群配置文件示例展示了使用支持 BGP 的仅 IPv6 平面模式网络配置双栈 (IPv4/IPv6) 集群的设置:
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: bm
namespace: cluster-bm
spec:
...
clusterNetwork:
advancedNetworking: true
flatIPv4: false
pods:
cidrBlocks:
- 192.168.0.0/16
services:
cidrBlocks:
- 10.96.0.0/12
# Additional IPv6 CIDR block determines if the cluster is dual-stack
- 2620:0:1000:2630:5:2::/112
...
---
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: ClusterCIDRConfig
metadata:
name: cluster-wide-1
namespace: cluster-bm # Must match the cluster namespace
spec:
ipv4:
cidr: "192.168.0.0/16"
perNodeMaskSize: 24
ipv6:
cidr: "2222:3::/112"
perNodeMaskSize: 120
---
apiVersion: networking.gke.io/v1
kind: NetworkGatewayGroup
metadata:
name: default
namespace: cluster-bm # Must match the cluster namespace
spec:
floatingIPs:
- 10.0.1.100
- 10.0.3.100
---
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: FlatIPMode
metadata:
name: default
namespace: cluster-bm # Must match the cluster namespace
spec:
enableBGPIPv4: false
enableBGPIPv6: true
peerSelector:
flatipmode-peer: "true"
---
apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
name: bgppeer1
namespace: cluster-bm # Must match the cluster namespace
labels:
flatipmode-peer: "true"
spec:
localASN: 65001
peerASN: 65002
peerIP: 10.0.1.254
sessions: 2
---
apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
name: bgppeer2
namespace: cluster-bm # Must match the cluster namespace
labels:
flatipmode-peer: "true"
spec:
localASN: 65001
peerASN: 65002
peerIP: 10.0.3.254
sessions: 2
双栈集群(IPv4 动态平面 IP、IPv6 动态平面 IP)
以下集群配置文件示例展示了使用支持 BGP 的平面模式网络配置双栈集群的设置:
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: bm
namespace: cluster-bm
spec:
...
clusterNetwork:
advancedNetworking: true
flatIPv4: true
pods:
cidrBlocks:
- 192.168.0.0/16
services:
cidrBlocks:
- 10.96.0.0/12
# Additional IPv6 CIDR block determines if the cluster is dual-stack
- 2620:0:1000:2630:5:2::/112
...
---
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: ClusterCIDRConfig
metadata:
name: cluster-wide-1
namespace: cluster-bm # Must match the cluster namespace
spec:
ipv4:
cidr: "222.2.0.0/16"
perNodeMaskSize: 24
ipv6:
cidr: "2222:3::/112"
perNodeMaskSize: 120
---
apiVersion: networking.gke.io/v1
kind: NetworkGatewayGroup
metadata:
name: default
namespace: cluster-bm # Must match the cluster namespace
spec:
floatingIPs:
- 10.0.1.100
- 10.0.3.100
---
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: FlatIPMode
metadata:
name: default
namespace: cluster-bm # Must match the cluster namespace
spec:
enableBGPIPv4: true
enableBGPIPv6: true
peerSelector:
flatipmode-peer: "true"
---
apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
name: bgppeer1
namespace: cluster-bm # Must match the cluster namespace
labels:
flatipmode-peer: "true"
spec:
localASN: 65001
peerASN: 65002
peerIP: 10.0.1.254
sessions: 2
---
apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
name: bgppeer2
namespace: cluster-bm # Must match the cluster namespace
labels:
flatipmode-peer: "true"
spec:
localASN: 65001
peerASN: 65002
peerIP: 10.0.3.254
sessions: 2
问题排查
为了帮助您排查与使用 BGP 的平面模式网络相关的问题,本部分介绍了如何检查配置:
验证是否在管理员集群的集群命名空间中创建了
FlatIPModes
对象:kubectl get flatipmodes -A --kubeconfig ADMIN_KUBECONFIG
应返回如下所示的内容:
NAMESPACE NAME AGE cluster-bm default 2d17h
验证是否在用户集群上创建了
flatipmodes.networking.gke.io
对象:flatipmodes.networking.gke.io
是集群级对象。kubectl get flatipmodes.networking.gke.io --kubeconfig USER_KUBECONFIG
应返回如下所示的内容:
NAME AGE default 2d17h
获取
BGPSessions
资源以查看当前会话:kubectl get bgpsessions -A --kubeconfig USER_KUBECONFIG
应返回如下所示的内容:
NAMESPACE NAME LOCAL ASN PEER ASN LOCAL IP PEER IP STATE LAST REPORT kube-system 10.0.1.254-node-01 65500 65000 10.0.1.100 10.0.1.254 Established 2s kube-system 10.0.1.254-node-02 65500 65000 10.0.3.100 10.0.1.254 NotEstablished 2s kube-system 10.0.3.254-node-01 65500 65000 10.0.1.100 10.0.3.254 NotEstablished 2s kube-system 10.0.3.254-node-02 65500 65000 10.0.3.100 10.0.3.254 Established 2s
获取
BGPAdvertisedRoute
资源以查看当前通告的路由:kubectl get bgpadvertisedroutes -A --kubeconfig USER_KUBECONFIG
应返回如下所示的内容:
NAMESPACE NAME PREFIX METRIC kube-system route-via-222-22-208-240 222.2.0.0/24 kube-system route-via-222-22-209-240 222.2.1.0/24
路由名称指示下一个跃点。例如,上述示例响应中的
route-via-222-22-208-240
指示通告前缀222.2.0.0/24
的下一个跃点是222.22.208.240
。