首页/云/Kubernetes 速查/NodePort 端口范围与分配策略
网络与服务55 条

NodePort 端口范围与分配策略

默认范围 30000-32767,由 apiserver 参数控制;可指定固定 nodePort 也可自动分配,端口是集群级资源需要台账管理。

Kubernetes 速查云更新于 2026-10-13

节点端口是集群级资源

NodePort 型 Service 会在每个节点上开放同一个端口,外部流量从任意节点进入后被转发到后端 Pod。这个端口从集群配置的范围内分配,常见默认范围是 30000 到 32767,由 apiserver 参数控制。端口属于集群级资源:两个 Service 争抢同一端口时,后创建的会失败。因此固定端口要列入台账管理,外部防火墙与负载均衡的配置才能长期稳定。

基本信息

适用对象各版本的 NodePort 与 LoadBalancer 型 Service
默认范围30000 到 32767,由 apiserver 的端口范围参数控制
分配方式自动分配,或在清单中显式指定
固定端口用途便于防火墙白名单与外部负载均衡配置
查看方式控制面进程参数或 kubeadm 的 apiserver 清单文件

典型使用场景

  • 对外暴露服务:在没有云负载均衡的环境里用节点端口对外发布
  • 白名单配置:固定端口便于安全组与防火墙规则长期稳定
  • 外部负载均衡后端:把节点端口作为后端端口注册到硬件或软件 LB
  • 排障核对:确认端口是否在范围内、是否与其他服务冲突
  • 端口治理:建立端口分配台账,避免多个团队互相抢占

查看范围与固定端口

查看范围与固定端口
ps -ef | grep kube-apiserver | grep -o -- '--service-node-port-range=[0-9-]*'
# kubeadm 集群也可查看 /etc/kubernetes/manifests/kube-apiserver.yaml 中的参数
kubectl get svc -A -o custom-columns='NS:.metadata.namespace,NAME:.metadata.name,TYPE:.spec.type,NODEPORT:.spec.ports[*].nodePort'
kubectl get svc -A -o jsonpath='{range .items[*]}{.spec.ports[*].nodePort}{"\n"}{end}' | sort -n | uniq -d

固定端口示例

固定端口示例
apiVersion: v1
kind: Service
metadata:
  name: web-nodeport
  namespace: prod
spec:
  type: NodePort
  selector:
    app: web
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30443          # 必须在集群允许的范围内且未被占用

相关概念与注意点

概念说明注意
默认范围30000 到 32767可被集群参数修改,以实际配置为准
指定端口在清单里写 nodePort必须在范围内且未被占用
端口冲突两个 Service 用同一端口后创建的失败
范围调整属于控制面变更需重启 apiserver 相关组件生效
固定端口通常比自动分配更好管理:外部防火墙与负载均衡的配置不必随端口变化调整,故障恢复时路径也更可预期。
范围被修改过的老集群要按实际配置判断:拿默认值去推断可用端口,会得到与集群行为不符的结论。

易错点

  • 指定范围之外的端口:创建直接被校验拒绝,报错文本里会说明允许范围
  • 依赖自动分配的端口做防火墙配置:端口变化后外部访问中断且不易回溯原因
  • 缺少端口台账:多个团队先后占用同一端口,冲突往往在发布时才暴露
  • 不清楚集群范围已被调整:按默认区间评估可用性,结论与实际不符

数据来源与参考

  • Kubernetes 官方文档 · Service(nodePort 范围)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌