描述问题
创建 service,指定网络类型是 ClusterIP:
kubectl expose deploy nginx --name=svc-nginx --type=ClusterIP --port=80 --target-port=80 -n test2
通过 service 的IP访问对应的 pod,延迟1分钟左右才有响应:
curl 10.108.69.169:80
原因
flannel网络设置将发送端的checksum打开了,但是flannel想利用了Checksum offloading的机制,自己不计算checksum,想留给网卡硬件来计算,这样的目的是不消耗CPU,利用网卡硬件分担CPU消耗,这原本是没问题的,但是flannel下层还有个ens33,这个ens33才是真的NIC,但是对ens33来说,从flannel发过来的是属于报文,ens33是否会对上层协议报文进行校验,然后将值填写到udp层报文内容去呢?这个我感觉不会,如果会的话,还要再了解下flannel的虚拟网络及硬件网卡之间的offloadinig机制。
解决
在 master、node 每台服务器上执行下面命令:
ethtool -K flannel.1 tx-checksum-ip-generic off
参考:
https://blog.csdn.net/xujiamin0022016/article/details/114457746