MetalLB
シンプルなロードバランサである、MetalLBをインストールする方針にする
MetalLBを入れる
これはRancherからポチポチでいい
Appをインストールするだけ。全部デフォでいい
MetalLBが使っていいIPレンジを教える
全ての設定はMetalLBと同じnamespaceに作成することで行う
MetalLB remains idle until configured. This is accomplished by creating and deploying various resources into the same namespace (metallb-system) MetalLB is deployed into.
この例ではmetallb-systemにインストールされている前提で書いている
今回は192.168.35.0/24を渡す
これを適用する
code:metallb.yaml
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: metallb-pool
namespace: metallb-system
spec:
avoidBuggyIPs: true
addresses:
- 192.168.35.0/24
アナウンス手段を設定する
いざ適当なIPアドレスが設定されたとて、ルーティングできなければ到達できない
no routesになる
そこで、MetalLBはネットワークに情報をアドバタイズして周辺のルータにお知らせする
2つ方法がある
ARPを使ってL2レイヤで行う
BGPを発信する
今回は宅内で使うだけなのでどう見てもBGPは不要。シンプルに設定できるL2でいく
以下のリソースを作成する
code:L2.yaml
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: l2adv
namespace: metallb-system
k3s独自の問題
でもloadBalancerClass指定したら回避できるんじゃないか?
そううまくいかなかったので既存のLBを潰す
起動時オプションでk3s server --disable servicelb --disable traefikする
これを行うとしばらくRancherが見えなくなるので注意
servicelb: ロードバランサ
traefik: Ingressコントローラ
MicroOSなのでtransactional-shellする
code:/etc/systemd/system/k3s.service
...
ExecStart=/usr/local/bin/k3s server --disable servicelb --disable traefik
reboot
これしたらRancherが見えなくなった
しばらく手動でRancherにIPアドレスをくくりつける
kubectl expose deployment rancher -n cattle-system --type=LoadBalancer --name=rancher-lb --port=443
MetalLBがちゃんと動いていれば見えるようになる
kubectl get service/rancher-lb -n cattle-systemしたら外部アドレス見えるべ
参考文献