一、概述\

        我们都知道,k8s集群的外部网络分发,借助kube-proxy组件来完成;

问题:我们为什么要将代理模式修改为ipvs而不继续使用iptables呐?

 

        1,iptables底层使用四表五链完成网络代理,效率比较低,而ipvs是采用了iphash的方式实现代理的,效率比较高,因此才会采用ipvs作为生产环境中的网络代理;

        2,iptables不太适合【读】,可读性太低,很乱;

二、查看k8s中的kube-proxy的代理模式

1,查看kube-proxy

[root@master ingress]#  kubectl get pods -n kube-system -o wide

2,查看kube-proxy的日志

        通过查看kube-proxy的日志,我们就知道了我们正在使用iptables还是ipvs为代理模式了;

[root@master ingress]# kubectl logs -n kube-system kube-proxy-cknbb

 

3,【拓展】使用iptables查看svc资源

· 查看现有svc
[root@master ingress]# kubectl get svc

 

 

· 使用iptables查看其中一个svc
[root@master ingress]# iptables-save | grep 10.12.36.48
 · 查看iptables查询出来的规则(往下查一层路由)

[root@master ingress]# iptables-save | grep KUBE-SVC-CL34MMSZRUFQFSPM

· 再往下查一层
[root@master ingress]# iptables-save | grep KUBE-SEP-EQWBPISE7ODDUAEY

 

· 总结:

        通过一层一层的路由查询,我们就知道了目标地址的终点ip是什么;

三、查看kube-proxy工作模式

[root@master ingress]# kubectl get pods kube-proxy-cknbb -n kube-system -o yaml

可以看到有一个cm资源

 查看cm资源

[root@k8s231 ingress]# kubectl describe cm -n kube-system kube-proxy

发现“”里面什么都没写,就代表是默认的iptables

四、开始修改代理模式为ipvs 

1,k8s集群所有节点加载ipvs模块

[root@master ingress]# yum -y install conntrack-tools ipvsadm.x86_64
[root@node1 ~]# yum -y install conntrack-tools ipvsadm.x86_64
[root@node2 ~]# yum -y install conntrack-tools ipvsadm.x86_64
 
[root@master ingress]# cat /etc/sysconfig/modules/ipvs.modules 
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4

[root@node1 ~]# cat > /etc/sysconfig/modules/ipvs.modules <<EOF
> modprobe -- ip_vs
> modprobe -- ip_vs_rr
> modprobe -- ip_vs_wrr
> modprobe -- ip_vs_sh
> modprobe -- nf_conntrack_ipv4
> EOF
[root@node2  ~]# cat > /etc/sysconfig/modules/ipvs.modules <<EOF
> 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 && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

 

 2,修改k8s集群的工作模式为ipvs

 修改cm资源(kube-proxy)

[root@master ingress]# kubectl -n kube-system edit cm kube-proxy
configmap/kube-proxy edited

3,删除原有的kube-proxy的pod

        删除后会重新拉起,然后就修改成功了

[root@master ingress]# kubectl get pods -n kube-system | grep kube-proxy | awk '{print $1}' | xargs kubectl -n kube-system delete pods
 

        等待重新拉起pod

 

4,查看是否修改成功

[root@master ingress]# kubectl logs -n kube-system kube-proxy-5p9vx

 

5,拓展:使用ipvs查看svc路由

[root@master ingress]# ipvsadm -ln  | grep 10.12.36.48 -A5
 

 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐