网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 软件工程 > 其他技术区 > Kubernetes >

K8s进阶之修改Service的NodePort的端口范围

时间:2025-05-17 22:08

人气:

作者:admin

标签:

导读:概述 Kubernetes 默认的NodePort端口范围为 30000~32767。 NodePort端口范围为什么是30000~32767呢? 避免与系统保留端口冲突 知名端口(0~1023) 这些端口通常分配给 HTTP(80)、HTTPS(443)、SSH(...

概述

Kubernetes 默认的NodePort端口范围为 30000~32767。

NodePort端口范围为什么是30000~32767呢?

  • 避免与系统保留端口冲突

    • 知名端口(0~1023)
      这些端口通常分配给 HTTP(80)、HTTPS(443)、SSH(22)等系统服务或标准协议,Kubernetes 不会占用。

    • 注册端口(1024~49151)
      1024~49151 端口用于动态分配给用户进程或应用程序(如 Docker 容器、数据库等)。
      若 Kubernetes 使用此范围,可能与集群内其他应用的端口冲突(例如用户手动指定端口的容器)。

    • 临时端口(49152~65535)
      该范围用于临时端口(客户端动态请求的端口),但 Kubernetes 选择了其中较高的一段(30000~32767),既避免与临时端口大量重叠,又留出了足够的端口空间。

  • 端口数量与实用性平衡

    • 范围大小:30000~32767共包含 2768 个端口,足够满足中小型集群的服务暴露需求(每个服务需要一个 NodePort)。

    • 端口连续性:连续的端口范围便于管理和监控,例如通过防火墙规则一次性开放整个区间。

  • 历史原因与社区惯例

    • Kubernetes 早期版本参考了云服务商的习惯(如 AWS ELB 默认使用高位端口),逐渐形成了这一默认配置。

    • 社区实践中,高位端口(如 30000+)通常用于非标准服务,避免与常见应用(如 Web 服务器、数据库)的端口混淆。

  • 与其他技术的兼容性

    • Docker 宿主机端口:Docker 默认使用32768~61000等高位端口映射(如-p 32768:80),Kubernetes 的30000~32767范围与之略有重叠,但通过合理规划可避免冲突。

    • 云服务商限制:部分云厂商(如早期的 GCE)对节点端口有限制,30000 + 范围在多数环境中可正常使用。

  • 为什么不是更大的范围?

    • 端口耗尽风险:虽然 65535 是 TCP/UDP 端口的上限,但预留部分端口给其他服务(如运维工具、监控代理)更为合理。
    • 用户习惯:过大的范围可能导致端口分配混乱,固定范围更便于用户记忆和管理。

测试,当NodePort不在默认范围之内会怎么样呢?

[root@master01 ~/service]# cat service-nodeport.yaml
apiVersion: v1
kind: Service
metadata:
  namespace: default
  name: tomcat-svc-nodeport
spec:
  type: NodePort
  selector:
    app: tomcat
  ports:
  - name: nodeport-tomcat
    # 访问service的端口
    port: 16789
    # 容器的端口
    targetPort: 8080
    # 定义nodePort的端口为80,默认为30000-32767
    nodePort: 80
    protocol: TCP

# 创建service,这里提示我们端口范围要在30000-32767之间
[root@master01 ~/service]# kubectl apply -f service-nodeport.yaml
The Service "tomcat-svc-nodeport" is invalid: spec.ports[0].nodePort: Invalid value: 80: provided port is not in the valid range. The range of valid ports is 30000-32767

修改nodePort的端口范围

Kubernetes 默认的NodePort端口范围为 30000~32767。
该范围由 Kubernetes 的配置参数 --service-node-port-range 控制(通常在 API Server 启动时设置),该配置参数通常在
/etc/kubernetes/manifests/kube-apiserver.yaml文件中添加或修改。

修改kube-apiserver.yaml文件

master节点修改

vim /etc/kubernetes/manifests/kube-apiserver.yaml

 ...
 spec:
  containers:
  - command:
    - kube-apiserver
    - --service-node-port-range=1-50000  # 进行添加这一行即可
    ...

image
修改完之后保存该文件,保存之后Kubernetes 会自动重启 API Server 使配置生效。

验证配置是否生效

方式一:

[root@master01 ~/service]# ps -ef | grep kube-apiserve
root     1637652 1637630 24 23:16 ?        00:00:06 kube-apiserver --service-node-port-range=1-50000 --advertise-address=10.0.0.30...

方式二:

[root@master01 ~/service]# kubectl get pods -n kube-system -l component=kube-apiserver -o jsonpath='{.items[0].spec.containers[0].command}'
["kube-apiserver","--service-node-port-range=1-50000","--advertise-address=10.0.0.30",...

创建service进行测试

[root@master01 ~/service]# cat service-nodeport.yaml
apiVersion: v1
kind: Service
metadata:
  namespace: default
  name: tomcat-svc-nodeport
spec:
  type: NodePort
  selector:
    app: tomcat
  ports:
  - name: nodeport-tomcat
    # 访问service的端口
    port: 16789
    # 容器的端口
    targetPort: 8080
    # 定义nodePort的端口为80,默认为30000-32767
    nodePort: 80
    protocol: TCP

# 对应的80端口
[root@master01 ~/service]# kubectl apply -f service-nodeport.yaml
service/tomcat-svc-nodeport created
[root@master01 ~/service]# kubectl get svc tomcat-svc-nodeport
NAME                  TYPE       CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
tomcat-svc-nodeport   NodePort   10.96.0.191   <none>        16789:80/TCP   9s

本文来自博客园,作者:huangSir-devops,转载请注明原文链接:https://www.cnblogs.com/huangSir-devops/p/18880778,微信Vac6666666,欢迎交流

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信