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

Kubernetes重新部署Pod时如何保持原有LoadBalancer绑定不变

问题根因

你遇到的LoadBalancer绑定丢失问题由两个核心配置错误导致:

  • 你执行kubectl expose deployment api --port=80 --target-port=8080 --name api-LB --type=LoadBalancer命令时,指定暴露的Deployment名称为api,但你实际使用的Deployment名称为api-dev,自动生成的Service标签选择器和Pod标签不匹配,Pod更新后关联关系就会失效
  • 手动通过临时命令创建的Service没有持久化配置,且你填写的target-port=8080和Deployment中定义的containerPort: 80不一致,也会导致流量转发失败

修复方案

1. 编写持久化LoadBalancer Service配置文件

不要使用临时kubectl expose命令创建Service,直接编写固定的YAML配置,保证标签选择器和Deployment的matchLabels完全匹配:

apiVersion: v1
kind: Service
metadata:
  name: api-LB
  namespace: default
spec:
  type: LoadBalancer
  ports:
    - port: 80
      targetPort: 80 # 与Deployment中containerPort保持一致
      protocol: TCP
      name: http
  selector:
    app.kubernetes.io/name: api-dev # 与Deployment的matchLabels完全一致,自动匹配对应Pod

2. 部署固定Service

执行命令部署上述配置:
kubectl apply -f <你保存的Service YAML文件路径>

3. 验证绑定

部署完成后执行kubectl get svc api-LB,确认外部IP正常分配。后续滚动更新Deployment的Pod版本时,Service会自动匹配符合标签规则的新Pod,不需要重新创建Service,外部IP也会保持固定。

可选优化

如果你的集群运营商支持固定公网IP,可以在Service的annotations中指定预申请的固定IP,避免Service意外重建时IP变化,配置示例如下:

metadata:
  name: api-LB
  namespace: default
  annotations:
    # 请替换为你所用集群厂商对应的固定IP配置注解
    service.beta.kubernetes.io/cloud-provider-loadbalancer-fixed-ip: "你的固定公网IP"

内容的提问来源于stack exchange,提问作者Ioan Kats

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:54:01