文章目录
#作者:程宏斌
组件介绍
什么是kube-vip?
Kube-vip是一个专为Kubernetes环境设计的虚拟IP地址和负载均衡解决方案,特别适用于传统云负载均衡器不可用的场景:
- 裸机集群
- 边缘计算(包括ARM/RaspberryPi部署)
- 虚拟化环境
- 本地数据中心
该项目通过提供一个自包含的解决方案来处理控制平面高可用性和服务负载均衡,消除了在Kubernetes部署中实现高可用性对外部负载均衡器或多个工具的需求。
kube‑vip架构与设计详解
kube-vip是一个为Kubernetes集群提供高可用控制平面入口(VIP)及服务类型LoadBalancer功能的开源项目。它的目标是解决裸机/自托管Kubernetes环境中缺乏外部负载均衡器或昂贵云LB服务的问题,通过虚拟IP(VIP)在节点间漂移,实现HA和流量分发。
kube-vip的架构设计为模块化结构,可以同时支持:
- 控制平面高可用(ControlPlaneHA)
- ServiceLoadBalancer(服务负载均衡)
- 多种网络广告模式(ARP/BGP/RoutingTable/Wireguard)
所有这些功能运行在同一个二进制/进程内,能够灵活启用不同组合以适应网络拓扑和业务需求。
主要功能
Kube-vip主要有两个功能:
1.控制平面高可用性
Kube-vip为KubernetesAPI服务器提供虚拟IP地址(VIP),确保即使单个控制平面节点发生故障,控制平面仍然可访问。它可以部署为以下两种方式之一:
- 静态pod(通常配合kubeadm使用)
- DaemonSet(通常与K3s和其他发行版一起使用)
高可用机制借助Kubernetes内部leaderelection或Raft共识管理VIP,仅有一个实例负责VIP持有与广播。
2.服务负载均衡
Kube-vip为Kubernetes的Service资源(Type=LoadBalancer)提供VIP分配与流量转发能力,主要功能包括:
- 可从可配置的IP池分配地址
- 支持双向流量管理(入站+出站)
- 与DHCP、UPnP集成以适应动态网络环境
- 支持对外暴露服务,实现负载均衡入口能力
核心组件
高层架构分为以下三大核心组件:
- Manager(管理器)
Manager是kube‑vip的核心控制器:
- 初始化Kubernetes客户端连接
- 加载配置与命令参数
- 负责选择与初始化网络模式(ARP/BGP/Wireguard/RoutingTable)
- 管理leaderelection(控制面的VIP挂载者)
- 负责服务监听与负载均衡设置
Manager的生命周期驱动了整个kube‑vip的工作流程。

- Cluster(集群)
Cluster组件管理每个节点的状态:
- 分配/移除VIP到节点本地网络接口
- 配置路由与网络规则
- 实现ServiceLoadBalancer的功能(比如IPVS转发)
- 在ARP模式下负责发送ARP广播/NDP更新
Cluster是Manager与网络接口的桥接层。

- Network(网络接口封装)
Network层是一个抽象接口,用于:
管理本地IP/绑定
操作路由表
配置ARP/BGP/Wireguard等底层机制
通过Network的实现,kube‑vip能够直接修改系统网络行为以支持虚拟IP广播与路由。

数据流
1、启动阶段
- kube-vip进程启动
- Manager解析配置
- 建立Kubernetes客户端连接
1、Input(输入层)
- Configviaflags/envvars:命令行参数或环境变量传入的配置
- NodeAnnotations:Kubernetes节点注解(可覆盖默认配置)
- KubernetesAPI:用于监听集群状态,如Service和Endpoint变化
2、Processing(处理层)
- Manager:核心控制器,接收所有输入,处理VIP配置、服务事件和LeaderElection
3、Manager调用的核心组件
- ServiceWatcher/EndpointWatcher:监听KubernetesService与Endpoint对象变化
- Cluster:执行VIP挂载、网络配置、负载均衡规则
- LeaderElection:决定哪台节点是控制平面VIP的Leader

初始化与启动流程

1、启动与配置
程序解析命令行参数和环境变量,初始化配置管理器,并创建连接KubernetesAPI的客户端。
2、网络模式初始化
根据配置选择并启动对应的网络模式(如ARP广播、BGP路由、Wireguard或路由表模式),为后续宣告IP做好准备。
3、集群选举(LeaderElection)
初始化集群模块,通过Lease机制在节点间进行选举,确保只有Leader节点拥有绑定VIP和宣告路由的权限。
4、功能分支启用
根据配置决定开启哪些功能:如果是控制平面高可用,则直接绑定APIServerVIP;如果是负载均衡,则进入下一步监听模式。
5、监听服务变化(ServiceWatcher)
启动Service监听器,实时监控集群中type:LoadBalancer的新建或变更事件,一旦发现有新服务需要暴露,立即介入处理。
6、分配IP与更新状态
从地址池分配VIP(优先读取注解,兼容旧版Spec字段),更新Service的Annotation和Status.LoadBalancer.Ingress字段,告知用户外部访问地址。
7、网络宣告与流量转发
Leader节点通过选定的网络模式(ARP/BGP)向全网宣告该VIP,同时在本地配置iptables/IPVS规则,将流量转发到后端Pod(EndpointWatcher负责同步后端列表)。
与Kubernetes集群资源进行交互

图表分为上下两层:
上层:KubernetesResources(K8s资源)
Leases,ConfigMaps,Nodes,Services,Endpoints/EndpointSlices
这些是kube-vip操作的对象或依赖的资源。
下层:Kube-vipComponents(kube-vip组件)
Configuration,Manager,LeaderElection,ServiceWatcher,EndpointWatcher
这些是kube-vip内部的逻辑模块。
箭头表示数据流向或操作关系,标注的文字说明了具体行为(如Read,Watch,Create/Update等)。
完整工作流程示例(以创建一个LoadBalancerService为例)
1、用户创建一个type:LoadBalancer的Service。
2、Manager已通过Nodes的标签确认本节点可承担LB角色。
3、ServiceWatcher监听到该Service创建事件。
4、ServiceWatcher请求LeaderElection确认本机是否为Leader(只有Leader才能分配VIP)。
5、如果是Leader:
从地址池中分配一个VIP。
更新Service的.status.loadBalancer.ingress.ip=。
6、ServiceWatcher触发EndpointWatcher开始监听该Service对应的Endpoints。
7、EndpointWatcher监听到后端Pod列表,调用底层模块(如iptables)设置端口转发规则。
8、外部访问VIP→流量被路由到当前Leader节点→经iptables转发到后端Pod。
网络模式
Kube-vip支持多种网络机制来通告和管理虚拟IP地址:
| 模式 | 网络层级 | 技术描述 | 常见用例 |
|---|---|---|---|
| ARP | 二层(L2) | 通过ARP(AddressResolutionProtocol)在同一广播域内宣告并绑定VIP,利用GratuitousARP更新交换机ARP表,实现IP漂移 | 单子网部署场景,网络结构简单、无需改动现有路由设备 |
| BGP | 三层(L3) | 通过BGP(BorderGatewayProtocol)向上游路由设备通告VIP路由,实现跨子网或跨网段的流量引导 | 多子网部署,与现有网络基础设施或数据中心路由体系集成 |
| 路由表(RoutingTable) | 三层(L3) | 直接修改本机内核路由表,通过静态路由或策略路由控制流量走向 | 对路由路径有精细控制需求的专业或定制化环境 |
| Wireguard | 覆盖网络(Overlay) | 通过WireguardVPN建立加密隧道,在逻辑网络中管理和通告VIP,实现跨网络的安全互联 | 跨多个物理网络或数据中心的分布式部署环境 |
网络模式差异对比
| 维度 | ARP | BGP | 路由表 | WireGuard |
|---|---|---|---|---|
| 网络层级 | L2(二层) | L3(三层) | L3(三层) | L3隧道 |
| 工作原理 | IP→MAC映射(GARP广播) | 路由通告/路由更新 | 本机转发决策 | 建立加密隧道 |
| 控制对象 | 交换机MAC表 | 路由器路由表 | 本机路由表 | 节点对节点隧道接口 |
| 是否广播 | 是 | 否 | 否 | 否 |
| 是否跨子网 | 不适合 | 可以 | 可以 | 可以通过隧道 |
| 是否跨机房 | 不适合 | 可以 | 可以 | 可以 |
| 是否支持多活/ECMP | 不支持 | 支持 | 部分支持(取决于策略) | 部分支持(隧道负载) |
| 故障切换时间 | 0.5~1s | 1~5s(取决于BGP定时器) | 立即生效(本机变更) | 取决于隧道检测机制 |
| 部署复杂度 | 低 | 中~高(需要BGP+网络支持) | 低 | 中(需要密钥+配置接口) |
| 运维成本 | 低 | 中 | 低 | 中 |
| 对交换机压力 | 有广播 | 无 | 无 | 无 |
| 交换机操作 | 否 | 是(确认calico是否开启外部peering) | 否 | 否 |
| 对路由器压力 | 无 | 有 | 无 | 无 |
| 是否易受广播域大小影响 | 是 | 否 | 否 | 否 |
| 是否可加密 | 不加密 | 不加密 | 不加密 | 加密 |
| 是否可用于VIP漂移 | (kube-vipARP模式) | (kube-vipBGP模式) | ||
| 是否影响整个网络路由 否 | 是 | (本机局部) | 否 | (只是隧道) |
| 是否适合Overlay网络 | 一般 | 更适合 | 一般 | 适合 |
| Kubernetes控制面HA适用性 | 非常适合 | 适合 | 一般 | 不太适合 |
| KubernetesServiceLoadBalancer适用性 | 适合 | 非常适合 | 一般 | 不太适合 |
| 扩展性 | 中 | 高 | 中 | 高(安全隧道扩展) |
| 典型使用场景 | 单VLAN,单机房,简单VIP | 多子网/多机房/Spine-Leaf | 本机路由决策 | 跨公网/安全加密/VPN |
| 对网络知识要求 | 基础L2 | L3+BGP | 基础L3 | L3+VPN |
高可用机制
Kube-vip实现了两种不同的方法来确保高可用性:
领导者选举:
使用Kubernetes领导者选举来确定哪个实例管理VIP
- 基于Kubernetes原生领导者选举功能
- 健壮且与Kubernetes生态系统良好集成
Raft共识:
使用Raft算法进行集群协调和领导
- 可以独立于KubernetesAPI运行
- 对引导场景(例如启动集群)有用
实现层与技术栈
Kube-vip使用Go实现,利用了几个关键库和框架:
- Kubernetes客户端库:用于与KubernetesAPI交互
- IPVS:用于负载均衡实现
- BGP库:用于BGP模式支持
- Netlink:用于底层网络配置
- 领导者选举库:用于高可用性
这些实现选择使kube-vip能够轻量级、易于跨架构移植,并与Kubernetes生态系统高度集成。
kube-vip关键特性
kube-vip是一个为Kubernetes提供控制平面高可用性(HA)虚拟IP(VIP)和LoadBalancer服务支持的轻量级开源组件,无需依赖外部负载均衡器或硬件设备。
特征
kube-vip最初是为了给Kubernetes控制平面提供高可用性解决方案而创建的,但随着时间的推移,它已经发展到为Kubernetes服务(例如LoadBalancer)集成相同的功能。其部分特性包括:
VIP地址可以是IPv4、IPv6或DNS名称
控制平面负载均衡:
ARP(第2层)或BGP(第3层)模式下的浮动IP
使用领导人选举
支持kubeadm通过静态Pod配置的集群
支持K3s及其他(通过DaemonSets)
IPVS模式实现真正的负载均衡(kube-vip≥0.4)
动态DNS支持
服务类型LoadBalancer:
使用ARP(第2层)领导者选举
多个节点具有BGP
地址池按命名空间或集群进行划分
来自CIDR块或IP地址范围的地址
DHCP支持
通过UPnP暴露于网关
service负载均衡
kube-vip可以作为Kubernetes服务负载均衡器,提供无需云提供商集成的外部服务暴露方式。
服务监视器和负载均衡器
- 监视LoadBalancer类型的Kubernetes服务
- 从配置的池中分配VIP地址
- 使用IPVS(IP虚拟服务器)进行实际的流量负载均衡
- 可配置的转发方法(本地、隧道、直接)
- 可以限制为具有特定LoadBalancerClass的服务
地址管理选项
kube-vip为管理服务VIP地址提供了灵活的选项:
- 静态地址池:预定义的地址池
- DHCP集成:使用DHCP动态获取地址
- DDNS支持:获取新地址时更新DNS记录
- UPNP:通过通用即插即用通过网关设备暴露服务
按服务选举
- 可以对每个Kubernetes服务执行领导者选举
- 即使在ARP模式下也能启用HA服务
- 使用--servicesElection标志激活
支持的功能
Kube-vip包含几个高级功能以增强其功能:
- IPv4和IPv6支持:提供双栈功能
- 命名空间特定的IP池:按命名空间分离地址分配
- DHCP集成:从现有基础设施动态获取IP地址
- UPNP支持:自动配置网关设备以进行外部访问
- Prometheus指标:暴露操作指标以进行监控
- Pod出口管理:控制pod的出站流量路径
高级功能
Prometheus指标
kube-vip通过Prometheus暴露各种指标,使其操作能够被监控。
- 通过--prometheusHTTPServer标志启用
- 在/metrics端点上暴露指标
- 包括领导者状态、VIP状态和负载均衡器操作的指标
健康检查
- 可选的HTTP健康检查服务器
- 通过--healthCheckPort标志可配置端口
- 提供外部监控kube-vip健康状况的方法
功能配置表
| 功能 | 命令标志 | 环境变量 | 配置结构字段 |
|---|---|---|---|
| 控制平面HA | --controlplane | vip_enablecontrolplane | EnableControlPlane |
| ARP模式 | --arp | vip_arp | EnableARP |
| BGP模式 | --bgp | vip_enablebgp | EnableBGP |
| Wireguard模式 | --wireguard | vip_wireguard | EnableWireguard |
| 路由表模式 | --table | vip_enableroutingtable | EnableRoutingTable |
| 领导者选举 | --leaderElection | vip_leaderelection | EnableLeaderElection |
| 服务 | --services | vip_enableservices | EnableServices |
| 按服务选举 | --servicesElection | vip_serviceselection | EnableServicesElection |
| 负载均衡器 | --enableLoadBalancer | vip_loadbalancer | EnableLoadBalancer |
| Prometheus | --prometheusHTTPServer | vip_prometheusserver | PrometheusHTTPServer |
| DHCP/DDNS | --ddns | vip_ddns | DDNS |