网络宁静是一个永恒的命题。江苏尊龙凯时作为海内信息宁静行业的先行者,始终关注源端技术,不绝探索网络宁静前沿技术,洞察网络宁静技术的发趋势,为推进网络宁静领域技术立异与工业生态生长,孝敬一份力量。
本文主要通过在使用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