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

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

26.3.1. アドレスプールのカスタムリソースについて

アドレスプールカスタムリソースのフィールドは、以下の表で説明されています。

表26.1 MetalLB アドレスプールのカスタムリソース

フィールド説明

metadata.name

string

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

metadata.namespace

string

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

spec.protocol

string

ロードバランサー IP アドレスをピアノードに通知するためのプロトコルを指定します。layer2またはbgp を指定します。

spec.autoAssign

boolean

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

spec.addresses

array

サービスに割り当てる MetalLB の IP アドレスのリストを指定します。1 つのプールに複数の範囲を指定できます。CIDR 表記で各範囲を指定するか、開始および終了の IP アドレスをハイフンで区切って指定します。

spec.bgpAdvertisements

object

オプション: デフォルトでは、BGP モードは、割り当てられた各ロードバランサー IP アドレスを、追加の BGP 属性なしで設定済みのピアにアドバタイズします。ピアルーターは、サービス IP アドレスごとに 1 つの/32ルートを受信し、BGP ローカル設定はゼロに指定され、BGP コミュニティーはありません。このフィールドを使用して、カスタムのアドバタイズを作成します。

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

表26.2 BGP アドバタイズメント設定

フィールド詳細

aggregationLength

integer

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

aggregationLengthV6

integer

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

community

array

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

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

localPref

integer

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

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

クラスター管理者は、クラスターにアドレスプールを追加して、MetaLLB がロードバランサーサービスに割り当てることのできる IP アドレスを制御できます。

前提条件

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

手順

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

    apiVersion: metallb.io/v1alpha1
    kind: AddressPool
    metadata:
      namespace: metallb-system
      name: doc-example
    spec:
      protocol: layer2
      addresses:
      - 203.0.113.1-203.0.113.10
      - 203.0.113.65-203.0.113.75
  2. アドレスプールの設定を適用します。

    $ oc apply -f addresspool.yaml

検証

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

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

    出力例

    Name:         doc-example
    Namespace:    metallb-system
    Labels:       <none>
    Annotations:  <none>
    API Version:  metallb.io/v1alpha1
    Kind:         AddressPool
    Metadata:
      ...
    Spec:
      Addresses:
        203.0.113.1-203.0.113.10
        203.0.113.65-203.0.113.75
      Auto Assign:  true
      Protocol:     layer2
    Events:         <none>

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

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

26.3.3.1. 例: IPv4 および CIDR 範囲

CIDR 表記で IP アドレスの範囲を指定できます。CIDR 表記と、ハイフンを使用する表記を組み合わせて下層と上限を分けることができます。

apiVersion: metallb.io/v1beta1
kind: AddressPool
metadata:
  name: doc-example-cidr
  namespace: metallb-system
spec:
  protocol: layer2
  addresses:
  - 192.168.100.0/24
  - 192.168.200.0/24
  - 192.168.255.1-192.168.255.5

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

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

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

26.3.3.3. 例: IPv4 および IPv6 アドレス

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

サービスに、単一の IPv4 アドレス、単一の IPv6 アドレス、またはその両方を割り当てるかどうかは、サービスの追加方法によって決まります。spec.ip Familiesフィールドとspec.ip Family Policyフィールドでは、IP アドレスをサービスに割り当てる方法を制御します。

apiVersion: metallb.io/v1beta1
kind: AddressPool
metadata:
  name: doc-example-combined
  namespace: metallb-system
spec:
  protocol: layer2
  addresses:
  - 10.0.100.0/28
  - 2002:2:2::1-2002:2:2::100

26.3.3.4. 例: BGP モードの単純なアドレスプール

BGP モードの場合には、プロトコルフィールドセットをbgpに設定する必要があります。auto Assign などの他のアドレスプールカスタムリソースフィールドも BGP モードに適用されます。

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

apiVersion: metallb.io/v1beta1
kind: AddressPool
metadata:
  name: doc-example-bgp
  namespace: metallb-system
spec:
  protocol: bgp
  addresses:
    - 203.0.113.200/30
    - fc00:f853:ccd:e799::/124

26.3.3.5. 例: カスタムアドバタイズメントを使用した BGP モード

カスタムのアドバタイズメントを指定できます。

apiVersion: metallb.io/v1beta1
kind: AddressPool
metadata:
  name: doc-example-bgp-adv
  namespace: metallb-system
spec:
  protocol: bgp
  addresses:
    - 203.0.113.200/30
    - fc00:f853:ccd:e799::/124
  bgpAdvertisements:
  - communities:
    - 65535:65282
    aggregationLength: 32
    localPref: 100
  - communities:
    - 8000:800
    aggregationLength: 30
    aggregationLengthV6: 124

前の例では、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 アドバタイズにします。

26.3.4. 次のステップ