官方github: https://github.com/google/metallb
官方文档:https://metallb.universe.tf


1. 安装之前

如果你在IPVS模式下使用kube-proxy,Kubernetes v1.14.2必须启用严格的ARP模式。注意,如果你使用kube-router作为service-proxy,你不需要这个,因为它默认启用了严格的ARP。

你可以通过编辑当前集群中的kube-proxy配置来实现:

$ kubectl edit configmap -n kube-system kube-proxy
...
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: "ipvs"
ipvs:
  strictARP: true
...

或者可以通过修改 configmap 来实现:

$ kubectl get configmap kube-proxy -n kube-system -o yaml | \
sed -e "s/strictARP: false/strictARP: true/" | \
kubectl diff -f - -n kube-system

$ kubectl get configmap kube-proxy -n kube-system -o yaml | \
sed -e "s/strictARP: false/strictARP: true/" | \
kubectl apply -f - -n kube-system

2. metallb安装

//安装 metallb

$ kubectl apply -f https://gitee.com/jack_zang/kubernetes/raw/master/lb/install-v0.13.7/metallb-native-v0.13.7.yaml

//配置 ip 地址池

$ cat lb/install-v0.13.7/metallb-l2-ippool.yaml
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: internal-ip
  namespace: metallb-system
spec:
  addresses:
  - 192.168.10.203-192.168.10.204

$ kubectl apply -f https://gitee.com/jack_zang/kubernetes/raw/master/lb/install-v0.13.7/metallb-l2-ippool.yaml

// 声明 地址池

$ cat lb/install-v0.13.7/metallb-l2advertisement.yaml
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: l2
  namespace: metallb-system
spec:
  ipAddressPools:
    - internal-ip

$ kubectl apply https://gitee.com/jack_zang/kubernetes/raw/master/lb/install-v0.13.7/metallb-l2advertisement.yaml

3. 验证

$ kubectl get pods -n metallb-system
NAME                          READY   STATUS    RESTARTS   AGE
controller-6c58495cbb-h589v   1/1     Running   0          101s
speaker-dt42c                 1/1     Running   0          101s
speaker-n7k6x                 1/1     Running   0          101s
speaker-rfgnx                 1/1     Running   0          101s