32.6. MetalLB BGP ピアの設定


クラスター管理者は、ボーダーゲートウェイプロトコル (BGP) ピアを追加、変更、および削除できます。MetalLB Operator は、BGP ピアカスタムリソースを使用して、MetalLB speaker Pod が BGP セッションを開始するために接続するピアを識別します。ピアは、MetalLB がサービスに割り当てるロードバランサー IP アドレスのルートアドバタイズメントを受信します。

32.6.1. BGP ピアカスタムリソースについて

次の表で、BGP ピアカスタムリソースのフィールドを説明します。

表32.5 MetalLB BGP ピアカスタムリソース
フィールド説明

metadata.name

string

BGP ピアカスタムリソースの名前を指定します。

metadata.namespace

string

BGP ピアカスタムリソースの namespace を指定します。

spec.myASN

integer

BGP セッションのローカルエンドの Autonomous System 番号を指定します。追加するすべての BGP ピアカスタムリソースに同じ値を指定します。範囲は 0 から 4294967295 です。

spec.peerASN

integer

BGP セッションのリモートエンドの Autonomous System 番号を指定します。範囲は 0 から 4294967295 です。

spec.peerAddress

string

BGP セッションを確立するために接続するピアの IP アドレスを指定します。

spec.sourceAddress

string

オプション: BGP セッションの確立時に使用する IP アドレスを指定します。値は IPv4 アドレスである必要があります。

spec.peerPort

integer

オプション: BGP セッションを確立するために接続するピアのネットワークポートを指定します。範囲は 0 から 16384 です。

spec.holdTime

string

オプション: BGP ピアに提案するホールドタイムの期間を指定します。最小値は 3 秒 (3s) です。一般的には、3s1m および 5m30s など、秒および分単位で指定します。パス障害をより迅速に検出するには、BFD も設定します。

spec.keepaliveTime

string

オプション: キープアライブメッセージを BGP ピアに送信する間の最大間隔を指定します。このフィールドを指定する場合は、holdTime フィールドの値も指定する必要があります。指定する値は、holdTime フィールドの値よりも小さくする必要があります。

spec.routerID

string

オプション: BGP ピアにアドバタイズするルーター ID を指定します。このフィールドを指定する場合は、追加するすべての BGP ピアカスタムリソースに同じ値を指定する必要があります。

spec.password

string

オプション: TCP MD5 認証が済んだ BGP セッションを実施するルーターのピアに送信する MD5 パスワードを指定します。

spec.passwordSecret

string

オプション: BGP ピアの認証シークレットの名前を指定します。シークレットは metallb namespace に存在し、basic-auth タイプである必要があります。

spec.bfdProfile

string

オプション: BFD プロファイルの名前を指定します。

spec.nodeSelectors

object[]

オプション: 一致式と一致ラベルを使用してセレクターを指定し、BGP ピアに接続できるノードを制御します。

spec.ebgpMultiHop

boolean

オプション: BGP ピアがネットワークホップ数回分を離れるように指定します。BGP ピアが同じネットワークに直接接続されていない場合には、このフィールドがtrueに設定されていないと、speaker は BGP セッションを確立できません。このフィールドは外部 BGPに適用されます。外部 BGP は、BGP ピアが別の Autonomous System に属する場合に使用される用語です。

注記

passwordSecret フィールドは、password フィールドと相互に排他的であり、使用するパスワードを含むシークレットへの参照が含まれています。両方のフィールドを設定すると、解析が失敗します。

32.6.2. BGP ピアの設定

クラスター管理者は、BGP ピアカスタムリソースを追加して、ネットワークルーターとルーティング情報を交換し、サービスの IP アドレスをアドバタイズできます。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • cluster-admin 権限を持つユーザーとしてログインしている。
  • BGP アドバタイズメントを使用して MetalLB を設定します。

手順

  1. 以下の例のような内容で、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
  2. BGP ピアの設定を適用します。

    $ oc apply -f bgppeer.yaml

32.6.3. 指定されたアドレスプールに対して特定の BGP ピアセットを設定

これは、以下を実行するための手順です。

  • アドレスプールのセット (pool1 および pool2) を設定します。
  • BGP ピアセット (peer1 および peer2) を設定します。
  • pool1peer1 に、pool2peer2 に割り当てるように BGP アドバタイズメントを設定します。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • cluster-admin 権限を持つユーザーとしてログインしている。

手順

  1. アドレスプール pool1 を作成します。

    1. 以下の例のような内容で、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
    2. IP アドレスプール pool1 の設定を適用します。

      $ oc apply -f ipaddresspool1.yaml
  2. アドレスプール pool2 を作成します。

    1. 以下の例のような内容で、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
    2. IP アドレスプール pool2 の設定を適用します。

      $ oc apply -f ipaddresspool2.yaml
  3. BGP peer1 を作成します。

    1. 以下の例のような内容で、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
    2. BGP ピアの設定を適用します。

      $ oc apply -f bgppeer1.yaml
  4. BGP peer2 を作成します。

    1. 以下の例のような内容で、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
    2. BGP peer2 の設定を適用します。

      $ oc apply -f bgppeer2.yaml
  5. BGP advertisement 1 を作成します。

    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
    2. 設定を適用します。

      $ oc apply -f bgpadvertisement1.yaml
  6. BGP advertisement 2 を作成します。

    1. 以下の例のような内容で、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
    2. 設定を適用します。

      $ 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 を介してサービスを公開するための概要手順は次のとおりです。

  1. BGP ピアを定義し、ネットワーク VRF インスタンスを追加します。
  2. MetalLB の IP アドレスプールを指定します。
  3. MetalLB の BGP ルートアドバタイズメントを設定して、指定された IP アドレスプールと VRF インスタンスに関連付けられた BGP ピアを使用してルートをアドバタイズします。
  4. サービスをデプロイして設定をテストします。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • cluster-admin 権限を持つユーザーとしてログインしている。
  • NodeNetworkConfigurationPolicy を定義して、仮想ルーティングおよび転送 (VRF) インスタンスをネットワークインターフェイスに関連付けている。この前提条件を満たす方法の詳細は、関連情報 セクションを参照してください。
  • MetalLB をクラスターにインストールしている。

手順

  1. BGPPeer カスタムリソース (CR) を作成します。

    1. 次の例のような内容を含むファイル (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 で設定する必要があります。詳細は、関連情報 を参照してください。

    2. 次のコマンドを実行して、BGP ピアの設定を適用します。

      $ oc apply -f frrviavrf.yaml
  2. IPAddressPool CR を作成します。

    1. 次の例のような内容を含むファイル (first-pool.yaml など) を作成します。

      apiVersion: metallb.io/v1beta1
      kind: IPAddressPool
      metadata:
        name: first-pool
        namespace: metallb-system
      spec:
        addresses:
        - 192.169.10.0/32
    2. 次のコマンドを実行して、IP アドレスプールの設定を適用します。

      $ oc apply -f first-pool.yaml
  3. BGPAdvertisement CR を作成します。

    1. 次の例のような内容を含むファイル (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 アドレスの範囲をアドバタイズします。
    2. 次のコマンドを実行して、BGP アドバタイズメントの設定を適用します。

      $ oc apply -f first-adv.yaml
  4. NamespaceDeployment、および Service CR を作成します。

    1. 次の例のような内容を含むファイル (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
    2. 次のコマンドを実行して、namespace、デプロイメント、およびサービスの設定を適用します。

      $ oc apply -f deploy-service.yaml

検証

  1. 次のコマンドを実行して、MetalLB スピーカー Pod を識別します。

    $ oc get -n metallb-system pods -l component=speaker

    出力例

    NAME            READY   STATUS    RESTARTS   AGE
    speaker-c6c5f   6/6     Running   0          69m

  2. 次のコマンドを実行して、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
    
    ...

  3. 次のコマンドを実行して、サービスが正しくアドバタイズされていることを確認します。

    $ 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

32.6.6. 次のステップ

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.