如何通过metalLB将k8s的LoadBalancer服务类型转换为高效负载均衡解决方案?

2026-04-02 15:271阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计711个文字,预计阅读时间需要3分钟。

如何通过metalLB将k8s的LoadBalancer服务类型转换为高效负载均衡解决方案?

本地自行安装的k8s集群,默认不支持LoadBalancer,需要自己安装组件来支持。而云上的k8s,默认都是支持LoadBalancer的。如果自己公司搭建集群,那一定是+本地自行安装的k8s集群,默认不支持LoadBalancer。

本地自己安装的k8s集群,默认是不支持LoadBlancer的,需要自己安装一个组件来支持.而云上的k8s,肯定是都支持LoadBalancer的.如果自己公司搭建集群,那肯定也是

本地自己安装的k8s集群, 默认是不支持LoadBlancer的, 需要自己安装一个组件来支持. 而云上的k8s, 肯定是都支持LoadBalancer的.如果自己公司搭建集群, 那肯定也是需要安装LoadBlancer的, 我们看看都有哪些支持本地集群的实现哪:

  • metalLB: Netlify是一家位于旧金山的云计算公司,为Web应用程序和静态网站提供托管和无服务器后端服务.
  • openelb: 之前是PorterLB, KubeSphere公司开源的, 是有中文文档的, 不过改名的过程中, 有点乱.

然后这是 OpenELB写的对比: github.com/kubesphere/openelb/blob/master/doc/zh/compared_with_metallb.md

最终我测试了metalLB

如何通过metalLB将k8s的LoadBalancer服务类型转换为高效负载均衡解决方案?

  • openelb的文档太乱了
  • metalLB使用ConfigMap来配置IP池, openELB使用 eip来配置IP池--方便监控
  • metaLB声明的时候无需特殊设置, openELB必须使用 annotations: lb.kubesphere.io/v1alpha1: porter

我们来看看如何安装使用metalLB, (其实步骤都很简单, 切换为openELB也很容易)

确认strictARP模式

如果你的网络是运行在IPVS模式下(默认是iptables), 那么需要设置strictARP模式:

kubectl edit configmap -n kube-system kube-proxy

修改其中的strictARP为true:

apiVersion: kubeproxy.config.k8s.io/v1alpha1kind: KubeProxyConfigurationmode: "ipvs"ipvs: strictARP: true

安装 metalLB:

kubectl apply -f raw.githubusercontent.com/metallb/metallb/v0.10.2/manifests/namespace.yamlkubectl apply -f raw.githubusercontent.com/metallb/metallb/v0.10.2/manifests/metallb.yaml

如果镜像来不下来, 就用vpn.... 我发现用k8s就必须学会用vpn或者迁移大法才行...因为好多镜像都拉不下来...也没警告!!

手工检查Pod是否启动正常, 会不会卡在拉镜像的步骤?

[root@centos1 ~]# k get pods -n metallb-systemNAME READY STATUS RESTARTS AGEcontroller-6b78bff7d9-84cvr 1/1 Running 0 16dspeaker-5n8pm 1/1 Running 0 16dspeaker-5zsbb 1/1 Running 0 16dspeaker-wc47c 1/1 Running 0 16d

如果看到metallb-system命名空间下有controller, speaker等进程已经在Running状态, 说明正常.

配置IP池

这里我们使用layer2协议, 毕竟本地测试没有BGP设备, 如果是正式用, 还是要上BGP设备的.

先找网络管理员申请预留的IP端, 配置如下:

apiVersion: v1kind: ConfigMapmetadata: namespace: metallb-system name: configdata: config: | address-pools: - name: default protocol: layer2 addresses: - 172.18.0.203-172.18.0.210

然后配置上去

kubectl apply -f metallb.ip.yaml

如果是BGP的话, 文档在这: metallb.universe.tf/configuration/

测试效果

现在我们来部署一个Nginx来看看

kubectl apply -f nginx.test.yaml

其中内容如下:

apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-metallb-testspec: selector: matchLabels: app: nginx-metallb-test template: metadata: labels: app: nginx-metallb-test spec: containers: - name: nginx image: nginx:1.8 ports: - name: www.cnblogs.com/cnscud/p/15305433.html

本文共计711个文字,预计阅读时间需要3分钟。

如何通过metalLB将k8s的LoadBalancer服务类型转换为高效负载均衡解决方案?

本地自行安装的k8s集群,默认不支持LoadBalancer,需要自己安装组件来支持。而云上的k8s,默认都是支持LoadBalancer的。如果自己公司搭建集群,那一定是+本地自行安装的k8s集群,默认不支持LoadBalancer。

本地自己安装的k8s集群,默认是不支持LoadBlancer的,需要自己安装一个组件来支持.而云上的k8s,肯定是都支持LoadBalancer的.如果自己公司搭建集群,那肯定也是

本地自己安装的k8s集群, 默认是不支持LoadBlancer的, 需要自己安装一个组件来支持. 而云上的k8s, 肯定是都支持LoadBalancer的.如果自己公司搭建集群, 那肯定也是需要安装LoadBlancer的, 我们看看都有哪些支持本地集群的实现哪:

  • metalLB: Netlify是一家位于旧金山的云计算公司,为Web应用程序和静态网站提供托管和无服务器后端服务.
  • openelb: 之前是PorterLB, KubeSphere公司开源的, 是有中文文档的, 不过改名的过程中, 有点乱.

然后这是 OpenELB写的对比: github.com/kubesphere/openelb/blob/master/doc/zh/compared_with_metallb.md

最终我测试了metalLB

如何通过metalLB将k8s的LoadBalancer服务类型转换为高效负载均衡解决方案?

  • openelb的文档太乱了
  • metalLB使用ConfigMap来配置IP池, openELB使用 eip来配置IP池--方便监控
  • metaLB声明的时候无需特殊设置, openELB必须使用 annotations: lb.kubesphere.io/v1alpha1: porter

我们来看看如何安装使用metalLB, (其实步骤都很简单, 切换为openELB也很容易)

确认strictARP模式

如果你的网络是运行在IPVS模式下(默认是iptables), 那么需要设置strictARP模式:

kubectl edit configmap -n kube-system kube-proxy

修改其中的strictARP为true:

apiVersion: kubeproxy.config.k8s.io/v1alpha1kind: KubeProxyConfigurationmode: "ipvs"ipvs: strictARP: true

安装 metalLB:

kubectl apply -f raw.githubusercontent.com/metallb/metallb/v0.10.2/manifests/namespace.yamlkubectl apply -f raw.githubusercontent.com/metallb/metallb/v0.10.2/manifests/metallb.yaml

如果镜像来不下来, 就用vpn.... 我发现用k8s就必须学会用vpn或者迁移大法才行...因为好多镜像都拉不下来...也没警告!!

手工检查Pod是否启动正常, 会不会卡在拉镜像的步骤?

[root@centos1 ~]# k get pods -n metallb-systemNAME READY STATUS RESTARTS AGEcontroller-6b78bff7d9-84cvr 1/1 Running 0 16dspeaker-5n8pm 1/1 Running 0 16dspeaker-5zsbb 1/1 Running 0 16dspeaker-wc47c 1/1 Running 0 16d

如果看到metallb-system命名空间下有controller, speaker等进程已经在Running状态, 说明正常.

配置IP池

这里我们使用layer2协议, 毕竟本地测试没有BGP设备, 如果是正式用, 还是要上BGP设备的.

先找网络管理员申请预留的IP端, 配置如下:

apiVersion: v1kind: ConfigMapmetadata: namespace: metallb-system name: configdata: config: | address-pools: - name: default protocol: layer2 addresses: - 172.18.0.203-172.18.0.210

然后配置上去

kubectl apply -f metallb.ip.yaml

如果是BGP的话, 文档在这: metallb.universe.tf/configuration/

测试效果

现在我们来部署一个Nginx来看看

kubectl apply -f nginx.test.yaml

其中内容如下:

apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-metallb-testspec: selector: matchLabels: app: nginx-metallb-test template: metadata: labels: app: nginx-metallb-test spec: containers: - name: nginx image: nginx:1.8 ports: - name: www.cnblogs.com/cnscud/p/15305433.html