如何配置Route53记录作为EKS负载均衡器的别名?
获取ALB Zone ID用于Route53别名配置
要解决这个问题,你可以通过Terraform的aws_elbv2_lb数据源,利用Kubernetes Service自动为ALB添加的专属标签定位目标负载均衡器,具体实现如下:
1. 添加ALB数据源
在配置中新增aws_elbv2_lb数据源,通过K8s Service对应的标签精准匹配目标ALB:
data "aws_elbv2_lb" "backend_alb" { tags = { "kubernetes.io/service-name" = "backend-service" } }
Kubernetes创建LoadBalancer类型Service时,会自动为生成的ALB打上kubernetes.io/service-name=<服务名称>标签,这是最可靠的筛选依据。
2. 更新Route53记录配置
将Route53别名段的zone_id替换为数据源输出的ALB Zone ID:
resource "aws_route53_record" "backend_record" { zone_id = aws_route53_zone.primary.zone_id name = "www.api" type = "A" ttl = "300" alias { name = data.kubernetes_service.backend.status.0.load_balancer.0.ingress.0.hostname zone_id = data.aws_elbv2_lb.backend_alb.zone_id evaluate_target_health = true } }
备选方案(通过Hostname解析)
如果标签筛选无法满足需求,也可以通过解析ALB Hostname提取区域,再获取对应Zone ID:
# 提取ALB Hostname中的区域信息 locals { alb_region = split(".", data.kubernetes_service.backend.status.0.load_balancer.0.ingress.0.hostname)[1] } # 获取对应区域的Zone ID data "aws_availability_zone" "alb_zone" { name = "${local.alb_region}a" # 区域内任意可用区即可 } # 更新Route53记录 resource "aws_route53_record" "backend_record" { zone_id = aws_route53_zone.primary.zone_id name = "www.api" type = "A" ttl = "300" alias { name = data.kubernetes_service.backend.status.0.load_balancer.0.ingress.0.hostname zone_id = data.aws_availability_zone.alb_zone.zone_id evaluate_target_health = true } }
这种方法依赖ALB Hostname的格式,稳定性不如标签筛选,优先推荐第一种方案。
内容的提问来源于stack exchange,提问作者Tal Rofe
相关产品推荐
相关产品推荐

