如何通过FQDN访问Terraform创建的AKS集群及异常问题排查
问题根因
- CoreDNS是Kubernetes集群内部的DNS解析组件,默认仅暴露集群内部访问端点,
kubectl cluster-info返回的CoreDNS地址为集群内部Service IP/内部域名,本身不支持集群外(包括本地浏览器)直接访问。 - 你提供的Terraform配置存在两处错误影响解析能力:
default_node_pool块中max_count = var.存在语法错误,变量引用不完整,会导致节点池自动扩缩容配置不生效,严重时会影响集群组件正常运行。- 你创建了
abhi.io私有DNS Zone,但未和AKS集群所在的虚拟网络绑定,也未在AKS配置中关联该私有DNS Zone,集群相关域名不会自动同步到该私有域解析,且私有DNS Zone本身仅支持关联虚拟网络内部的资源解析,公网环境无法解析该域下的记录。
- AKS的API服务器默认需要身份认证,直接在浏览器中访问API服务器FQDN时,请求未携带Kubernetes认证信息,会直接返回权限类错误。
正确操作步骤
1. 验证CoreDNS运行状态
不需要通过浏览器访问,在集群内部运行测试Pod即可验证CoreDNS功能正常:
kubectl run -it --rm --image=busybox:1.28 dns-test -- nslookup kubernetes.default
如果返回正常的解析记录,说明CoreDNS工作无异常。
2. 修正Terraform配置
首先补全节点池的配置错误,将max_count = var.修改为max_count = var.max_count,并在variables定义中补充对应的max_count变量。
如果需要使用私有DNS解析AKS集群端点,需要在AKS资源配置中添加私有DNS关联,并配置虚拟网络链接:
resource "azurerm_kubernetes_cluster" "cluster" { # 原有配置保持不变 private_dns_zone_id = azurerm_private_dns_zone.ahasa-private.id } # 新增私有DNS Zone和AKS虚拟网络的绑定 resource "azurerm_private_dns_zone_virtual_network_link" "aks_link" { name = "aks-vnet-link" resource_group_name = azurerm_resource_group.rg.name private_dns_zone_name = azurerm_private_dns_zone.ahasa-private.name virtual_network_id = azurerm_kubernetes_cluster.cluster.network_profile[0].vnet_subnet_id registration_enabled = false }
3. 访问AKS集群FQDN
公网访问场景
执行如下命令获取AKS API服务器的公网FQDN:
az aks show -g <替换为你的资源组名称> -n <替换为你的集群名称> --query fqdn -o tsv
该FQDN仅支持通过kubectl、Kubernetes客户端SDK等携带认证信息的方式访问,不可直接通过浏览器访问。
私有网络访问场景
完成上述Terraform私有DNS配置后,在和私有DNS Zone绑定的虚拟网络内部,即可通过私有域名访问AKS集群端点。
内容的提问来源于stack exchange,提问作者Mands
相关产品推荐
相关产品推荐

