当你选择为Kubernetes控制平面(Master节点)的高可用(HA)使用kube-vip后,通常就不再需要额外部署Keepalived、HAProxy或Nginx来做API Server的负载均衡和高可用了。
简单来说,kube-vip旨在用一个原生、集成于K8s内部的解决方案,替代传统的外部软件负载均衡器(如HAProxy、Nginx)和高可用VIP管理组件(如Keepalived)的组合。
尽管kube-vip能替代传统方案,但在具体选择时,仍需考虑以下情况:
kube-vip可以完全替代的场景:如果你的核心需求是为Kubernetes控制平面(6443端口)提供高可用的访问入口,那么使用kube-vip是官方推荐且成熟的方案。你只需要在kubeadm init时指定kube-vip管理的VIP作为--control-plane-endpoint即可。
仍需组合使用或选择传统方案的情况:
1.需要高级七层负载均衡功能:kube-vip主要工作在网络二层(ARP)或三层(BGP),提供简单的TCP/UDP负载均衡。如果你的场景需要基于HTTP协议头、URL路径等七层的复杂路由、重写或认证功能,仍然需要部署Nginx或HAProxy等七层负载均衡器。
2.已有负载均衡基础设施:如果环境中已有F5、Citrix等硬件负载均衡设备,或者云厂商提供的托管负载均衡服务,可以直接使用它们作为控制平面的入口,此时也无需kube-vip。
3.大规模的入口流量管理:对于集群内业务应用(Service)的南北向流量,通常会使用更专业的Ingress Controller(如Nginx Ingress、Traefik)或云服务商的负载均衡器。kube-vip虽然也能为LoadBalancer类型的Service提供简单的实现(类似MetalLB),但在复杂生产环境中,它并非该领域的主流选择。一个重要的注意事项:kube-vip在ARP模式下工作时,依赖于二层网络广播。这在大部分公有云环境中是受限制的,可能无法正常工作。对于云上部署,你需要:
1.采用其BGP模式(如果网络支持)。
2.或者回退到使用每个节点上部署Nginx/HAProxy代理,然后通过云负载均衡器指向它们的传统方案。接下来我们看看kube-vip的部署方式,目前有两种部署方式,一种是静态POD,一种是DaemonSet的方式部署,我们这是暂时直接介绍静态POD和ARP场景下的部署方式
export VIP=192.168.0.40
export INTERFACE=ens160 #根据你的网络接口情况修改可以通过以下命令获取最新的kube-vip版本
KVVERSION=$(curl -sL https://api.github.com/repos/kube-vip/kube-vip/releases | jq -r ".[0].name")也可以手动指定版本
export KVVERSION=v0.5.0然后使用containerd部署命令如下
alias kube-vip="ctr image pull ghcr.io/kube-vip/kube-vip:$KVVERSION; ctr run --rm --net-host ghcr.io/kube-vip/kube-vip:$KVVERSION vip /kube-vip"配置好输入参数与别名命令后,我们便可在首个Master节点运行 kube-vip 容器来生成静态 Pod 清单文件,该文件会输出至 /etc/kubernetes/manifests/kube-vip.yaml 路径下。
ARP场景下部署方式
kube-vip manifest pod \
--interface $INTERFACE \
--address $VIP \
--controlplane \
--services \
--arp \
--leaderElection | tee /etc/kubernetes/manifests/kube-vip.yaml需要注意的时我们的所有的Master节点都需要部署kube-vip,另外k8s初始化时的--control-plane-endpoint地址需要修改为vip的地址,certSANs配置中也需要添加vip地址。
如果还有一些其他的限制和配置需求可以查看官网:https://kube-vip.io/docs/installation/static/
内容版权声明:除非注明,否则皆为本站原创文章。
评论列表