准确--Kubernetes 修改 NodePort 端口范围操作文档

Kubernetes 修改 NodePort 端口范围操作指南

1. 目的与背景

Kubernetes 默认的 NodePort 范围是 30000-32767。为了满足特定业务需求(如使用 10305 端口),需要手动调整 API Server 的启动参数,将允许的端口范围扩大。

2. 环境说明

  • K8s 版本:1.29.5
  • 部署方式:Kubeadm
  • 运行时:Containerd
  • 集群规模:1 Master + 3 Workers

3. 操作前置检查

在执行修改前,需确保新宿主机端口范围不会与现有系统服务冲突。

bash 复制代码
# 1. 检查目标端口 10305 是否被占用
netstat -ntlp | grep 10305

# 2. 扫描 10000-11000 段是否有重要服务
netstat -ntlp | grep -E ":10[0-9]{3}"

4. 关键:备份原始配置

严禁直接修改。 静态 Pod 的配置文件极其敏感,一旦缩进错误会导致整个集群 API 无法访问。

bash 复制代码
# 备份到 root 目录下,切勿留在 /etc/kubernetes/manifests/ 目录内
cp /etc/kubernetes/manifests/kube-apiserver.yaml /root/kube-apiserver.yaml.bak.$(date +%F)

5. 修改步骤

5.1 编辑配置文件

bash 复制代码
vi /etc/kubernetes/manifests/kube-apiserver.yaml

5.2 添加端口范围参数

在 spec.containers.command 列表下添加参数。确保缩进与上方参数完全对齐(通常为 4 个空格)。

yaml 复制代码
spec:
  containers:
  - command:
    - kube-apiserver
    - --advertise-address=192.168.205.36
    # --- 新增/修改此行 ---
    - --service-node-port-range=1-65535
    # --------------------
    - --allow-privileged=true
    - --authorization-mode=Node,RBAC
    # ... 其他参数保持不变

6. 强制配置生效(针对 1.29 版本)

由于 kubelet 对静态 Pod 的监控有时存在延迟,建议采用"位移法"强制触发 API Server 重启。

bash 复制代码
# 1. 移出配置文件(触发停止)
mv /etc/kubernetes/manifests/kube-apiserver.yaml /tmp/

# 2. 等待进程彻底消失
sleep 5
ps -ef | grep kube-apiserver | grep -v grep

# 3. 移回配置文件(触发启动)
mv /tmp/kube-apiserver.yaml /etc/kubernetes/manifests/

7. 验证配置

7.1 检查进程参数(最直接方法)

确认返回结果中包含你设置的新范围。

bash 复制代码
ps -ef | grep kube-apiserver | grep service-node-port-range

7.2 检查 Pod 运行状态

确保 API Server 已成功拉起并处于 Running 状态。

bash 复制代码
kubectl get pods -n kube-system -l component=kube-apiserver

8. 业务应用测试

编写 Service 资源文件并应用,验证是否不再报错。

yaml 复制代码
apiVersion: v1
kind: Service
metadata:
  name: dev-szjg-ddzr-jgc-pc-nodeport
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
    nodePort: 10305 # 现在可以使用 30000 以下的端口了
  selector:
    app: your-app-label

9. 风险防范与故障回滚

9.1 安全建议

  • 手动指定端口 :扩大范围后,请在 Service 中显式指定 nodePort。避免 K8s 随机分配到系统核心服务的端口(如 22, 443, 6443 等)。
  • 组件端口避让 :绝对不要占用 10248-10259 范围,这是 Kubelet 和其他组件的健康检查/指标端口。
  • 防火墙规则 :范围扩大后,需同步更新所有节点的 iptables 或 firewalld 策略。

9.2 故障回滚

如果修改后 kubectl 无法连接且 API Server 无法启动:

  1. 还原文件 :cp /root/kube-apiserver.yaml.bak.* /etc/kubernetes/manifests/kube-apiserver.yaml
  2. 强制拉起 :systemctl restart kubelet

相关推荐
做运维的阿瑞7 分钟前
利用GitHub配置镜像加速,解决 Docker镜像拉取问题
运维·docker·容器·github
小陈运维35 分钟前
使用kubeadm初始化IPV4/IPV6集群
linux·docker·云原生·容器·kubernetes
笑洋仟1 小时前
k8s的Ingress配置问题
云原生·容器·kubernetes
垚垚学技术_聚焦云原生1 小时前
K8s OpenEBS LVM 动态存储 PVC Pending 排查记
云原生·容器·kubernetes
m0_6464299710 小时前
Docker 完整核心知识点总结(超通俗易懂版)
运维·docker·容器
我不是阵雨13 小时前
微服务幂等性深度解剖
微服务·云原生·架构
吴声子夜歌13 小时前
Docker入门与实战——实战案例(Web服务与应用)
docker·容器
a59865214 小时前
Docker云手机搭建挂机环境,外网远程访问完整实操
docker·容器·智能手机·云手机
郭老二15 小时前
【docker】使用阿里云的容器镜像服务(ACR)构建自己的容器仓库
阿里云·docker·容器
code_slave(码畜)16 小时前
微服务架构落地:消息队列架构设计(上篇)——异步解耦、削峰填谷,看懂业务事件流转本质
spring boot·spring cloud·微服务·云原生·架构