MetalLB 是一个用于裸机 Kubernetes 集群的负载均衡器实现,使用标准路由协议。
占用一个虚拟的 IP 地址,转发到对应的 ingress,而不占用宿主机的端口。
一、准备工作
- 开启 strictARP
1
| kubectl edit configmap -n kube-system kube-proxy
|
不确定自己是哪种模式就执行 kubectl get configmap kube-proxy -n kube-system -o yaml | grep mode,看到 mode: "ipvs" 才需要改。
- 添加官方 Helm 仓库后安装
1 2 3 4 5 6 7
| helm repo add metallb https://metallb.github.io/metallb helm repo update
helm install metallb metallb/metallb \ --namespace metallb-system \ --create-namespace \ --version 0.16.1
|
- 验证
1
| kubectl get pods -n metallb-system -w
|
三、配置 IP 地址池
- 编辑资源清单文件
1
| vim /opt/selfhost/infra-deployment/metallb/metallb-config.yaml
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: name: first-pool namespace: metallb-system spec: addresses: - 192.168.10.60-192.168.10.70 --- apiVersion: metallb.io/v1beta1 kind: L2Advertisement metadata: name: example namespace: metallb-system spec: ipAddressPools: - first-pool
|
- 创建资源
1
| kubectl apply -f metallb-config.yaml
|
四、验证
- 随便起个服务,类型设成 LoadBalancer,看它能不能拿到 IP:
1 2 3
| kubectl create deploy nginx --image=nginx kubectl expose deploy nginx --port=80 --type=LoadBalancer kubectl get svc nginx
|
- 清理测试的资源
1
| kubectl delete deploy,svc nginx
|