このドキュメントでは、Border Gateway Protocol(BGP)をサポートするフラットモードのネットワーク モデルを実装する方法について説明します。BGP をサポートするネットワーク モデルを実装すると、異なるレイヤ 2 ドメインの Pod がBGP によって自動的に相互に通信できるようになります。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
カスタム リソースは、1 つ以上のフローティング IP アドレスのリストを管理します。BGP ピアリング セッションは、NetworkGatewayGroup
カスタム リソースで指定したフローティング IP アドレスから開始されます。FlatIPMode
マニフェストをクラスタ構成ファイルに追加します。FlatIPMode
リソースの名前はdefault
であり、名前空間はクラスタの名前空間であることが必要です。peerSelector
の値flatip-peer: "true"
は、BGP ピア オブジェクト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"
1 つ以上の
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)
次のクラスタ構成ファイルのサンプルは、IPv6 専用の BGP でフラットモード ネットワーキングを使用してデュアルスタック(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
であることを示しています。