首页
视频
资源
登录
原
Kubernetes MetalLB LoadBalancer
2988
人阅读
2022/9/1 14:06
总访问:
1737802
评论:
0
收藏:
0
手机
分类:
容器编排
 >#Kubernetes MetalLB LoadBalancer [TOC] ## 介绍 tn2>熟悉k8s的都知道,k8s的LoadBalancer类型的Service依赖于外部的云提供的Load Balancer。 当我们把k8s部署在裸机上面时,或者是测试环境时,需要简单的LoadBalancer来验证工作,开源的metallb就是一个不错的选择。 ## 工作模式 tn2>Metallb支持两种工作模式,一种是Layer2模式。  tn2>这是我在实验环境下面常用的模式,只需要一段跟K8s管理网相同网段的地址即可。 Metallb在这种模式下,会从k8s节点中选一个Leader节点,在这个节点上面响应LB地址段的ARP请求,从而使上层路由把发往LB的流量都发到Leader节点。 缺点也很明显,所有对LB的请求都会发往Leader节点。如果当前Service下面的Pod分布在不同节点,那么这个流量还会从Leader发往相应的节点。 不过用在实验环境里这个模式真是太好用了,不需要路由器支持BGP。 另一种是BGP模式。  tn2>这种情况的话就需要路由器支持接收Metallb的BGP广播,从而把请求分布到正确的节点上。 跟L2模式的区别就是能够通过BGP协议正确分布流量了,不再需要一个Leader节点。 缺点就是需要上层路由器支持BGP。而且因为BGP单session的限制,如果Calico也是使用的BGP模式,就会有冲突从而导致metallb无法正常工作。 ## 安装 tn2>安装metallb ```bash # 创建metallb kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.4/config/manifests/metallb-native.yaml ``` tn2>我这里已经安装完成了。  tn2>接着我们查看与我们主机之间相联的网络。 我这里是`enth0`,这台master主机的地址是:`10.211.55.11`  tn2>然后我们这里通过安装一个`sipcalc`小工具,来查看我们的网络段。 ```bash # 先安装epel源. yum -y install epel-release yum -y install sipcalc # 查看网段 sipcalc 10.211.55.11/24 ```  tn2>我们只需要取靠后的二十个ip地址作为我们的LoadBalancer就可以了。 ## 启动L2模式 tn2>我们通过定义`IPAddressPool`资源,来指定k8s分配段的IP。 (`vim ippool.yaml`) ```yaml apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: name: production namespace: metallb-system spec: addresses: - 10.211.55.230-10.211.55.250 ``` tn2>我们看到`addresses`接收的参数是一个集合,所以如果你嫌麻烦可以直接将IP大段赋值上去。(如下举例) ```bash spec: addresses: - 10.211.55.0/24 - 10.211.55.230-10.211.55.250 ``` tn2>然后我们通过`L2Advertisement`来创建我们的L2模式。 (`vim l2.yaml`) ```yaml apiVersion: metallb.io/v1beta1 kind: L2Advertisement metadata: name: l2 namespace: metallb-system ``` tn2>最后通过`Community`资源类型开通vpn隧道可以使得集群外局域网中的网站可以访问。 (`vim com.yaml`) ```yaml apiVersion: metallb.io/v1beta1 kind: Community metadata: name: communities namespace: metallb-system spec: communities: - name: vpn-only value: 1234:1 ``` tn2>部署L2模式。 ```bash kubectl apply -f ippool.yaml kubectl apply -f l2.yaml kubectl apply -f com.yaml ```  ## 测试 ```bash kubectl run nginx --image=nginx --port=80 # 创建服务 kubectl expose pod nginx --port=80 --name=nginx --type=LoadBalancer # 查看pod kubectl get pod,svc ```  tn2>测试集群内部访问。  tn2>测试局域网内部的访问。  ## 设置BGP tn2>我们可以设置 BGP 的创建。 首先创建我们外部路由器或路由防火墙的地址池。 这里我们使用Juniper SSG5防火墙配置举例,ip为:`10.211.55.210`。 接着我们配置lb的bgp配置清单 ```bash vim prodbgppool.yaml ``` ```yaml apiVersion: v1 kind: ConfigMap metadata: namespace: metallb-system name: config data: config: | peers: - peer-address: 10.211.55.254 peer-asn: 64500 my-asn: 64500 address-pools: - name: default protocol: bgp addresses: - 10.211.55.11/29 ``` tn2>然后我们设置Juniper SSG5 防火墙的配置 ```bash firewall-> set vrouter trust-vr # 设置bgp 为64500与lb的配置保持一致 firewall(trust-vr)-> set protocol bgp 64500 # 设置两个work node的节点地址 firewall(trust-vr)-> set neighbor 10.211.55.11 remote-as 64500 local-ip 10.211.55.254/24 firewall(trust-vr)-> set neighbor 10.211.55.11 enable firewall(trust-vr)-> set neighbor 10.211.55.12 remote-as 64500 local-ip 10.211.55.254/24 firewall(trust-vr)-> set neighbor 10.211.55.12 enable firewall(trust-vr)-> set interface ethernet0/6 protocol bgp ``` tn2>然后进行部署。 ```bash kubectl apply -f prodbgppool.yaml ``` tn2>在防火墙上查看是否获取到路由。 ```bash firewall-> get vrouter trust-vr protocol bgp rib i: IBGP route, e: EBGP route, >: best route, *: valid route Prefix Nexthop Wt Pref Med Orig AS-Path -------------------------------------------------------------------------------------- Total ipv4 routes in rib-in: 4 (0 in flap-damping history) -------------------------------------------------------------------------------------- >i 10.211.55.64/32 10.211.55.11 100 0 0 INC i 10.211.55.64/32 10.211.55.11 100 0 0 INC >i 10.211.55.65/32 10.211.55.12 100 0 0 INC i 10.211.55.65/32 10.211.55.12 100 0 0 INC Total no. of ipv4 entries shown: 4 ```
欢迎加群讨论技术,群号:677373950
评价
{{titleitem}}
{{titleitem}}
{{item.content}}
{{titleitem}}
{{titleitem}}
{{item.content}}
尘叶心繁
这一世以无限游戏为使命!
博主信息
排名
6
文章
6
粉丝
16
评论
8
文章类别
.net后台框架
155篇
linux
17篇
linux中cve
1篇
windows中cve
0篇
资源分享
10篇
Win32
3篇
前端
27篇
传说中的c
4篇
Xamarin
9篇
docker
15篇
容器编排
101篇
grpc
4篇
Go
15篇
yaml模板
1篇
理论
2篇
更多
Sqlserver
4篇
云产品
38篇
git
3篇
Unity
1篇
考证
2篇
RabbitMq
23篇
Harbor
1篇
Ansible
8篇
Jenkins
17篇
Vue
1篇
Ids4
18篇
istio
1篇
架构
2篇
网络
7篇
windbg
4篇
最新文章
最新评价
{{item.articleTitle}}
{{item.blogName}}
:
{{item.content}}
关于我们
ICP备案 :
渝ICP备18016597号-1
网站信息:
2018-2023
TNBLOG.NET
技术交流:
群号677373950
联系我们:
contact@tnblog.net
欢迎加群
欢迎加群交流技术