ipvs采用的hash表,iptables采用一条条的规则列表。集群数量越多iptables规则就越多,而iptables规则是从上到下匹配,所以效率就越是低下。因此当service数量达到一定规模时,hash查表的速度优势就会显现出来,从而提高service的服务性能。
我的k8s测试集群有两个节点,xianchaomaster1和xianchaonode1
修改ipvs方法如下所示:
[root@xianchaomaster1 ~]#yum install -y ipset ipvsadm
[root@xianchaomaster1~]#cat << 'EOF' > /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
ipvs_modules=(ip_vsip_vs_lc ip_vs_wlc ip_vs_rr ip_vs_wrr ip_vs_lblc ip_vs_lblcr ip_vs_dh ip_vs_ship_vs_fo ip_vs_nq ip_vs_sed ip_vs_ftp nf_conntrack_ipv4)
forkernel_module in ${ipvs_modules[*]}; do
/sbin/modinfo -Ffilename ${kernel_module} > /dev/null 2>&1
if [ $? -eq 0 ];then
/sbin/modprobe${kernel_module}
fi
done
EOF
[root@xianchaomaster1~]#chmod +x /etc/sysconfig/modules/ipvs.modules
[root@xianchaomaster1~]# /etc/sysconfig/modules/ipvs.modules
[root@xianchaomaster1~]# kubectl -n kube-system edit cm kube-proxy
......
mode:"ipvs"
......
[root@xianchaonode1~]# yum install -y ipset ipvsadm
[root@xianchaonode1~]#cat<< 'EOF' > /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
ipvs_modules=(ip_vsip_vs_lc ip_vs_wlc ip_vs_rr ip_vs_wrr ip_vs_lblc ip_vs_lblcr ip_vs_dh ip_vs_ship_vs_fo ip_vs_nq ip_vs_sed ip_vs_ftp nf_conntrack_ipv4)
forkernel_module in ${ipvs_modules[*]}; do
/sbin/modinfo -Ffilename ${kernel_module} > /dev/null 2>&1
if [ $? -eq 0 ];then
/sbin/modprobe${kernel_module}
fi
done
EOF
[root@ xianchaonode1~]# chmod +x /etc/sysconfig/modules/ipvs.modules
[root@ xianchaonode1~]#/etc/sysconfig/modules/ipvs.modules
[root@xianchaomaster1~]# kubectl -n kube-system get pod -l k8s-app=kube-proxy | grep -v 'NAME' | awk'{print $1}' | xargs kubectl -n kube-system delete pod
[root@xianchaomaster1~]# iptables -t filter -F; iptables -t filter -X; iptables -t nat -F; iptables-t nat -X;
[root@ xianchaonode1~]#iptables -t filter -F; iptables -t filter -X; iptables -t nat -F; iptables -tnat -X;
修改ipvs模式之后过5-10分钟测试在k8s创建pod是否可以正常访问网络
[root@xianchaomaster1~]# kubectl run busybox --image busybox:1.28 --restart=Never --rm -it busybox-- sh
/ # pingwww.baidu.com
PING www.baidu.com(39.156.66.18): 56 data bytes
64 bytes from110.242.68.4: seq=0 ttl=127 time=37.319 ms
#通过上面可以看到能访问网络
/# exit
[root@xianchaomaster1 ~]# kubectl run busybox --image busybox:1.28--restart=Never --rm -it busybox -- sh
/ # nslookupkubernetes.default.svc.cluster.local
Server: 10.96.0.10
Address 1:10.96.0.10 kube-dns.kube-system.svc.cluster.local
Name: kubernetes.default.svc.cluster.local
Address 1:10.96.0.1 kubernetes.default.svc.cluster.local
看到上面内容,说明k8s的dns解析正常
作者微信:luckylucky421302
精彩文章推荐
年底了,总结下这一年,收获满满
2022年底第一波福利!
基于Jenkins+git+harbor+Helm+k8s+Istio构建DevOps流水线
基于k8s+Prometheus+Alertmanager+Grafana构建企业监控告警系统
k8s七层代理Ingress-nginx基于cookie、请求头、权重实现灰度发布
如何优化k8s网络插件?
每周好课推荐
目前有以下几个畅销和高口碑课程,在平台所有课程中排在第一:
(1)热销课->《Docker+K8S+Istio+k8s故障排查+DevOps+Openstack+Openshift+Python+监控+日志收集+Rancher》课程折上折,现在双折扣---->点此立即学习>>https://edu.51cto.com/surl=vGfJG2
(2)福利课->Kubernetes管理员认证 (CKA)购课链接--->
课程地址:https://edu.51cto.com/course/28751.html
(3)安全课->Kubernetes安全专家认证
【零基础入门】K8S CKS认证考试培训 +k8s安全+k8s运维-->
购课链接--->https://edu.51cto.com/topic/5206.html
点击阅读原文 | 了解更多