34.10. MetalLB を使用した対称ルーティングの管理


クラスター管理者は、MetalLB、NMState、OVN-Kubernetes の機能を実装することで、複数のホストインターフェイスを備えた MetalLB ロードバランサーサービスの背後にある Pod のトラフィックを効果的に管理できます。このコンテキストでこれらの機能を組み合わせることで、対称ルーティング、トラフィック分離を提供し、重複する CIDR アドレスを持つ異なるネットワーク上のクライアントをサポートできます。

この機能を実現するために、MetalLB を使用して Virtual Routing and Forwarding (VRF) インスタンスを実装し、Egress サービスを設定する方法を説明します。

重要

MetalLB と出力サービスを備えた VRF インスタンスを使用した対称トラフィックの設定は、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

34.10.1. MetalLB を使用した対称ルーティング管理の課題

複数のホストインターフェイスで MetalLB を使用すると、MetalLB はホスト上で使用可能なすべてのインターフェイスを通じてサービスを公開し、通知します。これにより、ネットワークの分離、非対称リターントラフィック、CIDR アドレスの重複に関する課題が生じる可能性があります。

戻りトラフィックが正しいクライアントに確実に到達するための 1 つのオプションとして、静的ルートを使用します。ただし、このソリューションでは、MetalLB がサービスを分離して、別のインターフェイスを通じて各サービスを通知できません。さらに、静的ルーティングには手動設定が必要であり、リモートサイトが追加された場合はメンテナンスが必要になります。

外部システムで、アプリケーションの送信元と宛先の IP アドレスが同じである必要があるシナリオなどが、MetalLB サービスの実装時における対称ルーティングのさらなる課題として挙げられます。OpenShift Container Platform のデフォルトの動作では、ホストネットワークインターフェイスの IP アドレスが、Pod から発信されるトラフィックの送信元 IP アドレスとして割り当てられます。これは、複数のホストインターフェイスがある場合に問題になります。

MetalLB、NMState、OVN-Kubernetes の機能を組み合わせた設定を実装することで、これらの課題を克服できます。

34.10.2. MetalLB で VRF を使用した対称ルーティング管理の概要

NMState を使用してホスト上で VRF インスタンスを設定し、VRF インスタンスを MetalLB BGPPeer リソースに関連付け、OVN-Kubernetes を使用して出力トラフィック用の出力サービスを設定することで、対称ルーティングの実装の課題を克服できます。

図34.2 MetalLB で VRF を使用して対称ルーティングを管理するネットワークの概要

MetalLB で VRF を使用して対称ルーティングを管理するネットワークの概要

設定プロセスには 3 つの段階が含まれます。

1.VRF とルーティングルールを定義する

  • NodeNetworkConfigurationPolicy カスタムリソース (CR) を設定して、VRF インスタンスをネットワークインターフェイスに関連付けます。
  • VRF ルーティングテーブルを使用して、受信トラフィックと送信トラフィックを送信します。

2. VRF を MetalLB BGPPeer にリンクする

  • ネットワークインターフェイス上で VRF インスタンスを使用するように MetalLB BGPPeer リソースを設定します。
  • BGPPeer リソースを VRF インスタンスに関連付けることにより、指定されたネットワークインターフェイスが BGP セッションのプライマリーインターフェイスになり、MetalLB はこのインターフェイスを通じてサービスをアドバタイズします。

3.Egress サービスを設定する

  • Egress サービスを設定して、Egress トラフィック用の VRF インスタンスに関連付けられたネットワークを選択します。
  • オプション: MetalLB ロードバランサーサービスの IP アドレスを Egress トラフィックの送信元 IP として使用するように Egress サービスを設定します。

34.10.3. MetalLB で VRF を使用した対称ルーティングの設定

同じ入力ネットワークパスと Egress ネットワークパスを必要とする MetalLB サービスの背後にあるアプリケーションに対して対称ネットワークルーティングを設定できます。

この例では、VRF ルーティングテーブルを MetalLB および出力サービスに関連付けて、LoadBalancer サービスの背後にある Pod の Ingress および Egress トラフィックの対称ルーティングを有効にします。

注記
  • EgressService CR で sourceIPBy: "LoadBalancerIP" 設定を使用する場合は、BGPAdvertisement カスタムリソース (CR) でロードバランサーノードを指定する必要があります。
  • sourceIPBy: "Network" 設定は、gatewayConfig.routingViaHost 仕様が true に設定された OVN-Kubernetes を使用するクラスターでのみ使用できます。さらに、sourceIPBy: "Network" 設定を使用する場合は、ネットワーク VRF インスタンスで設定されたノード上でアプリケーションワークロードをスケジュールする必要があります。

前提条件

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

手順

  1. NodeNetworkConfigurationPolicy CR を作成して VRF インスタンスを定義します。

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

      apiVersion: nmstate.io/v1
      kind: NodeNetworkConfigurationPolicy
      metadata:
        name: vrfpolicy 1
      spec:
        nodeSelector:
          vrf: "true" 2
        maxUnavailable: 3
        desiredState:
          interfaces:
          - name: ens4vrf 3
            type: vrf 4
            state: up
            vrf:
              port:
              - ens4 5
              route-table-id: 2 6
          - name: ens4 7
            type: ethernet
            state: up
            ipv4:
              address:
              - ip: 192.168.130.130
                prefix-length: 24
              dhcp: false
              enabled: true
          routes: 8
            config:
            - destination: 0.0.0.0/0
              metric: 150
              next-hop-address: 192.168.130.1
              next-hop-interface: ens4
              table-id: 2
          route-rules: 9
            config:
            - ip-to: 172.30.0.0/16
              priority: 998
              route-table: 254 10
            - ip-to: 10.132.0.0/14
              priority: 998
              route-table: 254
      1
      ポリシーの名前。
      2
      この例では、vrf:true のラベルが割り当てられたべてのノードにポリシーを適用します。
      3
      インターフェイスの名前。
      4
      インターフェイスのタイプ。この例では VRF インスタンスを作成します。
      5
      VRF が接続されるノードインターフェイス。
      6
      VRF のルートテーブル ID の名前。
      7
      VRF に関連付けられたインターフェイスの IPv4 アドレス。
      8
      ネットワークルートの設定を定義します。next-hop-address フィールドは、ルートのネクストホップの IP アドレスを定義します。next-hop-interface フィールドは、ルートの送信インターフェイスを定義します。この例では、VRF ルーティングテーブルは 2 で、EgressService CR で定義した ID を参照します。
      9
      追加のルートルールを定義します。ip-to フィールドは、クラスターネットワーク CIDR および サービスネットワーク CIDR と一致する必要があります。これらの CIDR アドレス仕様の値を表示するには、コマンド oc describe network.config/cluster を実行します。
      10
      Linux カーネルがルートを計算するときに使用するメインルーティングテーブルの ID は 254 です。
    2. 以下のコマンドを実行してポリシーを適用します。

      $ oc apply -f node-network-vrf.yaml
  2. BGPPeer カスタムリソース (CR) を作成します。

    1. 次の例のような内容を含むファイル (frr-via-vrf.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 内のルーティング情報に基づいてルーティングを決定できます。
    2. 次のコマンドを実行して、BGP ピアの設定を適用します。

      $ oc apply -f frr-via-vrf.yaml
  3. 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
  4. 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
        nodeSelectors:
          - matchLabels:
              egress-service.k8s.ovn.org/test-server1: "" 2
      1
      この例では、MetalLB は、first-pool の IP アドレスプールから frrviavrf BGP ピアに IP アドレスの範囲をアドバタイズします。
      2
      この例では、EgressService CR は、ロードバランサーサービス IP アドレスを使用するように、Egress トラフィックの送信元 IP アドレスを設定します。したがって、Pod から発信されるトラフィックに同じリターンパスを使用するには、リターントラフィックのロードバランサーノードを指定する必要があります。
    2. 次のコマンドを実行して、BGP アドバタイズメントの設定を適用します。

      $ oc apply -f first-adv.yaml
  5. EgressService CR を作成します。

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

      apiVersion: k8s.ovn.org/v1
      kind: EgressService
      metadata:
        name: server1 1
        namespace: test 2
      spec:
        sourceIPBy: "LoadBalancerIP" 3
        nodeSelector:
          matchLabels:
            vrf: "true" 4
        network: "2" 5
      1
      Egress サービスの名前を指定します。EgressService リソースの名前は、変更するロードバランサーサービスの名前と一致する必要があります。
      2
      Egress サービスの namespace を指定します。EgressService の namespace は、変更するロードバランサーサービスの namespace と一致する必要があります。Egress サービスは namespace スコープです。
      3
      この例では、LoadBalancer サービスの Ingress IP アドレスを Egress トラフィックの送信元 IP アドレスとして割り当てます。
      4
      sourceIPBy 仕様の LoadBalancer を指定すると、単一ノードが LoadBalancer サービストラフィックを処理します。この例では、ラベルが vrf: "true" のノードのみがサービストラフィックを処理できます。ノードを指定しない場合、OVN-Kubernetes はサービストラフィックを処理するワーカーノードを選択します。ノードが選択されると、OVN-Kubernetes はそのノードに egress-service.k8s.ovn.org/<svc_namespace>-<svc_name>: "" という形式でラベルを付けます。
      5
      Egress トラフィックのルーティングテーブルを指定します。
    2. 次のコマンドを実行して、Egress サービスの設定を適用します。

      $ oc apply -f egress-service.yaml

検証

  1. 次のコマンドを実行して、MetalLB サービスの背後で実行されている Pod のアプリケーションエンドポイントにアクセスできることを確認します。

    $ curl <external_ip_address>:<port_number> 1
    1
    アプリケーションのエンドポイントに合わせて外部 IP アドレスとポート番号を更新します。
  2. オプション: LoadBalancer サービスの Ingress IP アドレスを Egress トラフィックの送信元 IP アドレスとして割り当てた場合は、tcpdump などのツールを使用して外部クライアントで受信したパケットを分析し、この設定を確認します。
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.