inductor's blog

nothing but self note :)

Metal LBがいつの間にかConfigMapじゃなくてCRDで設定するようになってた

社ではない某おうちKubernetesクラスターでMetal LBを使っているんだけど、0.12.x以前でロードバランサーを浮かべる場合、L2モードで以下のようなConfigMapを書いていた。

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

以下の通り、0.13.2からはCRDによる構成設定が可能になったため、ConfigMapが使えなくなった。

metallb.universe.tf

ただしメリットもあって、MetalLB自体のバージョン管理がKustomzieネイティブで便利になった(これまではraw githubから取ってきていたのでrennovateに載せられなかった)。

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: metallb-system

resources:
  - github.com/metallb/metallb/config/native?ref=v0.13.7

設定方法はドキュメントに書いてあって、

IPAddressPool から来る IP を広報するために、L2Advertisement インスタンスを IPAddressPool に関連付ける必要があります。L2Advertisement インスタンスに IPAddressPool セレクタを設定しない場合、そのインスタンスは利用可能なすべての IPAddressPool に関連付けられると解釈されます。したがって、特殊な IPAddressPools があり、そのうちのいくつかだけを L2 経由で広報する必要がある場合、IP を広報したい IPAddressPools のリストを宣言する必要があります(代替手段として、ラベルセレクタを使用することが可能です)。

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: default-pool
  namespace: metallb-system
spec:
  addresses:
  - 192.168.8.128-192.168.8.255
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: default-advertisement
  namespace: metallb-system
# spec:
#   ipAddressPools:
#   - default-pool

とかなんとかやればいけるっぽい。