干货分享|Kubernetes负载均衡器之MetalLB
更新时间:2022-09-27 来源: 编辑:管理员 浏览:310

网络安全是一个永恒的命题。江苏保旺达作为国内信息安全行业的先行者,始终关注源端技术,不断探索网络安全前沿技术,洞察网络安全技术的发趋势,为推进网络安全领域技术创新与产业生态发展,贡献一份力量。


本文主要通过在使用Kubernetes的过程中,如何将服务开放到集群外部访问类似情况进行分析,希望给予读者朋友专业的建议。


MetalLB简介

在使用Kubernetes的过程中,如何将服务开放到集群外部访问是一个重要的问题。当使用云平台(阿里云、腾讯云、AWS、微软云等)的Kubernetes服务时,我们可以通过配置 service 为 LoadBalancer 模式来绑定云平台提供的负载均衡器,从而实现外网的访问。但是,如果对于自建的 Kubernetes裸机集群,这个问题则要麻烦的多。

祼机Kubernetes集群不支持负载均衡的方式,可用的有NodePort、HostNetwork、ExternalIPs等方式来实现外部访问。但这些方式都有各自的适用场景,也或多或少存在一些缺点,随着MetalLB的诞生,自建的裸机Kubernetes集群也可以选择负载均衡的方案进行业务测试。

MetalLB 旨在通过提供与标准网络设备集成的Network LB实施来解决这个痛点,从而使裸机群集上的外部服务也尽可能“正常运行”,减少运维上的管理成本。它是一种纯软件的解决方案,对理解LoadBalancer也有一定的参考价值。

MetalLB官方网站:https://metallb.universe.tf

MetalLB项目地址:https://github.com/metallb/metallb

MetalLB提供了两个功能:

1. 地址分配:当创建 LoadBalancer Service 时,MetalLB会为其分配IP地址。这个IP地址是从预先配置的IP地址库获取的。同样,当Service删除后,已分配的IP地址会重新回到地址库。

2. 对外广播:分配了IP地址之后,需要让集群外的网络知道这个地址的存在。MetalLB 使用了标准路由协议实现:ARP、NDP或者BGP。(广播的方式有两种,一种是 Layer 2 模式,使用 ARP(IPV4)/NDP(IPV6)协议;另一种是BPG协议。)

本文主要介绍Layer 2模式,也就是OSI 二层。下图是MetalLB Layer 2模式的示意图。

图1-Layer 2模式

如何安装MetalLB

下载yaml文件,根据自己的需求下载对应的版本,最新的版本为0.13.5

https://raw.githubusercontent.com/metallb/metallb/v0.12.1/manifests/metallb.yaml


[root@k8s-01 tools]# kubectl create -f metallb.yaml 

namespace/metallb-system created

serviceaccount/controller created

serviceaccount/speaker created

clusterrole.rbac.authorization.k8s.io/metallb-system:controller created

clusterrole.rbac.authorization.k8s.io/metallb-system:speaker created

role.rbac.authorization.k8s.io/config-watcher created

clusterrolebinding.rbac.authorization.k8s.io/metallb-system:controller created

clusterrolebinding.rbac.authorization.k8s.io/metallb-system:speaker created

rolebinding.rbac.authorization.k8s.io/config-watcher created

daemonset.apps/speaker created

deployment.apps/controller created


查看MetalLB的pod信息

[root@k8s-01 tools]# kubectl get pods -n metallb-system

NAME                          READY   STATUS    RESTARTS   AGE

controller-788798f984-nwzzk   1/1     Running   0          3m5s

speaker-nlqbj                 1/1     Running   0          3m5s

speaker-vkpg9                 1/1     Running   0          3m5s

speaker-vzg5w                 1/1     Running   0          3m5s

配置MetalLB

[root@k8s-01 tools]# more layer2-config.yaml 

apiVersion: v1

kind: ConfigMap

metadata:

  namespace: metallb-system

  name: config

data:

  config: |

    address-pools:

    - name: my-ip-space

      protocol: layer2

      addresses:

      - 192.168.202.140-192.168.202.240


[root@k8s-01 tools]# kubectl create -f layer2-config.yaml 

configmap/config created

该配置文件指定在metallb-system下生成一个名为config的标准Kubernetes ConfigMap,配置项中包含两条信息,一个是使用了layer 2协议,一个是地址的取值范围为 192.168.202.140-192.168.202.240。

Nginx测试MetalLB

[root@k8s-01 tools]# kubectl create -f nginx-test-metalLB.yaml

deployment.apps/nginx created

service/nginx created

[root@k8s-01 tools]# kubectl get pods

NAME                     READY   STATUS    RESTARTS   AGE

nginx-5f78746595-tvq5j   1/1     Running   0          11s

[root@k8s-01 tools]# kubectl get svc nginx

NAME    TYPE           CLUSTER-IP       EXTERNAL-IP       PORT(S)        AGE

nginx   LoadBalancer   10.110.214.139   192.168.202.141   80:32240/TCP   18s

[root@k8s-01 tools]# 

[root@k8s-01 tools]# 

[root@k8s-01 tools]#  kubectl logs -l component=speaker -n metallb-system

{"caller":"main.go:161","event":"startUpdate","msg":"start of service update","service":"default/Kubernetes","ts":"2020-11-23T06:12:32.221525812Z"}

关注数据  保障未来

扫码|关注我们

微信号|江苏保旺达

网址|http://www.bwda.net


创造更安全的数字未来 身份与访问安全 · 数据安全 · 安全管理与运营 · 安全服务 · 军工保密 查看更多