本文說明如何實作支援邊界閘道通訊協定 (BGP) 的扁平模式網路模型。實作支援 BGP 的網路模型時,BGP 會動態確保不同第 2 層網域中的 Pod 可以彼此通訊。使用 BGP 的扁平模式網路有時也稱為動態扁平 IP。
如要進一步瞭解平面模式網路模型,請參閱「平面模式與島嶼模式網路模型」。
如何實作使用 BGP 的扁平模式網路
建立新叢集時,系統會啟用 BGP 的扁平模式網路。您無法為現有叢集啟用這項功能。啟用這項功能後,您可以變更部分設定。
如要在支援 BGP 的扁平模式網路模型上實作叢集,請按照下列步驟操作:
編輯叢集設定檔:
- 將
spec.clusterNetwork.advancedNetworking
欄位設為true
。 如要為 IPv4 啟用扁平模式網路,請將
spec.clusterNetwork.flatIPv4
欄位設為true
。如需替代方案,請參閱「雙重堆疊叢集 (IPv4 Island、IPv6 Dynamic 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.100
NetworkGatewayGroup
自訂資源會管理一或多個浮動 IP 位址的清單。BGP 對等互連工作階段是從您在NetworkGatewayGroup
自訂資源中指定的浮動 IP 位址啟動。將
FlatIPMode
資訊清單附加至叢集設定檔:FlatIPMode
資源的名稱必須為default
,且命名空間為叢集命名空間。peerSelector
值flatip-peer: "true"
與 BGP 對等互連物件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: 24
ClusterCIDRConfig 是自訂資源,用於指定要動態分配給節點的 Pod CIDR 範圍。CNI 會使用節點上分配的 Pod CIDR 範圍,將 IP 位址分配給在節點上執行的個別 Pod。
ClusterCIDRConfig
也用於雙堆疊網路。如要進一步瞭解ClusterCIDRConfig
自訂資源,包括使用範例,請參閱「瞭解 ClusterCIDRConfig 自訂資源」。建立叢集:
bmctl create cluster
如要進一步瞭解如何建立叢集,請參閱「叢集建立方式總覽」一文。
如果您的環境支援多通訊協定 BGP (MP-BGP),即可透過這些 IPv4 工作階段通告 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 Dynamic 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
資源,查看目前通告的路徑: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
。