34.5. IP アドレスプールのアドバタイズメントについて


IP アドレスがレイヤー 2 プロトコル、BGP プロトコル、またはその両方でアドバタイズされるように MetalLB を設定できます。レイヤー 2 では、MetalLB ではフォールトトレラントな外部 IP アドレスを使用できます。BGP を使用すると、MetalLB で外部 IP アドレスに対するフォールトトレランス機能および負荷分散が提供されます。

MetalLB は、同じ IP アドレスのセットに対して L2 と BGP を使用したアドバタイズをサポートします。

MetalLB は、ネットワーク上のノードのサブセットに対して、特定の BGP ピアにアドレスプールを効果的に割り当てる柔軟性を提供します。これにより、たとえばノードの分離やネットワークのセグメンテーションを容易にするなど、より複雑な設定が可能になります。

34.5.1. BGPAdvertisement カスタムリソースについて

BGPAdvertisements オブジェクトのフィールドは、次の表に定義されています。

表34.3 BGPAdvertisements の設定
フィールド説明

metadata.name

string

BGP アドバタイズメントの名前を指定します。

metadata.namespace

string

BGP アドバタイズメントの namespace を指定します。MetalLB Operator が使用するものと同じ namespace を指定します。

spec.aggregationLength

integer

オプション: 32 ビット CIDR マスクに含めるビット数を指定します。マスクが複数のサービス IP アドレスのルートに適用され、speaker は集約されたルートをアドバタイズし、speaker が BGP ピアにアドバタイズするルートを集約します。たとえば、集約の長さが 24の場合は、speaker は複数の10.0.1.x/32サービス IP アドレスを集約して、10.0.1.0/24ルートを 1 つアドバタイズできます。

spec.aggregationLengthV6

integer

オプション: 128 ビット CIDR マスクに含めるビット数を指定します。たとえば、集約の長さが 124の場合は、speaker は複数の fc00:f853:0ccd:e799::x/128 サービス IP アドレスを集約して、fc00:f853:0ccd:e799::0/124 ルートを 1 つアドバタイズできます。

spec.communities

string

オプション: 1 つ以上の BGP コミュニティーを指定します。各コミュニティーは、16 ビット値 2 つをコロン文字で区切って指定します。一般的なコミュニティーは、16 ビット値として指定する必要があります。

  • NO_EXPORT: 65535:65281
  • NO_ADVERTISE: 65535:65282
  • NO_EXPORT_SUBCONFED: 65535:65283

    注記

    文字列とともに作成されたコミュニティーオブジェクトを使用することもできます。

spec.localPref

integer

オプション: このアドバタイズメントのローカル設定を指定します。この BGP 属性は、Autonomous System 内の BGP セッションに適用されます。

spec.ipAddressPools

string

オプション: 名前で選択された、このアドバタイズメントでアドバタイズする IPAddressPools のリスト。

spec.ipAddressPoolSelectors

string

オプション: このアドバタイズメントでアドバタイズされる IPAddressPools のセレクター。これは、名前自体ではなく、IPAddressPool に割り当てられたラベルに基づいて IPAddressPool をアドバタイズメントに関連付けるためのものです。これやリストで IPAddressPool が選択されていない場合、アドバタイズメントはすべての IPAddressPools に適用されます。

spec.nodeSelectors

string

オプション: NodeSelectors を使用すると、ロードバランサー IP のネクストホップとしてアナウンスするノードを制限できます。空の場合、すべてのノードがネクストホップとしてアナウンスされます。

spec.peers

string

オプション: ピアは、選択したプールの IP をアドバタイズする BGP ピアを制限します。空の場合、ロードバランサー IP は設定されているすべての BGP ピアにアナウンスされます。

34.5.2. BGP アドバタイズメントと基本的なユースケースを使用する MetalLB の設定

MetalLB を次のとおり設定し、ピア BGP ルーターが、MetalLB がサービスに割り当てるロードバランサー IP アドレスごとに、203.0.113.200/32 ルート 1 つ、fc00:f853:ccd:e799::1/128 ルート 1 つを受信するようにします。localPref および communities フィールドが指定されていないため、ルートは localPref をゼロに設定して BGP コミュニティーなしでアドバタイズされます。

34.5.2.1. 例: BGP を使用する基本的なアドレスプール設定のアドバタイズメント

IPAddressPool が BGP プロトコルでアドバタイズされるように、MetalLB を次のように設定します。

前提条件

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

手順

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

    1. 以下の例のような内容で、ipaddresspool.yaml などのファイルを作成します。

      apiVersion: metallb.io/v1beta1
      kind: IPAddressPool
      metadata:
        namespace: metallb-system
        name: doc-example-bgp-basic
      spec:
        addresses:
          - 203.0.113.200/30
          - fc00:f853:ccd:e799::/124
    2. IP アドレスプールの設定を適用します。

      $ oc apply -f ipaddresspool.yaml
  2. BGP アドバタイズメントを作成します。

    1. 以下の例のような内容で、bgpadvertisement.yaml などのファイルを作成します。

      apiVersion: metallb.io/v1beta1
      kind: BGPAdvertisement
      metadata:
        name: bgpadvertisement-basic
        namespace: metallb-system
      spec:
        ipAddressPools:
        - doc-example-bgp-basic
    2. 設定を適用します。

      $ oc apply -f bgpadvertisement.yaml

34.5.3. BGP アドバタイズメントと高度なユースケースを使用する MetalLB の設定

MetalLB を次のように設定し、MetalLB が 203.0.113.200203.0.113.203fc00:f853:ccd:e799::0fc00:f853:ccd:e799::f の範囲の IP アドレスを割り当てるようにします。

MetalLB が 203.0.113.200の IP アドレスをサービスに割り当てる例を見ていき、これら 2 つの BGP アドバタイズメントを説明します。この IP アドレスを例にとると、speaker は 2 つのルートを BGP ピアにアドバタイズします。

  • localPref100 に、コミュニティーが NO_ADVERTISE コミュニティーの数値に設定されている 203.0.113.200/32。この仕様は、ピアルーターにこのルートを使用できることを指定していますが、このルートに関する情報を BGP ピアに伝播しないようにします。
  • MetalLB で割り当てられたロードバランサーの IP アドレスを 1 つのルートに集約する 203.0.113.200/30。MetalLB は、コミュニティー属性が 8000:800に設定された BGP ピアに集約ルートをアドバタイズします。BGP ピアは、203.0.113.200/30 ルートを他の BGP ピアに伝播します。トラフィックが speaker のあるノードにルーティングされる場合には、203.0.113.200/32ルートを使用して、トラフィックがクラスターに転送され、サービスに関連付けられている Pod に転送されます。

さらにサービスを追加し、MetalLB でプールからより多くのロードバランサー IP アドレスを割り当てると、ピアルーターはサービスごとにローカルルート 203.0.113.20x/32 を 1 つと、203.0.113.200/30 集約ルートを受け取ります。追加する各サービスは/30ルートを生成しますが、MetalLB は、ピアルーターと通信する前に、ルートの重複を排除して 1 つの BGP アドバタイズにします。

34.5.3.1. 例: BGP を使用する高度なアドレスプール設定のアドバタイズメント

IPAddressPool が BGP プロトコルでアドバタイズされるように、MetalLB を次のように設定します。

前提条件

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

手順

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

    1. 以下の例のような内容で、ipaddresspool.yaml などのファイルを作成します。

      apiVersion: metallb.io/v1beta1
      kind: IPAddressPool
      metadata:
        namespace: metallb-system
        name: doc-example-bgp-adv
        labels:
          zone: east
      spec:
        addresses:
          - 203.0.113.200/30
          - fc00:f853:ccd:e799::/124
        autoAssign: false
    2. IP アドレスプールの設定を適用します。

      $ oc apply -f ipaddresspool.yaml
  2. BGP アドバタイズメントを作成します。

    1. 以下の例のような内容で、bgpadvertisement1.yaml などのファイルを作成します。

      apiVersion: metallb.io/v1beta1
      kind: BGPAdvertisement
      metadata:
        name: bgpadvertisement-adv-1
        namespace: metallb-system
      spec:
        ipAddressPools:
          - doc-example-bgp-adv
        communities:
          - 65535:65282
        aggregationLength: 32
        localPref: 100
    2. 設定を適用します。

      $ oc apply -f bgpadvertisement1.yaml
    3. 以下の例のような内容で、bgpadvertisement2.yaml などのファイルを作成します。

      apiVersion: metallb.io/v1beta1
      kind: BGPAdvertisement
      metadata:
        name: bgpadvertisement-adv-2
        namespace: metallb-system
      spec:
        ipAddressPools:
          - doc-example-bgp-adv
        communities:
          - 8000:800
        aggregationLength: 30
        aggregationLengthV6: 124
    4. 設定を適用します。

      $ oc apply -f bgpadvertisement2.yaml

34.5.4. ノードのサブセットからの IP アドレスプールのアドバタイズ

特定のノードセットのみから IP アドレスプールから IP アドレスをアドバタイズするには、BGPAdvertisement カスタムリソースで .spec.nodeSelector 仕様を使用します。この仕様は、IP アドレスのプールをクラスター内の一連のノードに関連付けます。これは、クラスター内の異なるサブネット上にノードがあり、特定のサブネット (パブリックに面したサブネットのみなど) のアドレスプールから IP アドレスをアドバタイズしたい場合に役立ちます。

前提条件

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

手順

  1. カスタムリソースを使用して IP アドレスプールを作成します。

    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. BGPAdvertisement カスタムリソースで .spec.nodeSelector 値を定義することにより、pool1 からの IP アドレスがアドバタイズするクラスター内のノードを制御します。

    apiVersion: metallb.io/v1beta1
    kind: BGPAdvertisement
    metadata:
      name: example
    spec:
      ipAddressPools:
      - pool1
      nodeSelector:
      - matchLabels:
          kubernetes.io/hostname: NodeA
      - matchLabels:
          kubernetes.io/hostname: NodeB

この例では、pool1 の IP アドレスは NodeANodeB からの アドバタイズします。

34.5.5. L2Advertisement カスタムリソースについて

l2Advertisements オブジェクトのフィールドは、次の表に定義されています。

表34.4 L2 アドバタイズメント設定
フィールド説明

metadata.name

string

L2 アドバタイズメントの名前を指定します。

metadata.namespace

string

L2 アドバタイズメントの namespace を指定します。MetalLB Operator が使用するものと同じ namespace を指定します。

spec.ipAddressPools

string

オプション: 名前で選択された、このアドバタイズメントでアドバタイズする IPAddressPools のリスト。

spec.ipAddressPoolSelectors

string

オプション: このアドバタイズメントでアドバタイズされる IPAddressPools のセレクター。これは、名前自体ではなく、IPAddressPool に割り当てられたラベルに基づいて IPAddressPool をアドバタイズメントに関連付けるためのものです。これやリストで IPAddressPool が選択されていない場合、アドバタイズメントはすべての IPAddressPools に適用されます。

spec.nodeSelectors

string

オプション: NodeSelectors は、ロードバランサー IP のネクストホップとしてアナウンスするノードを制限します。空の場合、すべてのノードがネクストホップとしてアナウンスされます。

重要

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

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

spec.interfaces

string

オプション: ロードバランサー IP をアナウンスするために使用される interfaces のリスト。

34.5.6. L2 アドバタイズメントを使用した MetalLB の設定

IPAddressPool が L2 プロトコルでアドバタイズされるように、MetalLB を次のように設定します。

前提条件

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

手順

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

    1. 以下の例のような内容で、ipaddresspool.yaml などのファイルを作成します。

      apiVersion: metallb.io/v1beta1
      kind: IPAddressPool
      metadata:
        namespace: metallb-system
        name: doc-example-l2
      spec:
        addresses:
          - 4.4.4.0/24
        autoAssign: false
    2. IP アドレスプールの設定を適用します。

      $ oc apply -f ipaddresspool.yaml
  2. L2 アドバタイズメントを作成します。

    1. 以下の例のような内容で、l2advertisement.yaml などのファイルを作成します。

      apiVersion: metallb.io/v1beta1
      kind: L2Advertisement
      metadata:
        name: l2advertisement
        namespace: metallb-system
      spec:
        ipAddressPools:
         - doc-example-l2
    2. 設定を適用します。

      $ oc apply -f l2advertisement.yaml

34.5.7. L2 アドバタイズメントとラベルを使用した MetalLB の設定

BGPAdvertisement および L2Advertisement カスタムリソース定義の ipAddressPoolSelectors フィールドは、名前自体ではなく、IPAddressPool に割り当てられたラベルに基づいて IPAddressPool をアドバタイズメントに関連付けるために使用されます。

この例は、ipAddressPoolSelectors フィールドを設定することにより、IPAddressPool が L2 プロトコルでアドバタイズされるように MetalLB を設定する方法を示しています。

前提条件

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

手順

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

    1. 以下の例のような内容で、ipaddresspool.yaml などのファイルを作成します。

      apiVersion: metallb.io/v1beta1
      kind: IPAddressPool
      metadata:
        namespace: metallb-system
        name: doc-example-l2-label
        labels:
          zone: east
      spec:
        addresses:
          - 172.31.249.87/32
    2. IP アドレスプールの設定を適用します。

      $ oc apply -f ipaddresspool.yaml
  2. ipAddressPoolSelectors を使用して IP をアドバタイズする L2 アドバタイズメントを作成します。

    1. 以下の例のような内容で、l2advertisement.yaml などのファイルを作成します。

      apiVersion: metallb.io/v1beta1
      kind: L2Advertisement
      metadata:
        name: l2advertisement-label
        namespace: metallb-system
      spec:
        ipAddressPoolSelectors:
          - matchExpressions:
              - key: zone
                operator: In
                values:
                  - east
    2. 設定を適用します。

      $ oc apply -f l2advertisement.yaml

34.5.8. 選択したインターフェイスの L2 アドバタイズを使用した MetalLB の設定

デフォルトでは、サービスに割り当てられた IP アドレスプールの IP アドレスが、すべてのネットワークインターフェイスからアドバタイズされます。L2Advertisement カスタムリソース定義の interfaces フィールドは、IP アドレスプールをアドバタイズするネットワークインターフェイスを制限するために使用されます。

この例では、すべてのノードの interfaces フィールドにリストされているネットワークインターフェイスからのみ IP アドレスプールがアドバタイズされるように、MetalLB を設定する方法を示します。

前提条件

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

手順

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

    1. ipaddresspool.yaml などのファイルを作成し、次の例のように設定の詳細を入力します。

      apiVersion: metallb.io/v1beta1
      kind: IPAddressPool
      metadata:
        namespace: metallb-system
        name: doc-example-l2
      spec:
        addresses:
          - 4.4.4.0/24
        autoAssign: false
    2. 次の例のように、IP アドレスプールの設定を適用します。

      $ oc apply -f ipaddresspool.yaml
  2. interfaces セレクターを使用して IP をアドバタイズする L2 アドバタイズメントを作成します。

    1. l2advertisement.yaml などの YAML ファイルを作成し、次の例のように設定の詳細を入力します。

      apiVersion: metallb.io/v1beta1
      kind: L2Advertisement
      metadata:
        name: l2advertisement
        namespace: metallb-system
      spec:
        ipAddressPools:
         - doc-example-l2
         interfaces:
         - interfaceA
         - interfaceB
    2. 次の例のように、広告の設定を適用します。

      $ oc apply -f l2advertisement.yaml
重要

インターフェイスセレクターは、MetalLB が L2 を使用して特定の IP をアナウンスするノードを選択する方法には影響しません。ノードが選択されたインターフェイスを持たない場合、選択されたノードはサービスをアナウンスしません。

34.5.9. セカンダリーネットワークを使用した MetalLB の設定

OpenShift Container Platform 4.14 以降、デフォルトのネットワーク動作では、ネットワークインターフェイス間での IP パケットの転送は許可されません。したがって、MetalLB がセカンダリーインターフェイス上に設定されている場合は、必要なインターフェイスに対してのみ IP 転送を有効にするマシン設定を追加する必要があります。

注記

4.13 からアップグレードされた OpenShift Container Platform クラスターは、アップグレード中にグローバル IP 転送を有効にするグローバルパラメーターが設定されるため、影響を受けません。

セカンダリーインターフェイスの IP 転送を有効にするには、次の 2 つのオプションがあります。

  • すべてのインターフェイスで IP 転送を有効にします。
  • 特定のインターフェイスの IP 転送を有効にします。

    注記

    特定のインターフェイスに対して IP 転送を有効にすると、よりきめ細かい制御が可能になりますが、すべてのインターフェイスに対して有効にすると、グローバル設定が適用されます。

手順

  1. MachineConfig CR を作成して適用することで、bridge-net などの特定のセカンダリーインターフェイスの転送を有効にします。

    1. Bridge-net という名前の指定されたセカンダリーインターフェイスの IP 転送を有効にするには、MachineConfig CR を作成します。
    2. 以下の YAML を enable-ip-forward.yaml ファイルに保存します。

      apiVersion: machineconfiguration.openshift.io/v1
      kind: MachineConfig
      metadata:
        labels:
          machineconfiguration.openshift.io/role: <node_role> 1
        name: 81-enable-global-forwarding
      spec:
        config:
          ignition:
            version: 3.2.0
          storage:
            files:
            - contents:
                source: data:text/plain;charset=utf-8;base64,`echo -e "net.ipv4.conf.bridge-net.forwarding = 1\nnet.ipv6.conf.bridge-net.forwarding = 1\nnet.ipv4.conf.bridge-net.rp_filter = 0\nnet.ipv6.conf.bridge-net.rp_filter = 0" | base64 -w0`
                 verification: {}
              filesystem: root
              mode: 644
              path: /etc/sysctl.d/enable-global-forwarding.conf
        osImageURL: ""
      1
      IP 転送を有効にするノードロール (worker など)
    3. 以下のコマンドを実行して設定を適用します。

      $ oc apply -f enable-ip-forward.yaml
  2. または、次のコマンドを実行して、IP 転送をグローバルに有効にすることもできます。

    $ oc patch network.operator cluster -p '{"spec":{"defaultNetwork":{"ovnKubernetesConfig":{"gatewayConfig":{"ipForwarding": "Global"}}}}}

34.5.10. 関連情報

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.