【问题标题】:How does Kubernetes NodePort networking work on multi node cluster?Kubernetes NodePort 网络如何在多节点集群上工作?
【发布时间】:2020-04-29 00:17:09
【问题描述】:

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

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

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

【问题讨论】:

    标签: networking kubernetes


    【解决方案1】:

    数据包在节点 1 进行了源 NAT。 Node1 将源 IP 替换为其 IP 和目标 IP 作为 pod IP。 Pod 的回复被发送到 Node1,Node1 将其发送回客户端。

    From the docs:

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

    • 客户端发送数据包到node2:nodePort
    • node2替换源IP 数据包中的地址 (SNAT) 具有自己的 IP 地址
    • node2 替换 带有 pod IP 的数据包上的目标 IP
    • 数据包被路由到 节点1,然后到端点
    • pod 的回复被路由回 节点2
    • pod 的回复被发送回客户端
               client
                 \ ^
                  \ \
                   v \
       node 1 <--- node 2
        | ^   SNAT
        | |   --->
        v |
     endpoint
    

    【讨论】:

    • 感谢您的回答,但在这种情况下,Node1(没有 Pod 的那个)需要打开一个端口来发送数据包,对吗?是不是端口数不够打开连接数?
    • 来自我的问题(没有 pod 并将数据包发送到 Node2 的 pod)
    • 为每个连接打开一个端口不是问题吗?我的意思是所有连接都有足够的端口吗?
    • 除非您从 node1 到同一个 pod 建立 65535 个连接,否则我认为不会有任何问题。请记住,连接由(协议、源 ip、源端口、目标 ip、目标端口)唯一标识。因此 node1 将能够与每个 pod 建立 65K 连接。
    猜你喜欢
    • 2013-04-24
    • 2021-06-22
    • 1970-01-01
    • 2018-12-23
    • 2019-04-24
    • 2018-12-19
    • 1970-01-01
    • 2019-05-12
    • 2023-03-12
    相关资源
    最近更新 更多