k8s 的 NodePort 会影响所有 node 吗?

2023-06-27 380 0

k8s 的 pod 选择 NodePort

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

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

chatGPT 给我的答案自相矛盾

图片.png

每个节点都会监听该端口,因为如果没有指定节点,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 的不会被占用。

回答

相关文章

nuxt2部署静态化和ssr的时候访问首页先报404再出现首页为什么?
`clip-path` 如何绘制圆角平行四边形呢?
多线程wait方法报错?
VUE 绑定的方法如何直接使用外部函数?
vue2固定定位该怎么做?
谁有redis实现信号量的代码,希望借鉴一下?