为啥k8s Nodeport需要做SNAT

k8s nodeport是k8s提供的对外负载均衡,他会在每个Node上面监听一个端口,如果有流量访问的这个端口,则会被转发到Service后端Endpoint中。

但这里有个小细节:如果Pod并非在本Node上,那么Nodeport就需要把流量转发其它Node上面,譬如下图,客户IP: 1.2.3.4,访问Node 10.0.0.1 的nodeport,但服务后端Pod在 Node 10.0.0.2上,那么请求将会转发到10.0.0.2上。

为啥k8s Nodeport需要做SNAT

如果是Node 10.0.0.1上的Nodeport 直接把流量转到10.0.0.2上,那么Pod看到的源IP地址就是client 1.2.3.4这个IP,pod处理完数据将直接向client返回网络报文。这就导致了”三角流量“。客户端会很懵逼,我明明请求的是10.0.0.1这个IP,然后返回的IP却是从Node 10.0.0.2,即便是三次握手也无法完成,更不谈后面的数据传输了。

所以Nodeport转发的时候,会在Node 10.0.0.1的上面会做SNAT,将数据包的源IP改为10.0.0.1,然后转发到Node 10.0.0.2上,那么等Pod看到客户端IP就是10.0.0.1,等处理完数据返回的时候,也是先经过Node 10.0.0.1后再返回客户端,那么客户端看到源IP地址就和之前发出的目的IP保持一致,可以正常通信了。

展开阅读全文

页面更新:2024-04-19

标签:目的   报文   下图   数据传输   端口   客户端   流量   细节   客户   地址   数据   科技   网络

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top