Kubernetes 环境中切换代理ipvs模式
Kubernetes 环境中切换代理ipvs模式
service代理默认使用iptables规则通过内核模块netfilter实现流量转发,内核转发效率高,但是iptables不具备更为灵活的负载均衡策略,只是将流量随意的转发至后端Pod,当Pod不可用时也无法进行健康检查;就以下是将默认流量转发修改为ipvs。
启动ipvs模块
启用 ipvs 模块
首先,您需要创建一个配置文件 /etc/sysconfig/modules/ipvs.modules,并将以下内容写入其中:
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
然后,将配置文件设置为可执行,并运行它,以加载所需的内核模块:
# chmod 755 /etc/sysconfig/modules/ipvs.modules
# bash /etc/sysconfig/modules/ipvs.modules
最后,您可以使用以下命令检查加载的内核模块:
# lsmod | grep -e ip_vs -e nf_conntrack
修改代理模式为ipvs
修改kube-proxy的comfigmaps文件
# kubectl get configmaps -n kube-system kube-proxy
NAME DATA AGE
kube-proxy 2 39d
# kubectl edit cm -n kube-system kube-proxy
44 mode: "ipvs" #默认mode: ""为空,使用iptables
# kubectl edit cm -n kube-system kube-proxy
configmap/kube-proxy edited
因为kube-prooxy是用daemonsets控制器创建的,直接删除kube-proxy的Pod,让他重建就可以了
# kubectl get pod --show-labels -n kube-system | grep kube-proxy #删除之前的pod名称
# kubectl delete pod -l k8s-app=kube-proxy -n kube-system
# kubectl get pod --show-labels -n kube-system | grep kube-proxy #删除后发现已经重建完成并运行
完成配置验证IPVS功能
查看日志"Using ipvs Proxier"
,"Creating dualStackProxier for ipvs"
已经使用并创建了ipvs。
# kubectl logs kube-proxy-6nglx -n kube-system | grep ipvs
I0821 03:07:27.736909 1 server_others.go:269] "Using ipvs Proxier"
I0821 03:07:27.736956 1 server_others.go:271] "Creating dualStackProxier for ipvs"
配置已经生效并且 kube-proxy 在 ipvs 模式下运行,可以验证 IPVS 功能是否正常。在一个运行着服务的 Node 上运行ipvsadm -Ln | grep <service-ip>
命令,将替换<service-ip>
为您实际的服务 IP 地址:
# ipvsadm -Ln| grep 12.12.1.100
TCP 12.12.1.100:30080 rr
TCP 12.12.1.100:32411 rr
本文来自博客园,作者:xiao智,转载请注明原文链接:https://www.cnblogs.com/yuwen01/p/17645567.html