k8s 的 pod 选择 NodePort
假设我有 10 个 node,但是这个 pod 的 NodePort 选择 6000 端口,并且这个 pod 实例只有 1 份。
这个时候,是不是 10 个 node 上的 6000 端口都会被占用呢?还是说只有跑 pod 的这个 node 的 6000 端口才会被占用呢?
chatGPT 给我的答案自相矛盾
k8s 的 pod 选择 NodePort
假设我有 10 个 node,但是这个 pod 的 NodePort 选择 6000 端口,并且这个 pod 实例只有 1 份。
这个时候,是不是 10 个 node 上的 6000 端口都会被占用呢?还是说只有跑 pod 的这个 node 的 6000 端口才会被占用呢?
chatGPT 给我的答案自相矛盾
chatgpt给的答案并没有自相矛盾
第一段说的是单独运行Pod,在Pod只有一个容器的情况下,会被调度到一个节点上,如果pod有做映射端口的操作,那么就会在运行这个Pod的Node上监听端口,这个端口只在这个Node上监听,在其它节点上不会被监听。
第二段是使用的是Service暴露Pod的端口,如果是使用service暴露端口,会在所有的node上监听相同的端口。
nodePod 指的是 pod 在 node 上以 ip:port 的方式去暴露服务,你可以把 pod 看做服务,node 是载体,只有 node 上有运行 6000 端口的 pod,此端口才会被占用,如果没运行,自然不会被占用。你有 10 个 node,但只运行了 5 个 pod 副本,则会有 5 个 node 的 6000 被占用,5 个 node 的不会被占用。
2 回答3k 阅读✓ 已解决
2 回答1.6k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
851 阅读
1 回答440 阅读
每个节点都会监听该端口,因为如果没有指定节点,kubernetes会对pod进行调度,也就是说谁也不知道会调度到哪个节点上,如果只在调度的节点上监听,对负载程序来说根本没法配置,所以kubernetes会在所有节点上开启监听,只需将请求负载到所有节点,kubernetes内部进行二次调度。