假设一个集群中有两个节点。
Node A有一个豆荚的一个副本,Node B有两个副本。根据Google工程师的这个谈话(带有时间标签的YouTube视频),一个被路由到Node A的请求可能会被位于Node A内部的iptables重新路由到Node B。关于这种行为,我有几个问题:
iptables of Node A所知道的关于它外面的豆荚复制品的信息是什么?它怎么知道把交通送到哪里?iptables of Node B会将这个请求重新发送给Node C吗?如果是,那么出口流量会返回到Node B -> Node A ->客户端吗?发布于 2020-02-17 20:47:47
我想你可能把两个子系统,服务代理和CNI混为一谈。CNI是第一位的,它是一个基于插件的系统,它在所有节点之间设置路由规则,这样网络就显得平坦了。从任何节点上看,pod IP的工作方式都是正常的。这种情况的发生方式因插件而异,Calico在节点之间使用BGP。然后是服务代理,通常使用iptables实现,不过也有点可插拔。定义了服务IP ->端点IP (读: pod )负载平衡。但是实际的路由是由您的CNI插件设置的任何处理。有很多特殊的模式和案例,但这是基本的概述。
发布于 2020-02-17 22:07:53
在到达最终目的地之前,数据包可以在节点、服务和豆荚之间移动。
在kubernetes中,集群内的所有路由(节点到节点、吊舱到吊舱、服务到服务、服务到服务、服务到终端、吊舱到节点、节点到吊舱等)都是通过以下方式完成的:
k8s中的数据包路由也依赖于集群中的负载、每个节点的负载、亲和/反亲和规则、nodeSelectors、污染/容忍、自动标度、荚副本的数量等。
集群内路由对于路由器是透明的,而且理想情况下,除非存在需要调试的网络问题,否则用户不需要知道它。
在任何sudo iptables -L -n -v节点上执行k8s显示了用于数据包转发的低级iptables规则和链。
https://stackoverflow.com/questions/60259525
复制相似问题