You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

K8s LoadBalancer服务为何可通过port访问却无法通过nodePort访问

问题根因

你的配置本身没有语法错误,访问异常来自于对LoadBalancer类型Service不同端口作用范围的理解偏差,三个端口的生效边界如下:

  • port: 8080:是外部负载均衡实例(即输出中<my_pub_IP>对应的公网LB)的监听端口,所有发往该公网IP:8080的流量会被LB转发至集群内部,这也是你访问该地址能正常连通的原因。
  • nodePort: 30001:是Kubernetes在所有集群节点(Node)本地开放的端口,仅绑定节点自身的IP(节点内网IP、节点自身绑定的公网IP),和LB分配的独立公网IP没有关系。
  • targetPort: 80:是Pod内Nginx容器实际监听的端口,所有到达Service的流量最终都会转发到Pod的这个端口。

你访问的<my_pub_IP>是负载均衡器的独立虚拟IP,不是集群节点的公网IP,该LB默认仅监听port字段指定的8080端口,不会监听30001端口,因此访问<my_pub_IP>:30001必然无法连通。

验证与使用方式

如果要验证nodePort配置是否正常,按以下步骤操作即可:

  1. 执行命令获取集群节点IP列表:
kubectl get nodes -o wide
  1. 从输出中获取任意节点的INTERNAL-IP(内网访问场景)或节点自身绑定的公网IP(公网访问场景)
  2. 确认节点对应安全组/本地防火墙已放开30001端口的TCP入站规则,访问<节点IP>:30001即可正常打开Nginx页面。
补充配置说明

LoadBalancer类型Service是NodePort类型的上层扩展:集群会先为Service分配NodePort,在所有节点上开放该端口,再额外创建外部负载均衡实例,将LB的监听端口(即port字段)映射到对应NodePort,最终由kube-proxy完成到后端Pod的流量转发。
如果你希望通过LB的公网IP用30001端口访问服务,直接将Service配置中的port字段值从8080改为30001即可,LB会自动将监听端口调整为30001。

内容的提问来源于stack exchange,提问作者Ubaid Ilyas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 15:51:19