当前位置: 首页 > 知识库问答 >
问题:

go - 为什么NodePort类型的service在 node节点上 netstat看不到其nodeport端口?

淳于玺
2024-04-23

image.png
image.png
NodePort类型的service 的nodePort为31002

apiVersion: v1kind: Servicemetadata:  name: tomcat-servicespec: type: NodePort ports:  - port: 8080    nodePort: 31002 selector:    tier: frontend

问题: 虽然curl localhost:31002 能返回html数据,但是为什么 netstat -tlp |grep 31002 没有数据?

共有2个答案

郏志诚
2024-04-23

这个端口是通过 iptable 规则转发到实际的服务 pod ip/端口 上去的,并没有一个进程在这个端口上监听。所以 netstat 自然就看不到。

戚令秋
2024-04-23

NodePort 是 Kubernetes 的一种 Service 类型,它允许你将 Service 暴露到集群外部的节点上,通过指定的 NodePort 来访问这个 Service。但是,NodePort 并不是在节点上运行的一个实际的服务进程,因此你无法直接使用 netstat 命令在节点上看到它。

实际上,当你创建一个 NodePort 类型的 Service 时,Kubernetes 会在每个节点上配置 iptables 规则,将这些流量转发到 Service 的 ClusterIP 和端口上。因此,当你尝试通过 curl localhost:31002 访问 NodePort 时,你实际上是在访问节点的 IP 地址和 NodePort,然后由 iptables 规则将流量转发到 Service 的 ClusterIP 和端口上。

由于 NodePort 并不是在节点上运行的一个实际的服务进程,因此 netstat 命令无法显示它。要查看 iptables 规则,你可以使用 iptables -t nat -L 命令。你应该能够看到一条规则,它将流量从 NodePort 转发到 Service 的 ClusterIP 和端口上。

总之,虽然你可以通过 NodePort 访问 Kubernetes Service,但它并不是在节点上运行的一个实际的服务进程,因此你无法在节点上使用 netstat 命令看到它。

 类似资料:
  • 我正在尝试运行一个3节点的Kubernetes集群。我已经启动并充分运行了集群,使得服务可以在不同的节点上运行。不幸的是,我似乎无法让基于NodePort的服务正确工作(就我所理解的正确性而言……)。我的问题是,我定义的任何NodePort服务都只能在其pod运行的节点上外部可用,我的理解是,它们应该在集群中的任何节点上外部可用。 一个例子是本地Jira服务,它应该在端口8082(内部)上运行,在

  • 假设我有4个部署文件,为此我有一个组合的服务文件,它将为所有4个服务创建服务对象(deployment.yaml)。现在我只想公开1个service pod作为NodePort服务,为此我定义了NodePort以及端口和目标端口。对于其余的3个服务,我只定义了端口和目标端口,而没有定义节点端口。问题是,在这种情况下,K8主机是否为未定义节点的3个服务的其馀部分分配了一些随机节点?service.y

  • 1-我正在阅读文档,我对措辞有点困惑。上面写着: 集群IP:在集群内部IP上公开服务。选择此值将使服务只能从集群内访问。这是默认的ServiceType NodePort:在每个节点的IP上的一个静态端口(NodePort)上公开服务。节点端口服务将路由到的集群IP服务将自动创建。您可以通过请求从集群外部联系NodePort服务。 LoadBalancer:使用云提供商的负载均衡器对外公开服务。外

  • 问题内容: 有没有办法在kubernetes服务YAML定义中指定自定义 NodePort 端口?我需要能够在配置文件中显式定义端口。 问题答案: 您可以在部署中设置类型。请注意,为您的API服务器配置了一个选项(默认为)。您还可以通过设置对象下的属性来专门指定该范围内的端口,否则系统将为您选择该范围内的端口。 因此,带有指定的示例如下所示: 有关NodePort的更多信息,请参阅此文档。有关配置

  • 在AWS EKS上,我有ALB入口控制器,入口资源指向端口32509上的NodePort服务,目标端口80,服务上有。 在这种情况下,外部流量如何在NodePort服务下路由到我的pod? 类似于,ALB

  • k8s 的 pod 选择 NodePort 假设我有 10 个 node,但是这个 pod 的 NodePort 选择 6000 端口,并且这个 pod 实例只有 1 份。 这个时候,是不是 10 个 node 上的 6000 端口都会被占用呢?还是说只有跑 pod 的这个 node 的 6000 端口才会被占用呢? chatGPT 给我的答案自相矛盾