kube-ovn net/http TLS handshake timeout

问题现象

业务报错net/http: TLS handshake timeout。
容器IP跨节点访问kube-apiserver service clusterIP不通。

问题分析

k ko trace [ns]/[pod] [ip] tcp 443 | grep 对端主机ip

kube-ovn在br-int网桥上刷流表实现了kube-proxy的dnat功能。
kube-ovn监听service的endpoints,像kube-proxy一样感知变化。

设置ovs端口ovn0 mtu方法

ovs-vsctl set Interface ovn0 mtu_request=1460

mtu设置在ip层,内核不考虑数据链路层的以太网头14字节。

2个主机网口mtu都是1500。
容器网卡和ovn0口mtu最大是1442,1443以上就不行了。
关闭kube-apiserver所在宿主机网口和ovn0口的gso和tso。
容器网卡和ovn0口mtu 1442场景mss是1402
kube-apiserver所在宿主机网口抓包

大包1514字节-以太网头14字节=1500字节,可以通过主机网口。
容器网卡和ovn0口mtu 1443场景mss是1403
kube-apiserver所在宿主机ovn0口抓包
大包1457字节+udp geneve封装58字节-以太网头14字节=1501字节,无法通过主机网口,因为设置不可分片,所以直接丢弃。

udp geneve封装58字节=内层以太网头14字节+geneve头16字节+udp头8字节+ip头20字节
geneve报文能否满足Linux内核网卡mtu,看内层大小+58。

kube-ovn中设置mtu是靠ovn-cni的启动参数mtu。
ds ovn-cni走主机网络,修改启动参数mtu会触发滚动更新,只有新cni流程才会生效。

解决方法

容器网卡和ovn0口mtu从1460恢复成默认的1400,至少在1442以下。

posted on 2024-10-05 23:45  王景迁  阅读(21)  评论(0编辑  收藏  举报

导航