在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
相关产品推荐
相关产品推荐

