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

Terraform配置Azure流量管理器添加K8s服务遇DNS问题求助

解决Terraform配置Azure Traffic Manager端点时的DNS名称缺失错误

问题背景

在通过Terraform将Kubernetes服务接入Azure Traffic Manager时,使用AKS集群effective_outbound_ips获取的公网IP配置端点会触发400错误,提示指定的IP资源没有DNS名称;但手动指定带DNS名称的公网IP资源ID时,端点可成功创建。

原因分析

AKS集群默认生成的出站公网IP(即effective_outbound_ips返回的资源)是系统自动创建的默认资源,这类IP未配置DNS名称标签。而Azure Traffic Manager的Azure端点要求目标资源必须具备可解析的DNS名称,因此触发BadRequest错误。手动创建的公网IP因为显式配置了dns_name_label,满足Traffic Manager的校验要求,所以可以成功添加端点。

解决方案

为AKS集群手动配置带DNS名称的静态公网IP,将其指定为集群的出站IP,再在Traffic Manager端点中引用该静态IP的资源ID。

完整代码示例

  1. 创建带DNS名称的静态公网IP
resource "azurerm_public_ip" "aks_outbound_ip" {
  name                = "ConverseLoadBalancerPublicIp"
  resource_group_name = azurerm_resource_group.aks_rg.name
  location            = azurerm_resource_group.aks_rg.location
  allocation_method   = "Static"
  sku                 = "Standard"

  # 配置唯一的DNS名称标签,确保IP具备可解析的DNS名称
  dns_name_label = "converse-aks-outbound-${random_string.suffix.result}"
}

# 添加随机后缀避免DNS名称区域冲突
resource "random_string" "suffix" {
  length  = 4
  special = false
  upper   = false
}
  1. 修改AKS集群配置,绑定静态出站IP
resource "azurerm_kubernetes_cluster" "aks_cluster_wc1" {
  # 保留原有其他配置...

  network_profile {
    load_balancer_profile {
      # 指定手动创建的静态IP作为集群出站IP
      outbound_ips = [azurerm_public_ip.aks_outbound_ip.id]
    }
  }
}
  1. 更新Traffic Manager端点配置
resource "azurerm_traffic_manager_azure_endpoint" "converse_service_ep" {
  name                = "converse-service-ep"
  profile_id          = azurerm_traffic_manager_profile.converse_traffic_manager.id
  target_resource_id  = azurerm_public_ip.aks_outbound_ip.id
  weight              = 1
}

关键说明

  • 静态公网IP的dns_name_label必须在对应Azure区域内唯一,添加随机后缀可避免命名冲突。
  • 将AKS出站IP指定为静态IP后,集群出站流量将使用该IP,同时该IP具备合法DNS名称,完全满足Traffic Manager的端点校验要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 05:12:25