MetalLB 構築手順
Kubernetes クラスタに対してロードバランサを提供する MetalLB の構築手順です。
前提
Kubernetes クラスタ構築時に、CNI の選定に注意してください。少なくとも flannel では動作確認が取れています。
cf. https://metallb.io/#requirements
インストール手順
cf. https://metallb.io/installation/
- strict ARP mode を有効化します:
# see what changes would be made, returns nonzero returncode if different
kubectl get configmap kube-proxy -n kube-system -o yaml | \
sed -e "s/strictARP: false/strictARP: true/" | \
kubectl diff -f - -n kube-system
# actually apply the changes, returns nonzero returncode on errors only
kubectl get configmap kube-proxy -n kube-system -o yaml | \
sed -e "s/strictARP: false/strictARP: true/" | \
kubectl apply -f - -n kube-system
- マニフェストを apply します:
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.15.2/config/manifests/metallb-native.yaml
- 各種リソースが起動することを確認します:
kubectl get all -n metallb-system
設定・動作確認手順
cf. https://metallb.io/configuration/
- Service に割り当てる IP アドレス範囲を定義する
IPAddressPoolリソースを作成します:
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: first-pool
namespace: metallb-system
spec:
addresses:
- 192.168.151.61-192.168.151.70
autoAssign: true
kubectl apply -f ipaddresspool.yaml
- Layer 2 mode で起動するための
L2Advertisementリソースを作成します:
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: first-l2
namespace: metallb-system
spec:
ipAddressPools:
- first-pool
kubectl apply -f l2advertisement.yaml
- 動作確認用の nginx コンテナをデプロイします:
apiVersion: apps/v1
kind: Deployment
metadata:
name: first-deployment
spec:
selector:
matchLabels:
app: first-nginx
replicas: 3
template:
metadata:
labels:
app: first-nginx
spec:
containers:
- name: first-nginx
image: nginx:1.18
ports:
- containerPort: 80
kubectl apply -f deployment.yaml
- サービスをデプロイします:
apiVersion: v1
kind: Service
metadata:
name: first-service
spec:
type: LoadBalancer
ports:
- port: 80
protocol: TCP
selector:
app: first-nginx
kubectl apply -f service.yaml
- 正常に動作していれば、
EXTERNAL-IPに IP アドレスが振られ、クラスタ外から疎通をとることができます。
$ kubectl get svc first-service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
first-service LoadBalancer 10.96.50.59 192.168.151.61 80:30232/TCP 15s