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

image

修改代理模式为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"

image

配置已经生效并且 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

image

posted @ 2023-08-21 11:27  xiao智  阅读(194)  评论(0编辑  收藏  举报