在 Kubernetes 中,Service 类型为 NodePort 时,默认分配的端口范围为 30000~32767。如果你希望使用自定义端口(如 8080、8888 等),就需要修改 kube-apiserver 的默认配置。
本文将详细介绍如何修改 Kubernetes 中 NodePort 的端口范围,并提供完整的实战操作步骤。
一、背景说明
默认情况下,Kubernetes 的 NodePort 服务只能绑定在 30000~32767 之间的端口。这是出于安全与冲突考虑设定的默认值。但在实际业务中,我们常常需要开放特定端口(如 8080、8088、8888 等)供外部访问。
若尝试直接指定非默认端口,会出现如下错误:
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
:
spec:containers:- command:- kube-apiserver- --service-node-port-range=1-50000 # 添加或修改此行
✅ 建议将端口范围扩大到常用的 1-50000,避免占用过小或过大端口。
2. 热重载 kube-apiserver
因为 kube-apiserver 是以 static Pod 运行的,我们只需移动资源清单文件触发重建:
# 进入 kube-apiserver 配置目录
cd /etc/kubernetes/manifests# 暂时移出配置文件
mv kube-apiserver.yaml /opt/# 再移回来以触发重建
mv /opt/kube-apiserver.yaml ./
3. 确认 apiserver 重启生效
kubectl get pods -n kube-system -l tier=control-plane -o wide
输出类似:
kube-apiserver-master231 1/1 Running 0 57s
表示已经重新启动。
三、验证配置是否生效
我们创建一个 NodePort 类型的 Service,并指定 8080
端口:
1. Service YAML 文件
apiVersion: v1
kind: Service
metadata:name: svc-xiuxian-nodeportlabels:apps: xiuxian
spec:type: NodePortports:- port: 90targetPort: 80protocol: TCPnodePort: 8080selector:version: v1
2. 应用配置并验证
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 配置文件
-
应用修改:移动资源清单触发重启
📌 建议根据实际情况合理设定端口范围,避免与系统服务冲突。