32.6. MetalLB BGP ピアの設定
クラスター管理者は、ボーダーゲートウェイプロトコル (BGP) ピアを追加、変更、および削除できます。MetalLB Operator は、BGP ピアカスタムリソースを使用して、MetalLB speaker
Pod が BGP セッションを開始するために接続するピアを識別します。ピアは、MetalLB がサービスに割り当てるロードバランサー IP アドレスのルートアドバタイズメントを受信します。
32.6.1. BGP ピアカスタムリソースについて
次の表で、BGP ピアカスタムリソースのフィールドを説明します。
フィールド | 型 | 説明 |
---|---|---|
|
| BGP ピアカスタムリソースの名前を指定します。 |
|
| BGP ピアカスタムリソースの namespace を指定します。 |
|
|
BGP セッションのローカルエンドの Autonomous System 番号を指定します。追加するすべての BGP ピアカスタムリソースに同じ値を指定します。範囲は |
|
|
BGP セッションのリモートエンドの Autonomous System 番号を指定します。範囲は |
|
| BGP セッションを確立するために接続するピアの IP アドレスを指定します。 |
|
| オプション: BGP セッションの確立時に使用する IP アドレスを指定します。値は IPv4 アドレスである必要があります。 |
|
|
オプション: BGP セッションを確立するために接続するピアのネットワークポートを指定します。範囲は |
|
|
オプション: BGP ピアに提案するホールドタイムの期間を指定します。最小値は 3 秒 ( |
|
|
オプション: キープアライブメッセージを BGP ピアに送信する間の最大間隔を指定します。このフィールドを指定する場合は、 |
|
| オプション: BGP ピアにアドバタイズするルーター ID を指定します。このフィールドを指定する場合は、追加するすべての BGP ピアカスタムリソースに同じ値を指定する必要があります。 |
|
| オプション: TCP MD5 認証が済んだ BGP セッションを実施するルーターのピアに送信する MD5 パスワードを指定します。 |
|
|
オプション: BGP ピアの認証シークレットの名前を指定します。シークレットは |
|
| オプション: BFD プロファイルの名前を指定します。 |
|
| オプション: 一致式と一致ラベルを使用してセレクターを指定し、BGP ピアに接続できるノードを制御します。 |
|
|
オプション: BGP ピアがネットワークホップ数回分を離れるように指定します。BGP ピアが同じネットワークに直接接続されていない場合には、このフィールドが |
passwordSecret
フィールドは、password
フィールドと相互に排他的であり、使用するパスワードを含むシークレットへの参照が含まれています。両方のフィールドを設定すると、解析が失敗します。
32.6.2. BGP ピアの設定
クラスター管理者は、BGP ピアカスタムリソースを追加して、ネットワークルーターとルーティング情報を交換し、サービスの IP アドレスをアドバタイズできます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてログインしている。 - BGP アドバタイズメントを使用して MetalLB を設定します。
手順
以下の例のような内容で、
bgppeer.yaml
などのファイルを作成します。apiVersion: metallb.io/v1beta2 kind: BGPPeer metadata: namespace: metallb-system name: doc-example-peer spec: peerAddress: 10.0.0.1 peerASN: 64501 myASN: 64500 routerID: 10.10.10.10
BGP ピアの設定を適用します。
$ oc apply -f bgppeer.yaml
32.6.3. 指定されたアドレスプールに対して特定の BGP ピアセットを設定
これは、以下を実行するための手順です。
-
アドレスプールのセット (
pool1
およびpool2
) を設定します。 -
BGP ピアセット (
peer1
およびpeer2
) を設定します。 -
pool1
をpeer1
に、pool2
をpeer2
に割り当てるように BGP アドバタイズメントを設定します。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてログインしている。
手順
アドレスプール
pool1
を作成します。以下の例のような内容で、
ipaddresspool1.yaml
などのファイルを作成します。apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: namespace: metallb-system name: pool1 spec: addresses: - 4.4.4.100-4.4.4.200 - 2001:100:4::200-2001:100:4::400
IP アドレスプール
pool1
の設定を適用します。$ oc apply -f ipaddresspool1.yaml
アドレスプール
pool2
を作成します。以下の例のような内容で、
ipaddresspool2.yaml
などのファイルを作成します。apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: namespace: metallb-system name: pool2 spec: addresses: - 5.5.5.100-5.5.5.200 - 2001:100:5::200-2001:100:5::400
IP アドレスプール
pool2
の設定を適用します。$ oc apply -f ipaddresspool2.yaml
BGP
peer1
を作成します。以下の例のような内容で、
bgppeer1.yaml
などのファイルを作成します。apiVersion: metallb.io/v1beta2 kind: BGPPeer metadata: namespace: metallb-system name: peer1 spec: peerAddress: 10.0.0.1 peerASN: 64501 myASN: 64500 routerID: 10.10.10.10
BGP ピアの設定を適用します。
$ oc apply -f bgppeer1.yaml
BGP
peer2
を作成します。以下の例のような内容で、
bgppeer2.yaml
などのファイルを作成します。apiVersion: metallb.io/v1beta2 kind: BGPPeer metadata: namespace: metallb-system name: peer2 spec: peerAddress: 10.0.0.2 peerASN: 64501 myASN: 64500 routerID: 10.10.10.10
BGP peer2 の設定を適用します。
$ oc apply -f bgppeer2.yaml
BGP advertisement 1 を作成します。
以下の例のような内容で、
bgpadvertisement1.yaml
などのファイルを作成します。apiVersion: metallb.io/v1beta1 kind: BGPAdvertisement metadata: name: bgpadvertisement-1 namespace: metallb-system spec: ipAddressPools: - pool1 peers: - peer1 communities: - 65535:65282 aggregationLength: 32 aggregationLengthV6: 128 localPref: 100
設定を適用します。
$ oc apply -f bgpadvertisement1.yaml
BGP advertisement 2 を作成します。
以下の例のような内容で、
bgpadvertisement2.yaml
などのファイルを作成します。apiVersion: metallb.io/v1beta1 kind: BGPAdvertisement metadata: name: bgpadvertisement-2 namespace: metallb-system spec: ipAddressPools: - pool2 peers: - peer2 communities: - 65535:65282 aggregationLength: 32 aggregationLengthV6: 128 localPref: 100
設定を適用します。
$ oc apply -f bgpadvertisement2.yaml
32.6.4. ネットワーク VRF を介したサービスの公開
ネットワークインターフェイス上の VRF を BGP ピアに関連付けることにより、仮想ルーティングおよび転送 (VRF) インスタンスを通じてサービスを公開できます。
BGP ピア上の VRF を介したサービスの公開は、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビューの機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
ネットワークインターフェイス上で VRF を使用して BGP ピア経由でサービスを公開すると、サービスへのトラフィックを分離し、独立したルーティング決定を設定し、ネットワークインターフェイス上でマルチテナントのサポートを有効化できます。
ネットワーク VRF に属するインターフェイスを通じて BGP セッションを確立すると、MetalLB はそのインターフェイスを通じてサービスをアドバタイズし、外部トラフィックがこのインターフェイスを通じてサービスに到達させることができます。ただし、ネットワーク VRF ルーティングテーブルは、OVN-Kubernetes で使用されるデフォルトの VRF ルーティングテーブルとは異なります。したがって、トラフィックは OVN-Kubernetes ネットワークインフラストラクチャーに到達できません。
サービスに送信されたトラフィックが OVN-Kubernetes ネットワークインフラストラクチャーに到達できるようにするには、ルーティングルールを設定してネットワークトラフィックのネクストホップを定義する必要があります。詳細は、関連情報 セクションの 「MetalLB を使用した対称ルーティングの管理」の NodeNetworkConfigurationPolicy
リソースを参照してください。
BGP ピアを使用してネットワーク VRF を介してサービスを公開するための概要手順は次のとおりです。
- BGP ピアを定義し、ネットワーク VRF インスタンスを追加します。
- MetalLB の IP アドレスプールを指定します。
- MetalLB の BGP ルートアドバタイズメントを設定して、指定された IP アドレスプールと VRF インスタンスに関連付けられた BGP ピアを使用してルートをアドバタイズします。
- サービスをデプロイして設定をテストします。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてログインしている。 -
NodeNetworkConfigurationPolicy
を定義して、仮想ルーティングおよび転送 (VRF) インスタンスをネットワークインターフェイスに関連付けている。この前提条件を満たす方法の詳細は、関連情報 セクションを参照してください。 - MetalLB をクラスターにインストールしている。
手順
BGPPeer
カスタムリソース (CR) を作成します。次の例のような内容を含むファイル
(frrviavrf.yaml
など) を作成します。apiVersion: metallb.io/v1beta2 kind: BGPPeer metadata: name: frrviavrf namespace: metallb-system spec: myASN: 100 peerASN: 200 peerAddress: 192.168.130.1 vrf: ens4vrf 1
- 1
- BGP ピアに関連付けるネットワーク VRF インスタンスを指定します。MetalLB は、サービスをアドバタイズし、VRF 内のルーティング情報に基づいてルーティングを決定できます。
注記このネットワーク VRF インスタンスは
NodeNetworkConfigurationPolicy
CR で設定する必要があります。詳細は、関連情報 を参照してください。次のコマンドを実行して、BGP ピアの設定を適用します。
$ oc apply -f frrviavrf.yaml
IPAddressPool
CR を作成します。次の例のような内容を含むファイル (
first-pool.yaml
など) を作成します。apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: name: first-pool namespace: metallb-system spec: addresses: - 192.169.10.0/32
次のコマンドを実行して、IP アドレスプールの設定を適用します。
$ oc apply -f first-pool.yaml
BGPAdvertisement
CR を作成します。次の例のような内容を含むファイル (
first-adv.yaml
など) を作成します。apiVersion: metallb.io/v1beta1 kind: BGPAdvertisement metadata: name: first-adv namespace: metallb-system spec: ipAddressPools: - first-pool peers: - frrviavrf 1
- 1
- この例では、MetalLB は、
first-pool
の IP アドレスプールからfrrviavrf
BGP ピアに IP アドレスの範囲をアドバタイズします。
次のコマンドを実行して、BGP アドバタイズメントの設定を適用します。
$ oc apply -f first-adv.yaml
Namespace
、Deployment
、およびService
CR を作成します。次の例のような内容を含むファイル (
deploy-service.yaml
など) を作成します。apiVersion: v1 kind: Namespace metadata: name: test --- apiVersion: apps/v1 kind: Deployment metadata: name: server namespace: test spec: selector: matchLabels: app: server template: metadata: labels: app: server spec: containers: - name: server image: registry.redhat.io/ubi9/ubi ports: - name: http containerPort: 30100 command: ["/bin/sh", "-c"] args: ["sleep INF"] --- apiVersion: v1 kind: Service metadata: name: server1 namespace: test spec: ports: - name: http port: 30100 protocol: TCP targetPort: 30100 selector: app: server type: LoadBalancer
次のコマンドを実行して、namespace、デプロイメント、およびサービスの設定を適用します。
$ oc apply -f deploy-service.yaml
検証
次のコマンドを実行して、MetalLB スピーカー Pod を識別します。
$ oc get -n metallb-system pods -l component=speaker
出力例
NAME READY STATUS RESTARTS AGE speaker-c6c5f 6/6 Running 0 69m
次のコマンドを実行して、BGP セッションの状態がスピーカー Pod で
Established
となっていることを確認します。設定に一致するように変数を置き換えます。$ oc exec -n metallb-system <speaker_pod> -c frr -- vtysh -c "show bgp vrf <vrf_name> neigh"
出力例
BGP neighbor is 192.168.30.1, remote AS 200, local AS 100, external link BGP version 4, remote router ID 192.168.30.1, local router ID 192.168.30.71 BGP state = Established, up for 04:20:09 ...
次のコマンドを実行して、サービスが正しくアドバタイズされていることを確認します。
$ oc exec -n metallb-system <speaker_pod> -c frr -- vtysh -c "show bgp vrf <vrf_name> ipv4"
32.6.5. BGP ピア設定の例
32.6.5.1. 例: BGP ピアに接続するノードの制限
ノードセレクターフィールドを指定して、BGP ピアに接続できるノードを制御できます。
apiVersion: metallb.io/v1beta2 kind: BGPPeer metadata: name: doc-example-nodesel namespace: metallb-system spec: peerAddress: 10.0.20.1 peerASN: 64501 myASN: 64500 nodeSelectors: - matchExpressions: - key: kubernetes.io/hostname operator: In values: [compute-1.example.com, compute-2.example.com]
32.6.5.2. 例: BGP ピアの BFD プロファイル指定
BGP ピアに関連付ける BFD プロファイルを指定できます。BFD は、BGP のみの場合よりも、ピア間の通信障害をより迅速に検出して、BGP を補完します。
apiVersion: metallb.io/v1beta2 kind: BGPPeer metadata: name: doc-example-peer-bfd namespace: metallb-system spec: peerAddress: 10.0.20.1 peerASN: 64501 myASN: 64500 holdTime: "10s" bfdProfile: doc-example-bfd-profile-full
双方向転送検出 (BFD) プロファイルを削除し、ボーダーゲートウェイプロトコル (BGP) ピアリソースに追加された bfdProfile
を削除しても、BFD は無効になりません。代わりに、BGP ピアはデフォルトの BFD プロファイルの使用を開始します。BGP ピアリソースから BFD をディセーブルにするには、BGP ピア設定を削除し、BFD プロファイルなしで再作成します。詳細は、BZ#2050824 を参照してください。
32.6.5.3. 例: デュアルスタックネットワーク用の BGP ピア指定
デュアルスタックネットワーキングをサポートするには、IPv4 用に BGP ピアカスタムリソース 1 つと IPv6 用に BGP ピアカスタムリソースを 1 つ追加します。
apiVersion: metallb.io/v1beta2 kind: BGPPeer metadata: name: doc-example-dual-stack-ipv4 namespace: metallb-system spec: peerAddress: 10.0.20.1 peerASN: 64500 myASN: 64500 --- apiVersion: metallb.io/v1beta2 kind: BGPPeer metadata: name: doc-example-dual-stack-ipv6 namespace: metallb-system spec: peerAddress: 2620:52:0:88::104 peerASN: 64500 myASN: 64500