Kubespray 中使用 kube-vip 实现 Kubernetes 高可用控制平面与虚拟 IP 负载均衡的完整配置指南

发布时间:2026/9/13 10:24:09
Kubespray 中使用 kube-vip 实现 Kubernetes 高可用控制平面与虚拟 IP 负载均衡的完整配置指南 Kubespray 中使用 kube-vip 实现 Kubernetes 高可用控制平面与虚拟 IP 负载均衡的完整配置指南【免费下载链接】kubesprayDeploy a Production Ready Kubernetes Cluster项目地址: https://gitcode.com/GitHub_Trending/ku/kubesprayKube-vip 为 Kubernetes 集群提供虚拟 IPVIP与负载均衡能力既可以作为控制平面的 HA 入口构建高可用集群也可以作为 Service of type LoadBalancer 的负载均衡器且完全不依赖任何外部硬件或云厂商 LB 服务。本文基于 Kubespray 仓库中的 kube-vip 文档 与角色源码完整讲解各配置项的开启方式、默认值、底层静态 Pod 清单的生成逻辑以及 ARP/BGP 等发布模式的组合细节帮助你把一套无外部依赖的 VIP 高可用方案落地到 Kubespray 部署中。前置条件ipvs 模式下的 strict ARP 要求当 kube-proxy 运行在ipvs模式且 kube-vip 启用了 ARP 模式时必须将kube_proxy_strict_arp设为true否则 ARP 应答行为与 IPVS 的转发路径可能冲突导致 VIP 访问异常kube_proxy_strict_arp: true这一点在源码中有硬性校验kube-vip 前置检查任务 会在部署阶段执行fail当kube_proxy_mode ipvs、kube_proxy_strict_arp未开启且kube_vip_arp_enabled为真时直接中止 playbook 并给出提示。该变量默认值为false见 kube-proxy 默认变量最终写入 kubeadm 配置模板 kubeadm-config.v1beta4.yaml.j2 中 kube-proxy 的strictARP字段。启用方式静态 Pod 部署Kubespray 默认不启用 kube-vipkube_vip_enabled: false见 kubespray_defaults 默认变量必须显式打开kube_vip_enabled: true启用后的工作机制可以从源码确认任务入口位于 kubernetes/node/tasks/main.yml仅当节点属于kube_control_plane组且kube_vip_enabled为真时才会执行loadbalancer/kube-vip.yml即 kube-vip 只在控制平面节点上部署带 tagkube-vip可按 tag 重跑。loadbalancer/kube-vip.yml 会将模板渲染为静态 Pod 清单/etc/kubernetes/manifests/kube-vip.yml权限0640由 kubelet 托管因此重启控制平面节点后 kube-vip 会自动拉起。清单模板 kube-vip.manifest.j2 以hostNetwork: true运行挂载/etc/kubernetes/admin.conf第一个控制平面节点若存在super-admin.conf则优先挂载它并把节点名通过vip_nodename环境变量传入容器——从源码结构看kube-vip 借此实现跨控制平面节点的身份识别与 leader 选举。当前仓库锁定的版本与镜像见 download 默认变量kube_vip_version: 1.0.3镜像为kube-vip/kube-vip:v1.0.3。核心配置控制平面 HA 或 Service LoadBalancerkube-vip 的两种用途是独立的开关可以只开其一也可以同时开启# 控制平面 HA需要指定 VIP kube_vip_controlplane_enabled: true kube_vip_address: 10.42.42.42 loadbalancer_apiserver: address: {{ kube_vip_address }} port: 6443 # kube_vip_interface: ens160 # Service LoadBalancer 功能 kube_vip_services_enabled: false # kube_vip_services_interface: ens320各参数与默认值对照来源 kubernetes/node/defaults/main.yml变量默认值说明kube_vip_address空必须指定虚拟 IP 地址写入清单的address环境变量kube_vip_controlplane_enabledfalse开启后清单注入cp_enable: truekube-vip 监听 6443 等端口把 API Server 流量转发到后端控制平面节点kube_vip_services_enabledfalse开启后注入svc_enable: truekube-vip 为 LoadBalancer 类型 Service 提供 VIPkube_vip_interface空自动选择承载控制平面 VIP 的网络接口如ens160kube_vip_services_interface空自动选择Service VIP 使用的接口可与控制平面接口分离kube_vip_cidr32VIP 掩码0.9.0 及以上版本清单中环境变量名为vip_subnet见 manifest 模板kube_vip_dns_modefirstService DNS 解析模式first表示优先解析第一个 endpointkube_vip_cp_detectfalse控制平面健康探测心跳开关kube_vip_ddns_enabledfalse动态 DNS 更新开关两个关键联动点值得注意API Server 端点联动一旦定义了loadbalancer_apiserverkubeadm-setup 任务 会把apiserver_loadbalancer_domain_name即loadbalancer_apiserver.address设置为 kubeadm 的controlPlaneEndpoint同时kube_vip_address会被聚合进 apiserver 证书的 SAN 列表kubeadm-setup.yml保证客户端用 VIP 访问 6443 端口时证书校验通过。若之后修改了 VIP 或控制平面节点 IPKubespray 会用openssl -checkip/-checkhost核对现有证书SAN 不匹配时自动重新生成 apiserver 证书kubeadm-setup.yml。kubeconfig 端点Kubespray 在 kubespray_defaults 中依据loadbalancer_apiserver是否定义来生成集群 API 端点https://address:port | default(kube_apiserver_port)因此示例中port: 6443即成为 kubeconfig 中使用的入口端口。官方示例 inventory 中同样保留了这段注释态配置可供参考addons.yml。注意使用 kube-vip 作为 Service 的 LoadBalancer 时还需要完成官方文档中针对 cloud-provider 集成的额外手工步骤kube-vip 自身文档有说明本文仅覆盖 Kubespray 侧的参数配置。发布模式ARP 与 BGPVIP 通告方式决定了客户端如何把流量送到持有 VIP 的节点Kubespray 支持两种。ARP 模式kube_vip_arp_enabled: true默认kube_vip_arp_enabled: false。开启后 kube-vip 在本地网段内直接以 ARP 宣告 VIP。由于 ARP 只能在二层广播域内传播跨交换机/跨网段场景不适用且如上文所述ipvs 模式必须搭配kube_proxy_strict_arp: true。BGP 模式kube_vip_bgp_enabled: true kube_vip_local_as: 65000 kube_vip_bgp_routerid: 192.168.0.2 kube_vip_bgppeers: - 192.168.0.10:65000::false - 192.168.0.11:65000::false # kube_vip_bgp_peeraddress: # kube_vip_bgp_peerpass: # kube_vip_bgp_peeras: # kube_vip_bgp_sourceip: # kube_vip_bgp_sourceif:kube_vip_local_as默认65000是节点上 BGP 会话的本地 AS 号kube_vip_bgp_peerpass默认为空不配置认证kube_vip_bgp_peeras默认65000。kube_vip_bgppeers是 peer 地址列表格式为地址:AS:源接口:是否被动passive模板中会join(,)成单个bgp_peers环境变量注入清单manifest 模板。源码中有一条互斥校验kube_vip_bgp_sourceip与kube_vip_bgp_sourceif只能配置其一kube-vip.yml同时配置会 assert 失败。BGP 模式下 VIP 由路由协议通告可以跨越三层网络是企业机房内替代云厂商 LB 的常用做法。控制平面负载均衡方法与 Leader 选举调优lb_enable 与转发方法如果希望在 kube-vip 中启用官方的控制平面负载均衡control-plane load-balancing能力kube_vip_lb_enable: true并可通过kube_vip_lb_fwdmethod调整转发方法kube_vip_lb_fwdmethod: masquerade该变量默认值为localmain.yml并有两个重要联动镜像选择当kube_vip_lb_fwdmethod masquerade时镜像自动切换为kube-vip/kube-vip-iptables变体download.yml因为该模式依赖 iptables 做 NAT。容器权限清单模板中masquerade模式下容器以privileged: true运行否则默认 local 方法仅添加NET_ADMIN、NET_RAW能力并 drop 其他所有能力manifest 模板——这是一个可见的最小权限设计。Leader 选举参数若需调整 kube-vip LeaderElection 的租约时间kube_vip_leaseduration: 30 kube_vip_renewdeadline: 20 kube_vip_retryperiod: 4Kubespray 的默认值分别为5 / 3 / 1秒比上游保守得多对应清单中的vip_leaseduration、vip_renewdeadline、vip_retryperiod环境变量defaults。租约名默认plndr-cp-lock控制平面与plndr-svcs-lockService可通过kube_vip_leasename/kube_vip_svc_leasename修改。另外kube_vip_leader_election_enabled默认跟随kube_vip_arp_enabled的值即开启 ARP 时自动启用 leader 选举避免多节点同时宣告同一 VIP。此外还有两个清单中可用、文档未单列的开关kube_vip_cp_detect控制平面探测与kube_vip_enable_node_labeling由 kube-vip 维护节点标签默认均为false。Service 侧的 Local Traffic Policy若使用 kube-vip 的 local traffic policyexternal traffic policy 语义流量只落到本地节点后端kube_vip_enableServicesElection: true默认false。开启后清单注入svc_election: truemanifest 模板各节点之间通过 Service 级 leader 选举协调 VIP 持有关系。暴露 Prometheus 监控指标要打开 kube-vip 静态 Pod 的 Prometheus metrics 端点kube_vip_metrics_enabled: true # kube_vip_metrics_port: 2112实现细节在清单模板中清晰可见prometheus_server环境变量的值是:PORT冒号前缀形式因为 kube-vip 把该值直接交给 Go 的 HTTP listen address 使用servePrometheusHTTPServer逻辑模板对应代码为: ~ (kube_vip_metrics_port | string)manifest 模板同时容器的ports声明使用同一个纯数字端口方便读 pod spec 的工具链发现指标端口manifest 模板。Kubespray 将kube_vip_metrics_port默认设为2112与上游 kube-vip--prometheusHTTPServer的默认值一致如果你的 Prometheus 抓取配置期望其他端口直接覆盖该变量即可。小结与配置检查清单把一次典型的控制平面 HA BGP 部署串起来group_vars 中需要关注的最小集合是kube_vip_enabled: true kube_vip_controlplane_enabled: true kube_vip_address: 10.42.42.42 loadbalancer_apiserver: address: {{ kube_vip_address }} port: 6443 kube_vip_interface: ens160 # BGP 通告 kube_vip_bgp_enabled: true kube_vip_local_as: 65000 kube_vip_bgp_routerid: 192.168.0.2 kube_vip_bgppeers: - 192.168.0.10:65000::false # 若使用 ipvs ARP则必须 kube_proxy_strict_arp: true部署后可以在控制平面节点上检查/etc/kubernetes/manifests/kube-vip.yml中渲染出的环境变量是否与上述变量一致Kubespray 的 playbook 本身已通过前置任务strict ARP 校验、BGP source 互斥校验拦截了最常见的配置错误。参考入口kube-vip 文档、节点任务、静态 Pod 模板。【免费下载链接】kubesprayDeploy a Production Ready Kubernetes Cluster项目地址: https://gitcode.com/GitHub_Trending/ku/kubespray创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询