一、kube-vip总体介绍
1、总体说明
kube-vip 是一个专为 Kubernetes 设计的轻量级开源工具,它通过在集群节点间进行领导者选举来管理一个虚拟IP(VIP),为服务(特别是LoadBalancer类型)提供高可用的外部访问入口;它完美解决了在裸金属、边缘或混合云等缺乏云供应商负载均衡器的环境中,如何实现服务高可用与负载均衡的难题,其核心机制是让当选的领导者节点将VIP绑定到自己的外部网络接口并处理流量,一旦该节点故障,VIP会在秒级内自动迁移到新的健康节点,从而确保服务不中断。
2、官网地址
-
GitHub 仓库:https://github.com/kube-vip/kube-vip
-
官方网站:https://kube-vip.io/
二、详细说明
1、kube-vip 整体架构图
架构图描述:

这张架构图展示了 kube-vip 在 Kubernetes 集群中的部署架构。图中包含三个 Kubernetes 控制平面节点,每个节点都配备两张网卡:
-
eth0:用于 Kubernetes 内部通信,位于 10.0.0.0/24 网段
-
eth1:用于外部网络通信,位于 192.168.1.0/24 网段,kube-vip 在此接口上绑定虚拟 IP(VIP:192.168.1.100)
核心组件交互流程:
-
kube-vip Pod 以 DaemonSet 或静态 Pod 方式部署在每个控制平面节点
-
通过 领导者选举 机制(基于 Kubernetes Lease API)选举出当前持有 VIP 的节点
-
领导者节点(图中节点2)在其 eth1 接口上绑定 VIP(192.168.1.100)
-
外部客户端通过路由器访问 VIP,流量被路由到领导者节点
-
备用节点持续监控领导者状态,准备在故障时接管 VIP
高可用保障:
-
三个节点通过心跳检测相互监控
-
领导者选举确保任何时候只有一个节点持有 VIP
-
当领导者故障时,备用节点在数秒内完成故障转移
2、节点故障时VIP迁移过程

故障迁移示意图描述
阶段1:正常状态(蓝色线条部分)
-
外部客户端通过虚拟IP(VIP: 192.168.1.100)访问Kubernetes服务
-
流量通过eth1接口进入节点2,转发到kube-vip Pod(领导者)
-
客户端流量实际到达节点2(也可做负载均衡到三个节点,图中未画出)
-
三个节点的kube-vip Pod之间保持心跳检测,确保集群状态一致
阶段2:故障检测(黄色线条部分)
-
节点2发生故障(硬件、网络或服务问题)
-
节点1和节点3的kube-vip Pod通过心跳检测发现与节点1的通信超时
-
备用节点确认故障状态,准备发起新的领导者选举
阶段3:领导者选举(黄色线条部分)
-
节点1和节点3参与基于Kubernetes Lease API的分布式领导者选举
-
节点1成功获取Lease锁,成为新的领导者节点
阶段4:VIP迁移
-
新领导者节点1在其eth1接口上绑定相同的VIP(192.168.1.100)
-
节点1发送无偿ARP广播,通知网络设备VIP的MAC地址已变更
-
客户端收到ARP响应后更新ARP缓存
-
kube-vip更新Kubernetes Service状态,从端点列表中排除故障节点
阶段5:恢复完成
-
外部客户端通过同一个VIP继续访问服务,但流量被路由到节点1
-
服务完全恢复,客户端通常不会感知到故障切换
-
节点1和节点3继续保持心跳检测,准备下一次故障转移
三、安装部署
使用DaemonSet 方式部署
1. 环境准备
# 设置环境变量 export VIP=192.168.1.110 # 虚拟IP地址,与主机同网段且未被占用 export INTERFACE=ens160 # 网络接口名称(通过 ip a 查看) export KVVERSION=v1.1.2 # kube-vip 版本号
2. 获取最新版本(可选)
# 需要安装 curl 和 jq KVVERSION=$(curl -sL https://api.github.com/repos/kube-vip/kube-vip/releases | jq -r ".[0].name")
3. 应用 RBAC 权限
kubectl apply -f https://kube-vip.io/manifests/rbac.yaml
4. 生成并应用 DaemonSet 清单
# 使用 Docker alias kube-vip="docker run --network host --rm ghcr.io/kube-vip/kube-vip:$KVVERSION" kube-vip manifest daemonset \ --interface $INTERFACE \ --address $VIP \ --inCluster \ --taint \ --controlplane \ --services \ --arp \ --leaderElection | tee kube-vip-ds.yaml # 去掉nodeaffinity # 应用清单 kubectl apply -f kube-vip-ds.yaml
说明:国内镜像可拉取
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/kube-vip/kube-vip:v1.1.2
5. 验证安装
kubectl get pods -n kube-system | grep kube-vip
6、venus安装
安装venus-plugin-vip插件即可
四、功能验证
需要将kube-vip-ds.yaml拆分为配置文件configmap和daemonset,crbdl
1、修改vip的ip
kubectl edit cm -n kube-system kube-vip-config #触发应用 kubectl rollout restart daemonset kube-vip-ds -n kube-system
2、修改vip的节点
修改开源的nodeAffinity。本人自定义了一个,如:
kubectl label nodes node2 ghostcloud.cn/vip=true
这样daemonset就会部署在大了这个标签的节点上了
3、损坏vip的节点
将vip所在节点,网卡损坏后,vip能迁移到新节点。
4、初始化不配置vip和网卡名称
可行,kube-vip-config中即使不配置address和interface,pod正常启动。
5、是否需要配置路由和网关
根据实际需要查看,因为多网卡情况下,配置的网络可能不从默认路由走出来。
五、注意事项
-
网络要求:VIP 必须与所有控制平面节点在同一子网内
-
模式选择:支持 ARP(二层)、BGP(三层)和路由表模式
-
节点数量:控制平面节点最少需要 3 台,2 台无法正常工作
-
网卡名称:部署vip的节点的网卡名称必须相同。

215

被折叠的 条评论
为什么被折叠?



