修改 K8S Service 资源类型 NodePort 的端口范围

在 Kubernetes 中,Service 类型为 NodePort 时,默认分配的端口范围为 30000~32767。如果你希望使用自定义端口(如 8080、8888 等),就需要修改 kube-apiserver 的默认配置。

本文将详细介绍如何修改 Kubernetes 中 NodePort 的端口范围,并提供完整的实战操作步骤。

一、背景说明

默认情况下,Kubernetes 的 NodePort 服务只能绑定在 30000~32767 之间的端口。这是出于安全与冲突考虑设定的默认值。但在实际业务中,我们常常需要开放特定端口(如 8080、8088、8888 等)供外部访问。

若尝试直接指定非默认端口,会出现如下错误:

bash 复制代码
The Service "svc-xiuxian-nodeport" is invalid:
spec.ports[0].nodePort: Invalid value: 8080: provided port is not in the valid range.

二、修改 NodePort 端口范围

1. 修改 kube-apiserver 配置

编辑 kube-apiserver.yaml,路径一般为 /etc/kubernetes/manifests/kube-apiserver.yaml

bash 复制代码
spec:
  containers:
  - command:
    - kube-apiserver
    - --service-node-port-range=1-50000  # 添加或修改此行

✅ 建议将端口范围扩大到常用的 1-50000,避免占用过小或过大端口。

2. 热重载 kube-apiserver

因为 kube-apiserver 是以 static Pod 运行的,我们只需移动资源清单文件触发重建:

bash 复制代码
# 进入 kube-apiserver 配置目录
cd /etc/kubernetes/manifests

# 暂时移出配置文件
mv kube-apiserver.yaml /opt/

# 再移回来以触发重建
mv /opt/kube-apiserver.yaml ./

3. 确认 apiserver 重启生效

bash 复制代码
kubectl get pods -n kube-system -l tier=control-plane -o wide

输出类似:

bash 复制代码
kube-apiserver-master231  1/1   Running   0     57s

表示已经重新启动。

三、验证配置是否生效

我们创建一个 NodePort 类型的 Service,并指定 8080 端口:

1. Service YAML 文件

bash 复制代码
apiVersion: v1
kind: Service
metadata:
  name: svc-xiuxian-nodeport
  labels:
    apps: xiuxian
spec:
  type: NodePort
  ports:
  - port: 90
    targetPort: 80
    protocol: TCP
    nodePort: 8080
  selector:
    version: v1

2. 应用配置并验证

bash 复制代码
kubectl apply -f 02-svc-NodePort-xiuxian.yaml
kubectl get svc svc-xiuxian-nodeport

输出:
NAME                   TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)       AGE
svc-xiuxian-nodeport   NodePort   10.200.21.38    <none>        90:8080/TCP   23h

✅ 成功使用 8080 作为 NodePort 端口!

四、总结

通过修改 kube-apiserver 的参数 --service-node-port-range,我们可以灵活自定义 NodePort 的端口范围,满足实际业务需求。

  • 默认范围:30000~32767

  • 修改方式:编辑 kube-apiserver 配置文件

  • 应用修改:移动资源清单触发重启

📌 建议根据实际情况合理设定端口范围,避免与系统服务冲突。

相关推荐
分布式存储与RustFS17 小时前
给 Kubernetes 找一个对象存储后端:RustFS Helm 部署 + 应用接入实录
云原生·kubernetes·开源·对象存储·分布式存储·s3·rustfs
IT大白鼠18 小时前
容器安全入门:K8s常见基础安全风险通俗解读
安全·容器·kubernetes
伞伞悦读18 小时前
Docker 安装 MinIO 完整教程(新手友好版)
docker·容器·eureka
Lethehong19 小时前
把Blinko放进极空间:Docker 部署自托管笔记,并实现多设备远程访问
笔记·docker·容器
ltl1 天前
CoreDNS 深度拆解:ndots、search domain 与那些坑人的 DNS
kubernetes
摇滚侠1 天前
《Docker技术入门与实战 第4版》阅读笔记 2 Docker 镜像
笔记·docker·容器
阿里云云原生1 天前
还在给 AI “喂冷饭”?8.28 上海沙龙:带你跨越 AI 实时上下文鸿沟
云原生·kafka
ly76891 天前
Docker 从入门到实践:镜像、容器、Dockerfile 与 Docker Compose 详解
运维·docker·容器
有脚就行2 天前
第33篇-KServe推理平台-标准化的K8s推理服务管理
人工智能·云原生·容器·kubernetes
名字还没想好☜2 天前
Kubernetes StatefulSet 实战:为什么数据库不能用 Deployment 部署
数据库·云原生·容器·kubernetes·statefulset