第4章 MetalLB を使用した負荷分散


4.1. MetalLB アドレスプールの設定

ロードバランサーサービスに割り当てられた IP アドレスを割り当て、管理するには、MetalLB アドレスプールのカスタムリソースを設定します。これらのプールを定義することで、アプリケーションのワークロードが指定されたネットワーク範囲を通じて常にアクセス可能となり、外部からのアクセスが安定的に行われることが保証されます。

例で使用されている名前空間では 、metallb-system が 名前空間として示されています。

MetalLB Operator のインストール方法の詳細は、MetalLB および MetalLB Operator について を参照してください。

4.1.1. IPAddressPool カスタムリソースについて

ロードバランサーサービスで使用可能な IP アドレス範囲を定義するには、MetalLB IPAddressPool カスタムリソース (CR) のプロパティーを設定します。

以下の表は、IPAddressPool CR のパラメーターの詳細を示しています。

Expand
表4.1 MetalLB IPAddressPool プールのカスタムリソース
パラメーター説明

metadata.name

string

アドレスプールの名前を指定します。サービスを追加する場合は、metallb.io/address-pool アノテーションにこのプール名を指定して、特定のプールから IP アドレスを選択できます。ドキュメント全体で、doc-examplesilver、および gold の名前が使用されます。

metadata.namespace

string

アドレスプールの namespace を指定します。MetalLB Operator が使用するものと同じ namespace を指定します。

metadata.label

string

オプション: IPAddressPool に割り当てられるキーと値のペアを指定します。これは、BGPAdvertisement および L2Advertisement CRD の ipAddressPoolSelectors によって参照され、IPAddressPool をアドバタイズメントに関連付けることができます。

spec.addresses

string

MetalLB Operator がサービスに割り当てる IP アドレスのリストを指定します。1 つのプール内で複数の範囲を指定できます。これらの範囲はすべて同じ設定を共有します。各範囲は、Classless Inter-Domain Routing (CIDR) 表記で指定するか、開始 IP アドレスと終了 IP アドレスをハイフンで区切って指定します。

spec.autoAssign

boolean

オプション:MetalLBOperator がこのプールから IP アドレスを自動的に割り当てるかどうかを指定します。metallb.io/address-pool アノテーションを使用してこのプールから IP アドレスを明示的に要求する場合は、false を指定します。デフォルト値は true です。

注記

IP アドレスプール設定の場合、アドレスパラメーターには、利用可能で他のネットワークデバイス (特にゲートウェイアドレス) で使用されていない IP アドレスのみを指定するようにしてください。これにより、自動割り当て が有効になっている場合に競合が発生するのを防ぐことができます。

spec.avoidBuggyIPs

boolean

オプション: このパラメーターを有効に設定すると、末尾が .0 および .255 の IP アドレスはプールから割り当てられません。デフォルト値は false です。一部の古いコンシューマー向けネットワーク機器では、.0 および .255 で終わる IP アドレスが誤ってブロックされます。

spec.serviceAllocation 仕様を設定することにより、IPAddressPool からサービスおよび namespace に IP アドレスを割り当てることができます。

Expand
表4.2 MetalLB IPAddressPool カスタムリソース spec.serviceAllocation サブフィールド
パラメーター説明

priority

int

オプション: 複数の IP アドレスプールがサービスまたは namespace に一致する場合の IP アドレスプール間の優先度を定義します。数字が小さいほど優先度が高いことを示します。

namespaces

array (string)

オプション: IP アドレスプール内の IP アドレスに割り当てることができる namespace のリストを指定します。

namespaceSelectors

配列 (LabelSelector)

オプション: リスト形式のラベルセレクターを使用して、IP アドレスプールから IP アドレスに割り当てることができる namespace ラベルを指定します。

serviceSelectors

配列 (LabelSelector)

オプション: リスト形式のラベルセレクターを使用して、アドレスプールから IP アドレスに割り当てることができるサービスラベルを指定します。

4.1.2. アドレスプールの設定

アプリケーションワークロードへの外部アクセスを正確に管理するには、クラスター用に MetalLB アドレスプールを設定してください。これらのプールを定義することで、ロードバランサーサービスに割り当てられる特定の IP アドレス範囲を制御し、一貫性のあるネットワークルーティングを実現できます。

前提条件

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

手順

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

    apiVersion: metallb.io/v1beta1
    kind: IPAddressPool
    metadata:
      namespace: metallb-system
      name: doc-example
      labels:
        zone: east
    spec:
      addresses:
      - 203.0.113.1-203.0.113.10
      - 203.0.113.65-203.0.113.75
    # ...

    ここでは、以下のようになります。

    labels
    IPAddressPool に割り当てられたラベルは、BGPAdvertisement CRD 内の ipAddressPoolSelectors によって参照され、IPAddressPool を アドバタイズメントに関連付けることができます。
  2. 次のコマンドを入力して、IP アドレスプールの設定を適用します。

    $ oc apply -f ipaddresspool.yaml

検証

  1. 次のコマンドを入力して、アドレスプールを表示します。

    $ oc describe -n metallb-system IPAddressPool doc-example

    出力例

    Name:         doc-example
    Namespace:    metallb-system
    Labels:       zone=east
    Annotations:  <none>
    API Version:  metallb.io/v1beta1
    Kind:         IPAddressPool
    Metadata:
      ...
    Spec:
      Addresses:
        203.0.113.1-203.0.113.10
        203.0.113.65-203.0.113.75
      Auto Assign:  true
    Events:         <none>

  2. doc-example などのアドレスプール名と IP アドレス範囲が出力に存在することを確認します。

4.1.3. VLAN の MetalLB アドレスプールの設定

特定の VLAN を介した外部アクセスを正確に管理するには、クラスター用に MetalLB アドレスプールを設定してください。これらのプールを定義することで、ロードバランサーサービスは、指定されたネットワーク範囲から承認された IP アドレスを取得し、安全かつ一貫性のあるルーティングを実現できます。

前提条件

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

手順

  1. 次の例のようなファイル (ipaddresspool-vlan.yaml など) を作成します。

    apiVersion: metallb.io/v1beta1
    kind: IPAddressPool
    metadata:
      namespace: metallb-system
      name: doc-example-vlan
      labels:
        zone: east
    spec:
      addresses:
      - 192.168.100.1-192.168.100.254
    # ...

    ここでは、以下のようになります。

    ラベルゾーン
    IPAddressPool に割り当てられたこのラベルは、BGPAdvertisement CRD の ipAddressPoolSelectors によって参照され、IPAddressPool をアドバタイズメントに関連付けることができます。
    spec.addresses
    この IP 範囲は、ネットワーク上の VLAN に割り当てられたサブネットと一致する必要があります。レイヤー 2 (L2) モードをサポートするには、IP アドレス範囲がクラスターノードと同じサブネット内にある必要があります。
  2. IP アドレスプールの設定を適用します。

    $ oc apply -f ipaddresspool-vlan.yaml
  3. この設定が VLAN に適用されることを確認するには、spec gatewayConfig.ipForwarding をGlobal に設定する必要があります。

    1. 次のコマンドを実行して、ネットワーク設定カスタムリソース (CR) を編集します。

      $ oc edit network.operator.openshift/cluster
    2. spec.defaultNetwork.ovnKubernetesConfig セクションを更新して、gatewayConfig.ipForwardingGlobal に設定します。次の例はこの設定を示しています。

      apiVersion: operator.openshift.io/v1
      kind: Network
      metadata:
        name: cluster
      spec:
        clusterNetwork:
          - cidr: 10.128.0.0/14
            hostPrefix: 23
        defaultNetwork:
          type: OVNKubernetes
          ovnKubernetesConfig:
            gatewayConfig:
              ipForwarding: Global
      # ...

4.1.4. アドレスプールの設定例

クラスターサービスに IP アドレス範囲を正確に割り当てるには、Classless Inter-Domain Routing (CIDR) 表記またはハイフン付き境界を使用して MetalLB アドレスプールを設定します。これらの特定の範囲を定義することで、アプリケーションのワークロードが、既存のネットワークインフラストラクチャーの要件に合致した有効な IP アドレス割り当てを受けられることが保証されます。

IPv4 と CIDR の範囲の例
Classless Inter-Domain Routing (CIDR) 表記で IP アドレスの範囲を指定できます。CIDR 表記と、ハイフンを使用する表記を組み合わせて下層と上限を分けることができます。
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: doc-example-cidr
  namespace: metallb-system
spec:
  addresses:
  - 192.168.100.0/24
  - 192.168.200.0/24
  - 192.168.255.1-192.168.255.5
# ...
IP アドレスの割り当て例
autoAssign パラメーターを false に設定すると、MetalLB がアドレスプールから IP アドレスを自動的に割り当てるのを防ぐことができます。その場合、IP アドレスプールから単一の IP アドレスまたは複数の IP アドレスを割り当てることができます。IP アドレスを割り当てるには、spec.addresses パラメーター内のターゲット IP アドレスに CIDR 表記 /32 を追加します。この設定により、特定の IP アドレスのみが割り当て可能となり、予約されていない IP アドレスはアプリケーションで使用できるようになります。

複数の IP アドレスを割り当てる IPAddressPool CR の例

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: doc-example-reserved
  namespace: metallb-system
spec:
  addresses:
  - 192.168.100.1/32
  - 192.168.200.1/32
  autoAssign: false
# ...

注記

サービスを追加する場合は、アドレスプールから特定の IP アドレスを要求することも、アノテーションでプール名を指定して、そのプールから任意の IP アドレスを要求することもできます。

IPv4 アドレスと IPv6 アドレスの例
IPv4 および IPv6 を使用するアドレスプールを追加できます。複数の IPv4 の例と同様に、addresses 一覧で複数の範囲を指定できます。

サービスが単一の IPv4 アドレス、単一の IPv6 アドレス、またはその両方に割り当てられるかどうかは、サービスの追加方法によって決まります。spec.ipFamilies および spec.ipFamilyPolicy パラメーターは、サービスに IP アドレスを割り当てる方法を制御します。

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: doc-example-combined
  namespace: metallb-system
spec:
  addresses:
  - 10.0.100.0/28 
1

  - 2002:2:2::1-2002:2:2::100
# ...

spec.addresses: ここで、10.0.100.0/28 はローカルネットワークの IP アドレスに /28 ネットワークプレフィックスが続くものです。

サービスまたは名前空間に IP アドレスプールを割り当てる例
IPAddressPool から指定したサービスと namespace に IP アドレスを割り当てることができます。

サービスまたは namespace を複数の IP アドレスプールに割り当てる場合、MetalLB は優先度の高い IP アドレスプールから使用可能な IP アドレスを使用します。割り当てられた優先度の高い IP アドレスプールから使用可能な IP アドレスがない場合、MetalLB は、優先度の低い、または優先度のない IP アドレスプールから使用可能な IP アドレスを使用します。

注記

namespaceSelectorsserviceSelectors の仕様には、matchLabels ラベルセレクター、matchExpressions ラベルセレクター、またはその両方を使用できます。この例は、仕様ごとに 1 つのラベルセレクターを示しています。

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: doc-example-service-allocation
  namespace: metallb-system
spec:
  addresses:
    - 192.168.20.0/24
  serviceAllocation:
    priority: 50
    namespaces:
      - namespace-a
      - namespace-b
    namespaceSelectors:
      - matchLabels:
          zone: east
    serviceSelectors:
      - matchExpressions:
        - key: security
          operator: In
          values:
          - S1
# ...

ここでは、以下のようになります。

サービス割り当て優先度
アドレスプールに優先度を割り当てます。数字が小さいほど優先度が高いことを示します。
serviceAllocation.namespaces
1 つ以上の namespace をリスト形式で IP アドレスプールに割り当てます。
serviceAllocation.namespaceSelectors
リスト形式のラベルセレクターを使用して、1 つ以上の namespace ラベルを IP アドレスプールに割り当てます。
serviceAllocation.serviceSelectors
リスト形式のラベルセレクターを使用して、1 つ以上のサービスラベルを IP アドレスプールに割り当てます。
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

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

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

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

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

Legal Notice

Theme

© 2026 Red Hat
トップに戻る