0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

自宅K8sサーバーへMetallbを導入

Last updated at Posted at 2024-12-27

環境

  • K8s v1.31.2
  • CNI Flannel
  • Master×1の単一ノード

やりたいこと

  • MetallbのL2モードをK8s環境に入れたい

作業

①Helmでmetallbをインストール(metallb-systemというnsで実行)

helm repo add metallb https://metallb.github.io/metallb
helm install metallb metallb/metallb

②L2モードの設定を入れる(IPAddressPool,L2Advertisement)

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: default
  namespace: metallb-system
spec:
  addresses:
  - 192.168.10.201-192.168.10.250
  autoAssign: true
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: default
  namespace: metallb-system
spec:
  ipAddressPools:
  - default

LBに割り当てるIPはホストのネットワークの範囲。今回は192.168.10.200~192.168.10.250。

他の古いサイトとかではconfigmap を使用しているが、現在はCRDによる構成設定が可能になったため使用できない。

③サンプルサイトをデプロイ

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: default
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.27.3
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  namespace: default
  labels:
    app: nginx
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
  selector:
    app: nginx

serviceでExternal IPが先ほど指定したIPプールの範囲で割り当てられていることを確認。

④単一ノードのnode.kubernetes.io/exclude-from-external-load-balancersの削除(環境が単一ノードの場合に限る)

どうやら、単一ノードの場合デフォルトでノードにnode.kubernetes.io/exclude-from-external-load-balancersというラベルが付いているので

そのラベルのためmetallbはノードからサービスをアドバタイズしない。

解決法

  • node.kubernetes.io/exclude-from-external-load-balancersラベルの削除
  • MetalLBのスピーカー設定で--ignore-exclude-lbフラグを有効にする

今回はラベルの削除を行った。

kubectl label node <ノード名> node.kubernetes.io/exclude-from-external-load-balancers-

これをしないと、ホストからはアクセスできるがホストのlanにあるPCからはアクセスできず、arpコマンドを打っても反応しない。

ラベルを削除したら、PCから先ほどのExternal IPにアクセスをして通信できるか確認。

arp -a でExternal IPとホストのIPのMACアドレスが同じことを確認したらmetallbのL2モードが正常に動いていることが確認できる。

CNIとの互換性

FlannelはサポートされているがCalicoなどの一部はサポートされていないが一応動くらしい。

お好みで、、

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?