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

如何配置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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 04:35:32