ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

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

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),仅供参考
返回列表