You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行kubectl replace更新LoadBalancer服务时遇重复nodePort错误求助

问题解答:Kubernetes Service Replace 出现 duplicate nodePort 错误

错误原因

这个错误的核心是TCP 30054 端口被重复分配,具体有两种可能场景:

  1. 你最初创建的80端口Service,Kubernetes自动为其分配了NodePort 30054;当你添加443端口并执行kubectl replace时,K8s在重新处理Service配置时,尝试给443端口也分配30054(多因资源状态缓存或更新逻辑冲突导致),而同一个Service的两个端口不能共用NodePort,因此触发错误。
  2. 集群中存在其他Service或资源已经占用了30054这个NodePort,导致新的端口分配请求冲突。

解决方法

方法1:删除旧Service后重新创建

先清理原有Service,再重新部署新配置:

kubectl delete svc feature-branches
kubectl apply -f nginx-bot-proxy-loadbalancer.yaml

这种方式会让Kubernetes重新为两个端口自动分配不同的NodePort,彻底避免冲突。

方法2:手动指定不同的NodePort

在Service配置中明确为两个端口分配不同的NodePort(需确保端口在集群NodePort范围内,默认是30000-32767):

apiVersion: v1
kind: Service
metadata:
  name: feature-branches
spec:
  selector:
    app: nginx-proxy-bot
  ports:
    - port: 80
      targetPort: 80
      nodePort: 30054
    - port: 443
      targetPort: 443
      nodePort: 30055
  type: LoadBalancer

之后执行kubectl replace -f nginx-bot-proxy-loadbalancer.yaml即可。

方法3:检查并排除集群内端口占用

先查看当前Service的NodePort分配情况:

kubectl get svc feature-branches

再检查集群内所有Service的NodePort,确认30054是否被其他资源占用:

kubectl get svc --all-namespaces -o jsonpath='{range .items[*]}{.metadata.namespace}/{.metadata.name}{"\t"}{.spec.ports[*].nodePort}{"\n"}' | grep 30054

如果发现其他Service占用了该端口,可调整对应Service的端口,或为当前Service的443端口指定未被占用的NodePort。


内容的提问来源于stack exchange,提问作者Chris Stryczynski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 15:35:33