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


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

クラスター管理者は、アドレスプールを追加、変更、および削除できます。MetalLB Operator は、アドレスプールカスタムリソースを使用して、MetalLB がサービスに割り当てることのできる IP アドレスを設定します。例で使用されている namespace は、namespace が metallb-system であることを前提としています。

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

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

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

表27.1 MetalLB IPAddressPool プールのカスタムリソース
フィールド説明

metadata.name

string

アドレスプールの名前を指定します。サービスを追加する場合は、metallb.universe.tf/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 つのプールで複数の範囲を指定できます。それらはすべて同じ設定を共有します。CIDR 表記で各範囲を指定するか、開始および終了の IP アドレスをハイフンで区切って指定します。

spec.autoAssign

boolean

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

spec.avoidBuggyIPs

boolean

オプション: これを有効にすると、.0 および .255 で終わる IP アドレスがプールから割り当てられなくなります。デフォルト値は false です。一部の古い消費者ネットワーク機器は、.0 および .255 で終わる IP アドレスを誤ってブロックします。

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

表27.2 MetalLB IPAddressPool カスタムリソース spec.serviceAllocation サブフィールド
フィールド説明

priority

int

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

namespaces

array (string)

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

namespaceSelectors

配列 (LabelSelector)

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

serviceSelectors

配列 (LabelSelector)

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

27.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: 1
        zone: east
    spec:
      addresses:
      - 203.0.113.1-203.0.113.10
      - 203.0.113.65-203.0.113.75
    1
    IPAddressPool に割り当てられたこのラベルは、BGPAdvertisement CRD の ipAddressPoolSelectors によって参照され、IPAddressPool をアドバタイズメントに関連付けることができます。
  2. IP アドレスプールの設定を適用します。

    $ oc apply -f ipaddresspool.yaml

検証

  • アドレスプールを表示します。

    $ 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>

doc-example などのアドレスプール名と IP アドレス範囲が出力に表示されることを確認します。

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

クラスター管理者は、クラスターにアドレスプールを追加することで、MetalLB がロードバランサーサービスに割り当てることのできる、作成された VLAN の 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 1
    spec:
      addresses:
      - 192.168.100.1-192.168.100.254 2
    1
    IPAddressPool に割り当てられたこのラベルは、BGPAdvertisement CRD の ipAddressPoolSelectors によって参照され、IPAddressPool をアドバタイズメントに関連付けることができます。
    2
    この IP 範囲は、ネットワーク上の VLAN に割り当てられたサブネットと一致する必要があります。レイヤー 2 (L2) モードをサポートするには、IP アドレス範囲がクラスターノードと同じサブネット内にある必要があります。
  2. IP アドレスプールの設定を適用します。

    $ oc apply -f ipaddresspool-vlan.yaml
  3. この設定を VLAN に適用するために、specgatewayConfig.ipForwardingGlobal に設定する必要があります。

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

      $ oc edit network.config.openshift/cluster
    2. spec.defaultNetwork.ovnKubernetesConfig セクションを更新して、gatewayConfig.ipForwardingGlobal に設定します。次のようになります。

      ...
      spec:
        clusterNetwork:
          - cidr: 10.128.0.0/14
            hostPrefix: 23
        defaultNetwork:
          type: OVNKubernetes
          ovnKubernetesConfig:
            gatewayConfig:
              ipForwarding: Global
      ...

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

27.1.4.1. 例: IPv4 および CIDR 範囲

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

27.1.4.2. 例: IP アドレスの予約

MetalLB がプールから IP アドレスを自動的に割り当てないように autoAssign フィールドを false に設定できます。サービスを追加する場合は、プールから特定の IP アドレスを要求するか、そのプールから任意の IP アドレスを要求するためにアノテーションでプール名を指定できます。

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

27.1.4.3. 例: 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
  - 2002:2:2::1-2002:2:2::100

27.1.4.4. 例: IP アドレスプールをサービスまたは namespace に割り当てる

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 1
    namespaces: 2
      - namespace-a
      - namespace-b
    namespaceSelectors: 3
      - matchLabels:
          zone: east
    serviceSelectors: 4
      - matchExpressions:
        - key: security
          operator: In
          values:
          - S1
1
アドレスプールに優先度を割り当てます。数字が小さいほど優先度が高いことを示します。
2
1 つ以上の namespace をリスト形式で IP アドレスプールに割り当てます。
3
リスト形式のラベルセレクターを使用して、1 つ以上の namespace ラベルを IP アドレスプールに割り当てます。
4
リスト形式のラベルセレクターを使用して、1 つ以上のサービスラベルを IP アドレスプールに割り当てます。

27.1.5. 次のステップ

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.