不是运行在公有云上(GCP,AWS,Azure …)的k8s 不支持LoadBalancers模式的service。
好在社区有一个软件解决了这个问题:metallb
Metallb 会在 Kubernetes 内运行,监控服务对象的变化,一旦察觉有新的LoadBalancer 服务运行,并且没有可申请的负载均衡器之后,就会完成两部分的工作:
1.地址分配
用户需要在配置中提供一个地址池,Metallb 将会在其中选取地址分配给服务。
2.地址广播
根据不同配置,Metallb 会以二层(ARP/NDP)或者 BGP 的方式进行地址的广播。
关于裸金属集群的负载均衡方案介绍
接着我们就来安装配置Metallb:
- 安装
kubectl apply -f https://raw.githubusercontent.com/google/metallb/v0.8.1/manifests/metallb.yaml
-下载配置文件
wget https://raw.githubusercontent.com/google/metallb/v0.7.3/manifests/example-layer2-config.yaml
#修改ip地址:
[centos@k8s-master ~]$ vim example-layer2-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 10.30.80.200-10.30.80.201 #这里填写你的集群node地址范围
- 添加配置文件到k8s:
kubectl apply -f example-layer2-config.yaml
- 接下来重新添加 LoadBalancer 的服务到k8s
可以看到LoadBalancers模式的service成功运行。
网友评论