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

AWS EKS中Service部署后旧负载均衡未删除问题求助

在AWS EKS中自动清理旧负载均衡的方案

当你直接修改现有Service的注解(从ELB切换到NLB)时,Kubernetes会为同一个Service创建新的NLB资源,但不会自动删除原来的ELB。这是因为Kubernetes的Service更新逻辑中,没有绑定「替换LB类型时清理旧LB」的规则,新旧LB属于AWS层面的独立资源,K8s只会管理当前Service关联的LB。

下面是几种可行的解决办法:

  • 方案一:先删旧Service再部署新Service(简单直接)
    这是最通用的方式,先删除关联旧ELB的Service,再部署新的NLB Service:

    # 删除旧Service
    kubectl delete service ignite-service -n ignite
    # 部署新的NLB Service
    kubectl apply -f your-nlb-service.yaml
    

    注意:这个操作会导致服务短暂中断,适合能接受 downtime 的场景,或者提前做好流量切换准备。

  • 方案二:自动化脚本批量处理(适合CI/CD流程)
    如果需要在CI/CD中自动完成,可以写脚本先获取旧ELB信息,删除Service后清理旧ELB,再部署新配置:

    # 获取旧ELB的主机名(对应AWS ELB名称)
    OLD_ELB_HOSTNAME=$(kubectl get service ignite-service -n ignite -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
    OLD_ELB_NAME=$(echo $OLD_ELB_HOSTNAME | cut -d'-' -f1)
    
    # 删除旧Service
    kubectl delete service ignite-service -n ignite
    
    # 直接用AWS CLI删除旧ELB(确保CLI有对应权限)
    aws elb delete-load-balancer --load-balancer-name $OLD_ELB_NAME
    
    # 部署新的NLB Service
    kubectl apply -f your-nlb-service.yaml
    

    提示:如果用的是应用负载均衡(ALB),需要替换成aws elbv2 delete-load-balancer命令,对应ARN参数。

  • 方案三:无中断切换(适合生产环境)
    若不能接受服务中断,可以先创建一个临时的NLB Service,将流量逐步切换到新LB,再删除旧的ELB Service和对应的ELB:

    1. 部署新的临时NLB Service(比如命名为ignite-service-temp)
    2. 调整DNS或流量入口,将用户流量切换到新NLB
    3. 确认流量完全切换后,删除旧的ignite-service和对应的ELB
    4. 将临时Service重命名为原名称(可选)

额外注意事项

  • 无论用哪种方案,都要确认旧ELB没有关联其他服务或资源,避免误删。
  • 如果使用AWS Load Balancer Controller(而非K8s原生的in-tree控制器),逻辑一致:只有当Service被删除时,控制器才会清理对应的LB资源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:45:24