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

Azure Kubernetes通过VPN访问集群Pod内部DNS主机名失败求助

解决方案:Azure VPN客户端访问AKS内部Service DNS问题

核心问题诊断

当前问题源于两个关键错误:

  1. CoreDNS配置逻辑错误:使用Corefile.override完全替换了默认CoreDNS配置,移除了负责解析AKS内部cluster.local域名的kubernetes插件,导致集群Service的DNS记录无法被解析。
  2. VPN客户端DNS指向缺失:即使CoreDNS配置正确,VPN客户端未指向AKS内部DNS服务器,无法获取集群域名解析结果。

分步解决

1. 修复CoreDNS自定义配置

不要使用Corefile.override(会覆盖默认的集群域名解析规则),改用Corefile.custom仅追加外部域名转发规则,保留AKS原生的内部域名解析能力:

apiVersion: v1
kind: ConfigMap
metadata:
  name: coredns-custom
  namespace: kube-system
data:
  Corefile.custom: |
    # 仅转发非集群内部的域名到VNet解析器
    .:53 {
        forward . <你的VNet解析器IP> {
            cache 30
            loop
            reload
            loadbalance
        }
    }

应用配置后重启CoreDNS Pod生效:

kubectl rollout restart deployment coredns -n kube-system

2. 配置VPN客户端的DNS服务器

修改Azure VPN Gateway的点到站点VPN配置,将DNS服务器设置为AKS集群的CoreDNS服务IP(可通过以下命令获取):

kubectl get svc kube-dns -n kube-system

VPN客户端连接后会自动获取该DNS地址,从而能解析*.cluster.local域名。

3. 验证网络连通性

确保VPN客户端能访问AKS的Service/Pod CIDR:

  • 检查VNet与AKS子网的路由表,确认无流量阻止规则。
  • 若AKS启用了网络策略,需添加允许VPN客户端IP范围访问目标Service端口的规则。
  • 先尝试ping Service的ClusterIP,若能通则网络正常,问题仅在DNS;若不通则排查路由/防火墙。

4. 进阶:Azure私有DNS托管集群域名(可选)

若需跨VNet访问AKS内部域名,可创建名为cluster.local的私有DNS区域并关联到AKS所在VNet,再配置CoreDNS的azure插件将集群Service/Pod记录同步到该区域。


验证操作

  1. 连接VPN后执行nslookup ubuntu-1.default.svc.cluster.local,确认能解析到Service的ClusterIP。
  2. 执行ping ubuntu-1.default.svc.cluster.local或访问对应端口,验证连通性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 09:57:32