k8s 的 NodePort 会影响所有 node 吗?

k8s 的 pod 选择 NodePort

假设我有 10 个 node,但是这个 pod 的 NodePort 选择 6000 端口,并且这个 pod 实例只有 1 份。

这个时候,是不是 10 个 node 上的 6000 端口都会被占用呢?还是说只有跑 pod 的这个 node 的 6000 端口才会被占用呢?

chatGPT 给我的答案自相矛盾

图片.png

阅读 2.5k
3 个回答

每个节点都会监听该端口,因为如果没有指定节点,kubernetes会对pod进行调度,也就是说谁也不知道会调度到哪个节点上,如果只在调度的节点上监听,对负载程序来说根本没法配置,所以kubernetes会在所有节点上开启监听,只需将请求负载到所有节点,kubernetes内部进行二次调度。

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 的不会被占用。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏