26.3. MetalLB アドレスプールの設定
クラスター管理者は、アドレスプールを追加、変更、および削除できます。MetalLB Operator は、アドレスプールカスタムリソースを使用して、MetalLB がサービスに割り当てることのできる IP アドレスを設定します。
26.3.1. アドレスプールのカスタムリソースについて
アドレスプールカスタムリソースのフィールドは、以下の表で説明されています。
表26.1 MetalLB アドレスプールのカスタムリソース
フィールド | 型 | 説明 |
---|---|---|
|
|
アドレスプールの名前を指定します。サービスを追加する場合は、 |
|
| アドレスプールの namespace を指定します。MetalLB Operator が使用するものと同じ namespace を指定します。 |
|
|
ロードバランサー IP アドレスをピアノードに通知するためのプロトコルを指定します。 |
|
|
オプション: MetalLB がこのプールから IP アドレスを自動的に割り当てるかどうかを指定します。 |
|
| サービスに割り当てる MetalLB の IP アドレスのリストを指定します。1 つのプールに複数の範囲を指定できます。CIDR 表記で各範囲を指定するか、開始および終了の IP アドレスをハイフンで区切って指定します。 |
|
|
オプション: デフォルトでは、BGP モードは、割り当てられた各ロードバランサー IP アドレスを、追加の BGP 属性なしで設定済みのピアにアドバタイズします。ピアルーターは、サービス IP アドレスごとに 1 つの |
bgp Advertisements
オブジェクトのフィールドは、次の表に定義されています。
表26.2 BGP アドバタイズメント設定
フィールド | 型 | 詳細 |
---|---|---|
|
|
オプション: 32 ビット CIDR マスクに含めるビット数を指定します。マスクが複数のサービス IP アドレスのルートに適用され、speaker は集約されたルートをアドバタイズし、speaker が BGP ピアにアドバタイズするルートを集約します。たとえば、集約の長さが |
|
|
オプション: 128 ビット CIDR マスクに含めるビット数を指定します。たとえば、集約の長さが |
|
| オプション: 1 つ以上の BGP コミュニティーを指定します。各コミュニティーは、16 ビット値 2 つをコロン文字で区切って指定します。一般的なコミュニティーは、16 ビット値として指定する必要があります。
|
|
| オプション: このアドバタイズメントのローカル設定を指定します。この BGP 属性は、Autonomous System 内の BGP セッションに適用されます。 |
26.3.2. アドレスプールの設定
クラスター管理者は、クラスターにアドレスプールを追加して、MetaLLB がロードバランサーサービスに割り当てることのできる IP アドレスを制御できます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてログインしている。
手順
以下の例のような内容で、
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
アドレスプールの設定を適用します。
$ 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.200
と 203.0.113.203
、fc00:f853:ccd:e799::0
とfc00:f853:ccd:e799::f
の範囲の IP アドレスをロードバランサーサービスに割り当てます。
MetalLB が 203.0.113.200
の IP アドレスをサービスに割り当てる例について見ていき、これら 2 つの BGP アドバタイズメントを説明します。この IP アドレスを例にとると、speaker は 2 つのルートを BGP ピアにアドバタイズします。
-
localPref
が100
に、コミュニティーが一般的な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. 次のステップ
- BGP モードについては、 MetalLBBGP ピアの設定を参照してください。
- MetalLB を使用するためのサービスの設定