容器相关
非root用户Docker与K8S
Containerd安装
Containerd常用命令
Docker
镜像创建
国内镜像仓库
容器创建(Dockerfile)
容器系统
docker配置
docker数据管理
docker网络管理
docker容器自启动
docker镜像加速
docker问题
搭建Portainer可视化界面
Docker Swarm
Swarm搭建Docker集群
Docker Compose
Docker Compose命令
Docker Compose模板
Docker Machine
Kubernetes常用命令
k8s部署(kubeadmin)
k8s高可用部署
MiniKube
k8s1.24部署(containerd)
k8s1.24部署(docker)
部署 Dashboard
Kuboard K8S管理台
k8s权限管理
k8s网络插件
私有仓密码镜像拉取
k8s集群管理
POD--基本单位
Pod模板
Pod生命周期
Pod健康检查
初始化容器(initContainer)
Deployment--Pod的管理
Deployment模板
Deployment升级与回滚
DaemonSet控制器
StatefulSet控制器(有状态)
JOB与CRONJOB
Service--发布服务
ingress-traefix
ingress-nginx
MetalLB
存储与配置
持久存储卷
配置存储卷
资源管理
标签、选择器与注解
资源预留
调度管理
自动扩容
Proxy API与API Server
Helm--K8S的包管理器
helm常用命令
自定义Chart
私有chart仓库
helm dashboard
K8S证书过期
K8S问题解决
Harbor安装
Harbor操作
Harbor问题
Harbor升级
Docker Registry安装
Docker Registry鉴权
Registry用Nginx代理SSL及鉴权
Docker Registry问题
Istio 服务网络
常用示例
Gateway【服务网关】
kiali 可视化页面
开启HTTPS
linkerd 服务网络
本文档使用MrDoc发布
返回首页
-
+
MetalLB
2024年4月28日 16:00
admin
#为何使用MetalLB --- 如果是自建的kubernetes裸机集群,那则要麻烦得多。祼机集群默认不支持负载均衡的方式,可用的方案不外乎Ingress、NodePort、ExternalIPs等方式来实现外部访问。可惜这些方案本身并不完美,他们或多或少都存在着一些缺点,这使得裸金属集群成为Kubernetes生态系统中的二等公民。 --- 而MetalLB 旨在通过提供与标准网络设备集成的LoadBalancer来解决这个痛点,从而使裸机群集上的外部服务也尽可能“正常运行”,减少运维上的管理成本。 --- #MetalLB作用 --- MetalLB 会在 Kubernetes 内运行,监控服务对象的变化,一旦监测到有新的 LoadBalancer 服务运行,并且没有可申请的负载均衡器之后,就会完成地址分配和外部声明两部分的工作。 --- #模式 --- ##Layer2: Layer2模式必须为裸金属服务器或者支持arp广播的网络,由于云的特殊arp机制,云平台无法支持Layer2模式 ![](/media//202404/2024-04-28154332009967.png) Layer 2 模式下,每个 Service 会有集群中的一个 Node 来负责。服务的入口流量全部经由单个节点,然后该节点的 Kube-Proxy 会把流量再转发给服务的 Pods。也就是说,该模式下 MetalLB 并没有真正提供负载均衡器。尽管如此,MetalLB 提供了故障转移功能,如果持有 IP 的节点出现故障,则默认 10 秒后即发生故障转移,IP 会被分配给其它健康的节点 ###优缺点: --- ####优点: 是它的通用性:它可以在任何以太网网络上运行,不需要特殊的硬件。 ####缺点: Layer 2 模式下存在单节点瓶颈,服务所有流量都经过一个Node节点。这意味着服务的入口带宽被限制为单个节点的带宽。 由于 Layer 2 模式需要 ARP/NDP 客户端配合,当故障转移发生时,MetalLB 会发送 ARP 包来宣告 MAC 地址和 IP 映射关系的变化,地址分配略为繁琐。 --- ##BGP: bgp模式和Calico组网方式无法共存,需采用其它组网方式才能使用BGP模式 ![](/media//202404/2024-04-28154534898992.png) BGP 模式下,集群中所有node都会跟上联路由器建立BGP连接,并且会告知路由器应该如何转发service的流量。 --- ###优缺点: --- ####优点: BGP模式下才是一个真正的 LoadBalancer,通过BGP协议正确分布流量,不再需要一个Leader节点。 ####缺点: 不能优雅处理故障转移,当持有服务的节点宕掉后,所有活动连接的客户端将收到 Connection reset by peer。 需要上层路由器支持BGP。而且因为BGP单session的限制,如果Calico也是使用的BGP模式,就会有冲突从而导致metallb无法正常工作。 --- #部署 ####要求 Kubernetes 1.13.0 版本或更高版本的集群。 --- ####安装MetalLB相关组件 运行下列命令安装相关组件,默认会将MetalLB部署到metallb-system 的名称空间。 --- $ kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.4/config/manifests/metallb-native.yaml --- #配置 ##Layer2模式配置 ####创建IPAddressPool,并指定用于分配的IP池。 apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: name: ip-pool namespace: metallb-system spec: addresses: - 192.168.214.50-192.168.214.80 #分配给LB的IP池 --- ####创建广播声明,此处未指定IP池,则默认会使用所有IP池地址。 apiVersion: metallb.io/v1beta1 kind: L2Advertisement metadata: name: l2adver namespace: metallb-system --- ##BGP模式配置 ####对于具有一个BGP路由器和一个IP地址范围的基本配置,您需要4条信息: MetalLB应该连接的路由器IP地址, 路由器的AS号, MetalLB应该使用的AS号, 以CIDR前缀表示的IP地址范围。 ####示例:现在分配给MetalLB的AS编号为64500和192.168.10.0/24的IP地址池,并将其连接到AS编号为64501的地址为10.0.0.1的路由器,则配置如下所示: --- ####创建BGPPeer apiVersion: metallb.io/v1beta2 kind: BGPPeer metadata: name: sample namespace: metallb-system spec: myASN: 64500 peerASN: 64501 peerAddress: 10.0.0.1 --- ####配置IP地址池 apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: name: first-pool namespace: metallb-system spec: addresses: - 192.168.10.0/24 --- ####创建广播声明 apiVersion: metallb.io/v1beta1 kind: BGPAdvertisement metadata: name: bgpadver namespace: metallb-system --- #验证 ####查看 kubectl get IPAddressPool -A kubectl get L2Advertisement -A --- kubectl get svc -A -o wide | grep LoadBalancer --- ![](/media//202404/2024-04-28160424729851.png) ![](/media//202404/2024-04-28160350928211.png) --- #资料 https://cloud.tencent.com/developer/article/2146391
分享到: