地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【k8s】metallbでオンプレでもtype: loadbalancerをやる

github.com

オンプレでk8sを遊んでいてぶつかる問題としてLBが定義でなくてnodePortを使って遊ぶしかない問題。これはこれで問題ないけどnodeの数が増えた際に覚えなければいけない事項が増えて困るので導入してみた。

Metallbで出来ること

MetalLBをKubernetesクラスタにデプロイすると、LoadBalancer Serviceにクラスタ外からアクセス可能な仮想IPアドレスを自動で割り振ってくれます。

AWSやらAzureなど以外では別途LVSとかを用意して負荷分散させる必要が必須だと思ってたのですがこれを使えばパブリッククラウドで使っている使用感でLoadBalancerを定義可能です。

モードという概念

metallbにはL2とBGPというモードがあります

  • L2モード

MetalLBがARP(IPv4)とNDP(IPv6)をしゃべって、クライアントに対して仮想IPアドレスを解決してくれる。

  • BGPモード

MetalLBがBGPをしゃべって、外部のBGPルータとBGP peeringして仮想IPアドレスへのルーティング情報を伝える。BGPルータが上位に必要になるのでお手軽感は低いがクラウドプロパイダが提供しているロードバランサーのような使い勝手なのはこっち

導入

apply

$ kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.3/manifests/namespace.yaml
$ kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.3/manifests/metallb.yaml

configを以下のように設定しapplyすれば使える

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 192.168.10.150-192.168.10.199

addressesはk8sで使用しているアドレスの帯域でDHCPで割り当てられないIPを指定する必要があります。