【メタルエルビー】

MetalLB とは?

最終更新:
💡 自前KubernetesのServiceに、外部IPとその到達先を用意する

クラウドのロードバランサ連携がないKubernetes環境で、LoadBalancerタイプのServiceに外部IPを割り当て、ARP/NDPやBGPでその到達先を知らせるOSS。通信を受けたノードからPodへの振り分けは、KubernetesのServiceを実現する仕組みが担う。

📌 このページのポイント
MetalLB:IPの割り当てと広告 MetalLB IPをプールから割り当て 到達先をネットワークへ広告 クライアント ブラウザ等 受信ノード(L2の例) Service → Podへ振り分け Pod A Pod B 通信 IP割当・広告 外部IPの例 192.168.1.240 L2:IPv4はARP/IPv6はNDP 外部IPでもLAN内だけの場合がある
L2モードでServiceのIPへ通信が届く例。緑の矢印はIPの割り当てと広告の関係、青は通信で、MetalLBを独立した中継点として通る図ではありません。Podへの振り分けはkube-proxyなどが担います。
ひよこ ひよこ
ペンギン先生、MetalLBって何なの?
ペンギン先生 ペンギン先生
KubernetesにはLoadBalancerタイプのServiceがあるよ。クラウド側の連携機能がない環境では、外部IPを割り当てる仕組みが別に必要になる。MetalLBは、用意したIPを割り当て、そのIPへ通信が届くようネットワークへ知らせるOSSなんだ。
ひよこ ひよこ
MetalLB自身が全部の通信を中継するの?
ペンギン先生 ペンギン先生
IPの割り当てと、到達先を知らせることが主な役割だよ。通信はネットワークを通ってクラスタのノードへ届き、そこからkube-proxyなどのServiceを実現する仕組みがPodへ振り分ける。MetalLBを独立した中継サーバーとして必ず通るわけではないんだ。
ひよこ ひよこ
どうやってIPアドレスを割り当てるの?
ペンギン先生 ペンギン先生
管理者が使えるIPの範囲をプールとして設定しておくよ。MetalLBはその中からServiceにIPを割り当てる。IPを無から作るわけではないし、LAN用のプライベートIPを使う場合もある。外部IPという名前だけでインターネットから接続できるとは限らないよ。
ひよこ ひよこ
L2モードとBGPモードはどう使い分けるの?
ペンギン先生 ペンギン先生
L2ではARP/NDPを使い、あるServiceのIPへの通信を1ノードが受ける。ルーターとのBGP連携が不要な一方、そのノードの帯域が入口の上限になる。BGPではノードからルーターへ経路を広告し、ルーターが複数の経路を使えるよう設定されていれば、接続を複数ノードへ振り分けられるよ。
ひよこ ひよこ
障害が起きても接続は切れない?
ペンギン先生 ペンギン先生
L2では別ノードへ引き継ぐけれど、相手側のアドレス情報の更新などで切り替えに時間がかかることがある。BGPでも経路の変化で既存の接続が切れる場合があるよ。方式を選んだだけで無停止になるわけではないので、使うネットワークとアプリの条件を確認するんだ。
ひよこ ひよこ
自宅のクラスタでも使えるんだね!
ペンギン先生 ペンギン先生
使える環境はあるよ。ただし、プールと広告の設定に加え、ネットワークからそのIPへ到達できる必要がある。Web向けの入口にIngressを組み合わせることもあるけれど、MetalLBを入れるだけでインターネット公開の設定まで完了するわけではないんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「MetalLB」って出てきたら「自前KubernetesのServiceに外部IPを割り当て、その到達先を知らせるOSS」と思えばだいたいOK!
📖 おまけ:英語の意味
「MetalLB」 = Metal(ベアメタル)+LB(ロードバランサ)
💬 ベアメタルなど、クラウドのロードバランサ連携がないKubernetes環境を想起させる名前だよ。物理サーバーだけに限らず、そのようなクラスタで利用する。

参考資料

← 用語集にもどる