K8S自建LoadBalancer
官方网站一般只有云平台支持LoadBalancer,如果脱离云平台,自己搭建的K8S集群,Service的类型使用LoadBalancer是没有任何效果的。为了让私有网络中的K8S集群也能体验到LoadBalabcer,Metallb成为了解决方案。Metallb运行在K8S集群中,监视集群内LoadBalancer类型的服务,然后从配置的IP池中为其分配一个可用IP,以ARP/NDP或BGP的方
一、metallb部署
参考网址:官方网站
为什么使用metallb?
一般只有云平台支持LoadBalancer,如果脱离云平台,自己搭建的K8S集群,Service的类型使用LoadBalancer是没有任何效果的。为了让私有网络中的K8S集群也能体验到LoadBalabcer,Metallb成为了解决方案。
Metallb运行在K8S集群中,监视集群内LoadBalancer类型的服务,然后从配置的IP池中为其分配一个可用IP,以ARP/NDP或BGP的方式将其广播出去,这个可用IP成为了LoadBalancer的Url,可供集群外访问。
部署准备
如果在IPVS模式下使用kube-proxy,则从Kubernetes v1.14.2开始,必须启用严格的ARP模式。
请注意,如果您将kube-router用作服务代理,则不需要此设置,因为默认情况下它启用了严格的arp。
kubectl edit configmap -n kube-system kube-proxy
并修改如下内容:
更新kube-proxy pod:
kubectl get pod -n kube-system |grep kube-proxy | awk '{system("kubectl delete pod "$1" -n kube-system")}'
开始部署:
下载yaml 文件:
wget https://raw.githubusercontent.com/metallb/metallb/v0.9.5/manifests/namespace.yaml
wget https://raw.githubusercontent.com/metallb/metallb/v0.9.5/manifests/metallb.yaml
创建configMap:
vim metallb-configMap.yaml
# configMap 内容
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 10.95.31.130-10.95.31.140
注意:IP池的网络需要和K8S集群的IP处于同一网段,我的K8S集群网络是10.95.31.xx,这里IP池则是给到 10.95.31.130-10.95.31.140的范围。
执行以下命令:
kubectl apply -f namespace.yaml
kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)" # 创建密钥,否则会出现报错
kubectl apply -f metallb.yaml
kubectl apply -f metallb-configMap.yaml
LoadBalancer测试
我们使用类型为LoadBalancer的Service进行测试,以nginx服务为例。
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=LoadBalancer
查看nginx服务:
kubectl get svc
ubernetes ClusterIP 10.0.0.1 <none> 443/TCP 11h
nginx LoadBalancer 10.0.0.82 10.95.31.130 80:31610/TCP 8s
可以看到,已经为nginx服务分配了一个10.95.31.130 的IP,直接在浏览器中访问,一切正常。
更多推荐
所有评论(0)