新闻详情

新闻详情

首页 / 资讯中心 / 详情

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

发布时间:2026/9/13 10:24:03来源:尧图网络
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),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Kilo Code VS Code 扩展专用输出通道(Dedicated Output Channel)设计与落地指南 2026/9/13 11:03:06

Kilo Code VS Code 扩展专用输出通道(Dedicated Output Channel)设计与落地指南

Kilo Code VS Code 扩展专用输出通道(Dedicated Output Channel)设计与落地指南 【免费下载链接】kilocode Kilo is the all-in-one agentic engineering platform. Build, ship, and iterate faster with the most popular open source coding agent. …

阅读更多 →
MobaXterm SFTP频繁断连?从客户端到服务器端彻底解决 2026/9/13 11:03:06

MobaXterm SFTP频繁断连?从客户端到服务器端彻底解决

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
大数据分析:从理论到实践的技术解析 2026/9/13 11:03:06

大数据分析:从理论到实践的技术解析

1. 大数据分析概述:从理论到实践的跨越 大数据分析早已不再是科技行业的专属词汇,它正在重塑各行各业的决策方式。想象一下,当一家零售企业能够实时分析千万级用户行为数据,或当医疗机构能从海量病历中发现潜在的治疗模式——这正…

阅读更多 →
Vue+ASP.NET Web API部署常见问题与生产配置指南 2026/9/13 11:03:06

Vue+ASP.NET Web API部署常见问题与生产配置指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
从EasyExcel迁移到Apache Fesod:复杂表头与嵌套List导出的实践方案 2026/9/13 11:03:06

从EasyExcel迁移到Apache Fesod:复杂表头与嵌套List导出的实践方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
DDR5内存条硬件解析:SPD5118、PMIC与温度传感器全拆解 2026/9/13 11:00:06

DDR5内存条硬件解析:SPD5118、PMIC与温度传感器全拆解

1. 这不是一块内存,而是一台微型数据中心——DDR5内存条的“五金店”实录你拆过内存条吗?不是那种把散热马甲撬开、对着金手指吹两口气的“清洁式拆解”,而是真刀真枪焊下颗粒、刮掉屏蔽层、用热风枪逐个起掉小封装芯片,最后在显微…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞