在 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 配置文件
-
應用修改:移動資源清單觸發重啟
📌 建議根據實際情況合理設定端口范圍,避免與系統服務沖突。