本文档介绍如何实现支持边界网关协议 (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.100NetworkGatewayGroup自定义资源管理一个或多个浮动 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: 24ClusterCIDRConfig 是自定义资源,它指定要动态分配给节点的 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。