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

在EKS中重建/删除服务时复用同DNS名的AWS外部应用负载均衡器

复用AWS负载均衡器以保持DNS名称不变

前提条件

  • 已部署AWS负载均衡器控制器(ALB/NLB控制器)
  • 原LoadBalancer服务由AWS LB控制器管理(而非K8s默认云提供商控制器)

步骤1:删除服务前保留负载均衡器

删除或重建K8s服务前,先修改LB的标签,避免控制器自动清理它:

  • 通过AWS控制台或命令行获取目标LB的ARN:
    aws elbv2 describe-load-balancers --names <LB名称> --query 'LoadBalancers[0].LoadBalancerArn' --output text
    
  • 添加/修改标签,将控制器的管理标识设为非托管:
    aws elbv2 add-tags --resource-arns <LB_ARN> --tags Key=kubernetes.io/cluster/<你的集群名称>,Value=false
    

此时删除K8s服务,LB资源会被保留,DNS名称不变。

步骤2:重建服务并关联已有LB

新建或修改Service YAML,通过注解指定关联已有的LB:

针对ALB的配置示例

apiVersion: v1
kind: Service
metadata:
  name: your-service
  annotations:
    alb.ingress.kubernetes.io/target-type: ip
    service.beta.kubernetes.io/aws-load-balancer-arn: <目标LB的ARN> # 核心注解,指定复用的LB
    service.beta.kubernetes.io/aws-load-balancer-name: <LB名称> # 可选,确保名称匹配
spec:
  type: LoadBalancer
  selector:
    app: your-app-label
  ports:
    - port: 80
      targetPort: 80

针对NLB的配置示例

apiVersion: v1
kind: Service
metadata:
  name: your-service
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-type: external
    service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip
    service.beta.kubernetes.io/aws-load-balancer-arn: <目标LB的ARN> # 核心注解
spec:
  type: LoadBalancer
  selector:
    app: your-app-label
  ports:
    - port: 80
      targetPort: 80

应用配置后,控制器会自动将新服务的Pod后端关联到已有LB,DNS名称保持原状态。

步骤3:验证关联效果

  • 检查服务的外部IP是否与原有LB的DNS一致:
    kubectl get service your-service
    
  • 登录AWS控制台查看LB的目标组,确认新Pod已成功注册
  • 访问LB的DNS地址,验证服务正常响应

注意事项

  • 新服务的端口、协议配置需与原有LB的监听规则匹配,避免流量异常
  • LB的自定义安全组、SSL证书、监听规则等资源会被完整保留,无需重新配置
  • 关联完成后,可将LB标签改回kubernetes.io/cluster/<集群名>: true,让控制器重新接管LB管理(可选)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 09:31:14