欢迎大家来到IT世界,在知识的湖畔探索吧!
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上。
欢迎大家来到IT世界,在知识的湖畔探索吧!
如果是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保持一致,可以正常通信了。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/100370.html