更改Kubernetes为ipvs代理模式

资源列表

操作系统配置主机名IP所需软件
CentOS 7.92C4Gk8s-master192.168.93.101Docker、K8S使用kubeadm安装
CentOS 7.92C4Gk8s-node01192.168.93.102Docker、K8S使用kubeadm安装
CentOS 7.92C4Gk8s-node02192.168.93.103Docker、K8S使用kubeadm安装

基础环境

  • 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
  • 关闭内核安全机制
sed -i "s/.*SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config
setenforce 0

一、kube-proxy介绍

  • kube-proxy负责k8s service的实现,即实现了k8s内部从pod到service和外部从node port到service的访问
  • 每个节点都有一个kube-proxy容器进程。kube-proxy管理将寻址到集群Kubernetes Service对象的虚拟IP地址(VIP)的流量转发到适当的后端Pod。
  • kube-proxy有三种代理模式

1.1、userspace模式

  • 最早的代理模式。在userspace模式下,kube-proxy会在每个节点上创建一个监听指定端口的用户空间进程,该进程负责接收外部流量并将其转发到相应的Service和Pod。在k8s v1.2版本以后就已经淘汰了。

  • 缺点:性能较差,因为每个流量都需要经过用户空间进程的处理,导致较高的延迟和资源消耗

1.2、iptables代理模式

  • 在k8s v1.12版本之前的默认模式。该模式完全利用内核iptables规则来实现service的代理和负载均衡。
  • 该模式的优点是较userspace模式效率更高,当部署服务多的时候会生成大量的iptables规则。

1.3、ipvs代理模式

  • k8s v1.12版本之后的默认模式。与iptables类似,在内核实现,基于netfilter,监控service、pod的变化并创建对应的ipvs规则,不需要改变iptables规则链

  • 两则比较的话:ipvs和iptables都是基于netfilter实现的。但ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块;

  • iptables:规则灵活、功能强大;规则遍历匹配和更新,呈线性时延;

  • IPVS:工作在内核态,有更好的性能;调度算法丰富:rr,wrr,lc,wlc,ip hash…

二、更改代理模式

2.1、查看kube-proxy代理模式

  • master节点操作
# 方法1:如果回显是跟下面一样那使用的是默认的代理模式iptables
[root@k8s-master ~]# kubectl get cm kube-proxy -n kube-system -o yaml | grep mode
    mode: ""


# 方法2
[root@k8s-master ~]# curl localhost:10249/proxyMode
iptables[root@k8s-master ~]# 

2.2、更改代理模式

  • 更改代理模式的方式有很多种我这里只采取其中的一种
  • 修改kube-proxy的配置文件以configmap方式存储,如果让所有节点kube-proxy生效,需要重建新的pod。使用kubernetes部署k8s,若初始化k8s集群时,默认没有开启IPVS。则需要通过修改kube-proxy的配置文件来开启IPVS
2.2.1、所有节点安装IPVS软件
yum -y install ipset ipvsadm
2.2.2、所有节点加载IPVS模块
# 注意:linux kernel(内核)如果是4.19以上版本的请将nf_conntrack_ipv4 更新为 nf_conntrack。
uname -r
3.10.0-1160.71.1.el7.x86_64

cat <<EOF> /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_ipv4
EOF

chmod 755 /etc/sysconfig/modules/ipvs.modules
sh /etc/sysconfig/modules/ipvs.modules

# 查看内核模块
lsmod | grep ip_vs
lsmod | grep nf_conntrack_ipv4
2.2.3、master节点修改kube-proxy的配置文件
[root@k8s-master ~]# kubectl edit configmaps kube-proxy -n kube-system
# 默认大概在43行左右,添加ipvs,使其更改为ipvs代理模式,更改之后会自动生效
mode: "ipvs"
## 部分内容省略
# 保存退出后将会有以下回显
configmap/kube-proxy edited
2.2.4、查看kube-system命名空间下的kube-proxy
[root@k8s-master ~]# kubectl get pod -n kube-system | grep kube-proxy
kube-proxy-2c282                          1/1     Running   1          3d10h
kube-proxy-6n6pn                          1/1     Running   1          3d10h
kube-proxy-zhm2m                          1/1     Running   1          3d10h
2.2.5、查看旧的kube-proxy,k8s会自动生成新的kube-proxy
[root@k8s-master ~]# kubectl get pod -n kube-system |grep kube-proxy |awk '{system("kubectl delete pod "$1" -n kube-system")}'
pod "kube-proxy-2c282" deleted
pod "kube-proxy-6n6pn" deleted
pod "kube-proxy-zhm2m" deleted
2.2.6、查看新的kube-proxy
  • 通过pod名称去判定是否为新的porxy的pod
[root@k8s-master ~]# kubectl get pod -n kube-system | grep kube-proxy
kube-proxy-2bbrd                          1/1     Running   0          48s
kube-proxy-brjjl                          1/1     Running   0          57s
kube-proxy-bwv8k                          1/1     Running   0          58s
2.2.7、查看是否更改
[root@k8s-master ~]# kubectl get cm kube-proxy -n kube-system -o yaml | grep mode
    mode: "ipvs"
    
[root@k8s-master ~]# curl localhost:10249/proxyMode
ipvs[root@k8s-master ~]# 
2.2.8、查看负载调度策略
  • 未必一样
[root@k8s-master ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.96.0.1:443 rr
  -> 192.168.93.101:6443          Masq    1      0          0         
TCP  10.96.0.10:53 rr
  -> 10.244.58.194:53             Masq    1      0          0         
  -> 10.244.85.194:53             Masq    1      0          0         
TCP  10.96.0.10:9153 rr
  -> 10.244.58.194:9153           Masq    1      0          0         
  -> 10.244.85.194:9153           Masq    1      0          0         
UDP  10.96.0.10:53 rr
  -> 10.244.58.194:53             Masq    1      0          0         
  -> 10.244.85.194:53             Masq    1      0          0 

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部