在一个已经部署好的 Kubernetes 集群中,动态修改 NodePort 的端口范围需要修改 Kubernetes API Server 的启动参数,并重新启动 API Server。具体步骤如下:

1. 修改 Kubernetes API Server 配置

对于基于 kubeadm 部署的集群,API Server 的配置文件通常位于 /etc/kubernetes/manifests/kube-apiserver.yaml 中。这是一个静态 Pod 配置文件。

  • 使用 kubectl 或 SSH 连接到控制节点。
  • 打开 /etc/kubernetes/manifests/kube-apiserver.yaml 文件。
    sudo vi /etc/kubernetes/manifests/kube-apiserver.yaml

  • 找到 commandargs 部分,添加或修改 --service-node-port-range 参数。例如,要将范围修改为 1-65535,可以添加以下内容:
- --service-node-port-range=1-65535

例如:
containers:
- command:
- kube-apiserver
- --advertise-address=192.168.0.1
- --allow-privileged=true
- --service-node-port-range=20000-40000
# ... 其他参数

2. 保存并退出编辑

保存文件并退出编辑器。

3. Kubernetes API Server 自动重启

由于 /etc/kubernetes/manifests/kube-apiserver.yaml 是一个静态 Pod 配置文件,修改后 Kubernetes 会自动检测到变更,并重新启动 API Server。你可以通过运行以下命令来验证 API Server 是否成功重启:

kubectl get pods -n kube-system | grep kube-apiserver

4. 验证更改

一旦 API Server 重新启动,你可以通过以下方式验证更改是否生效:

  • 创建一个 NodePort 类型的 Service,并检查其分配的端口号是否在新的范围内。
  • 使用以下命令检查 NodePort 范围:
kubectl get configmap -n kube-system kubeadm-config -o yaml | grep service-node-port-range

如果你使用其他工具(如 kopsrke 等)部署了 Kubernetes,则需要按照相应工具的方式修改 API Server 的配置。

注意: 动态修改 NodePort 范围会影响集群的服务暴露策略。建议在进行修改前确认所有相关服务的影响,并在生产环境中进行充分测试。