支援邊界閘道通訊協定 (BGP) 的扁平模式網路模型,可讓不同第 2 層網域中的 Pod 互相通訊。BGP 會在這些網域之間動態 advertise 路由。採用 BGP 的扁平模式網路有時稱為「動態扁平 IP」。
如要進一步瞭解平面模式網路模型,請參閱「平面模式與孤島模式網路模型」。
如何導入使用 BGP 的平面模式網路
建立新叢集時,系統會啟用採用 BGP 的扁平模式網路。您無法為現有叢集啟用這項功能。啟用這項功能後,您可以變更部分設定。
如要在支援 BGP 的平面模式網路模型上實作叢集,請按照下列步驟操作:
編輯叢集設定檔:
- 將
spec.clusterNetwork.advancedNetworking欄位設為true。 如要為 IPv4 啟用平面模式網路,請將
spec.clusterNetwork.flatIPv4欄位設為true。如需替代方案,請參閱「雙重堆疊叢集 (IPv4 Island、IPv6 動態 Flat IP)」,瞭解如何為叢集設定僅限 IPv6 的 Flat 模式網路。
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資訊清單適用於 IPv4 單一堆疊、採用 BGP 的平面模式網路。如需其他設定,請參閱「設定範例」。--- 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 工作階段 advertise IPv4 和 IPv6 路由。如需不同設定的範例 (包括使用 MP-BGP 的範例),請參閱「設定範例」。
修改以 BGP 為基礎的平面模式網路設定
建立叢集並設定為使用 BGP 的平面模式網路模型後,您可以更新部分設定。後續更新 BGP 相關資源 (NetworkGatewayGroup、FlatIPMode 和 BGPPeer) 時,請使用管理員叢集 kubeconfig 檔案。管理員叢集會協調使用者叢集的變更。如果您直接在使用者叢集上編輯這些資源,管理員叢集會在後續協調中覆寫您的變更。
設定範例
以下各節提供叢集設定範例,說明採用 BGP 的平面模式網路模型各種變化版本。設定檔範例不完整。大部分與 BGP 扁平模式網路無關的叢集設定都已省略。
單一堆疊 IPv4 叢集
下列叢集設定檔範例顯示如何設定單一堆疊 IPv4 叢集,並採用 BGP 的平面模式網路:
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 Island、IPv6 動態 Flat IP)
下列叢集設定檔範例顯示如何設定雙重堆疊 (IPv4/IPv6) 叢集,並使用 BGP 搭配僅限 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 動態 Flat IP、IPv6 動態 Flat 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資源,查看目前 advertise 的路由: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表示 advertised 前置字元222.2.0.0/24的下一個躍點是222.22.208.240。