侧边栏壁纸
博主头像
kevin's blog! 博主等级

行动起来,活在当下

  • 累计撰写 27 篇文章
  • 累计创建 17 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

部署MetalLB

kevin
2024-03-30 / 0 评论 / 0 点赞 / 85 阅读 / 0 字

metallb2.jpg

Metallb一开始是挂在github.com/google下面的,估计是某个员工的个人项目,现在已经挂到了个人名下了。
它的作用就是通过k8s原生的方式提供LB类型的Service支持,开箱即用。
Metallb支持两种工作模式,一种是Layer2模式,另一种是BGP模式。

Metallb在Layer2模式下,会从k8s节点中选一个Leader节点,在这个节点上面响应LB地址段的ARP请求,从而使上层路由把发往LB的流量都发到Leader节点。
缺点也很明显,所有对LB的请求都会发往Leader节点。如果当前Service下面的Pod分布在不同节点,那么这个流量还会从Leader发往相应的节点。

v2-ec9e8db88f698c9672d103ad8b873676_r[1].jpg

下面这种情况的话就需要路由器支持接收Metallb的BGP广播,从而把请求分布到正确的节点上。跟L2模式的区别就是能够通过BGP协议正确分布流量了,不再需要一个Leader节点。
缺点就是需要上层路由器支持BGP。而且因为BGP单session的限制,如果Calico也是使用的BGP模式,就会有冲突从而导致metallb无法正常工作。
v2-fb6a91bfec26e479280a78112848ffa1_r[1].jpg

本次使用Layer2 模式来进行部署。

配置 MetalLB 为Layer2 模式

# 创建MetalLB目录
mkdir -p ~/MetalLB-yml && cd ~/MetalLB-yml

# 下载MetalLB安装yml
wget https://raw.githubusercontent.com/metallb/metallb/v0.13.12/config/manifests/metallb-native.yaml

# 部署MetalLB
kubectl apply -f ~/MetalLB-yml/metallb-native.yaml

# 等MetalLB部署完成后,k8s-master 创建ip地址池
cat > ~/MetalLB-yml/iptool.yaml << 'EOF'
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: default
  namespace: metallb-system
spec:
  addresses:
  - 192.168.122.3-192.168.122.255 # 网段跟node节点保持一致
  autoAssign: true
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: default
  namespace: metallb-system
spec:
  ipAddressPools:
  - default
EOF

# 部署IPAddressPool
kubectl apply -f ~/MetalLB-yml/iptool.yaml

[root@master1 ~/MetalLB-yml]# kubectl get IPAddressPool -n metallb-system
NAME      AUTO ASSIGN   AVOID BUGGY IPS   ADDRESSES
default   true          false             ["192.168.122.3-192.168.122.255"]

metallb1.png

0

评论区