Kubernetes NodePort 网络如何在多节点集群上工作?

Hov*_*yan 4 networking kubernetes

我是 kubernetes 的新手,我试图了解当 NodePort 向外界公开端口时 kubernetes 网络是如何工作的。

假设我们的 kubernetes 集群中有两个节点,分别称为 Node1 和 Node2。我们在 Node2 上部署了一个 pod。

然后我们为这个 Pod 创建一个 NodePort 服务。为了简单起见,我们假设所有端口(targetPort、nodePort、port)都是 3000。现在,一个数据包到达 Node1 的端口 3000(没有部署 pod)。据我了解,iptables 规则规定该数据包将发送到 Node2 上的 pod。我的问题是 pod 收到数据包时看到的 IP 是什么,以及它的响应数据包如何从外界返回到我们的初始客户端。

Sha*_*k V 5

数据包在 Node1 处进行源 NAT。Node1将源IP替换为自己的IP,目标IP替换为Pod IP。Pod 的回复被发送到 Node1,然后 Node1 将其发送回客户端。

\n\n

来自文档:

\n\n

(在文档中,pod 在节点 1 上运行,节点 2 是从客户端接收数据包的节点。)

\n\n
\n
    \n
  • 客户端发送数据包到node2:nodePort
  • \n
  • node2 将数据包中的源 IP 地址 (SNAT) 替换为自己的 IP 地址
  • \n
  • node2 将数据包上的目标 IP 替换为 Pod IP
  • \n
  • 数据包被路由到节点 1,然后路由到端点
  • \n
  • pod\xe2\x80\x99s 回复被路由回\n node2
  • \n
  • pod\xe2\x80\x99s 回复被发送回客户端
  • \n
\n
\n\n
           client\n             \\ ^\n              \\ \\\n               v \\\n   node 1 <--- node 2\n    | ^   SNAT\n    | |   --->\n    v |\n endpoint\n
Run Code Online (Sandbox Code Playgroud)\n