首页/云/云与容器速查/NodePort 节点端口暴露
Kubernetes68 条

NodePort 节点端口暴露

在每个节点的高位端口(默认 30000-32767)上开放 Service:外部用 节点IP:NodePort 访问;适合测试与无 LB 环境,固定端口可能冲突且安全组要单独放行。

云与容器速查云更新于 2026-10-13

NodePort 的暴露方式

NodePort 在每个节点的高位端口(默认 30000-32767)上开放 Service,外部通过任意节点 IP 加该端口访问,kube-proxy 负责把流量转发到后端 Pod。它的好处是不依赖负载均衡器,任何集群都能用;代价是入口地址随节点变化、端口固定容易冲突、云上还要单独放行安全组,因此更适合测试联调与应急入口。

基本信息

端口范围默认 30000-32767,可显式指定 nodePort,也可交给系统分配
访问方式任意节点 IP + NodePort,由 kube-proxy 转发到后端 Pod
externalTrafficPolicyCluster 默认可跨节点转发但会 SNAT;Local 保留客户端源 IP,仅本节点有后端时转发
外部依赖云安全组与主机防火墙需放行该端口范围
适用场景临时对外、开发联调;生产建议经 Ingress 或负载均衡
健康检查注意Local 策略下无后端的节点健康检查会失败,LB 需按节点维度处理

典型使用场景

  • 没有负载均衡器的自建集群,需要临时把服务暴露给外网
  • 开发联调阶段直接把地址和端口给测试同学,省去域名与证书配置
  • 负载均衡或 Ingress 不可用时的应急入口
  • Ingress Controller 的 Service 常用 NodePort 形态接入外部流量
  • 内部工具与监控面板的固定入口,配合安全组限制来源网段

NodePort 示例

NodePort 示例
apiVersion: v1
kind: Service
metadata:
  name: web-np
spec:
  type: NodePort
  externalTrafficPolicy: Cluster   # 改为 Local 可保留客户端源 IP
  selector:
    app: web
  ports:
    - port: 80                     # Service 在集群内的端口
      targetPort: 8080             # 容器实际监听的端口
      nodePort: 30080              # 节点暴露端口,留空则由系统分配

查看服务的字段读法

字段含义异常表现
TYPE服务类型,NodePort 会显示端口映射仍为 ClusterIP 说明类型修改未生效
PORT(S)形如 80:30080/TCP,冒号后为节点端口无数字说明由系统分配,需另查实际值
EXTERNAL-IPNodePort 类型通常为空,访问用节点 IP显示 pending 属于 LoadBalancer 未就绪的表现
Endpointsdescribe 中的后端地址列表为空说明 selector 不匹配或 Pod 未就绪
externalTrafficPolicyCluster 或 Local为 Local 时无 Pod 的节点访问会失败
NodePort 直接暴露节点端口:安全组放开后等于对全网开放,记得限制来源网段或叠加网络策略。需要长期对外时优先走 Ingress 或负载均衡,把 TLS 与限流统一在入口层处理。
源 IP 的取舍:externalTrafficPolicy=Cluster 会做 SNAT,后端看到的源 IP 是节点地址,按真实 IP 做限流与审计会失效;Local 能保留源 IP,但只有本节点存在后端时才转发,负载均衡效果与探活表现都要按节点维度重新验证。

易错点

  • nodePort 指定到冲突端口:创建失败,或与既有服务抢占同一端口导致一侧异常
  • externalTrafficPolicy=Local 后部分节点无后端:探活失败与访问不通需要按节点逐个排查,容易误判为服务整体故障
  • 安全组只放行部分节点:用户访问到未放行的节点时连接超时,表现为间歇性不可用
  • 把 NodePort 当长期生产入口:节点扩缩容或 IP 变化后入口失效,且缺少统一 TLS 与路由能力

数据来源与参考

  • Kubernetes Docs:Service(NodePort)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌