Azure WebApp与K8s集群VNet集成后无法访问Service IP问题求助
问题原因与解决方案
核心原因
- Service IP路由缺失:AKS的ClusterIP服务地址来自集群默认分配的私有地址段(创建时未指定的话,AKS会自动选取一个如
10.0.0.0/16的段),该段不在你现有VNet的子网范围内。WebApp所在VNet的流量无法路由到这个虚拟IP段,因为VNet路由表中没有指向AKS节点子网的对应规则。 - DNS解析失效:Service的私有FQDN(格式为
<service-name>.<namespace>.svc.cluster.local)由AKS集群内的CoreDNS负责解析。WebApp未配置将集群域的DNS请求转发到AKS的CoreDNS IP,导致无法解析这些FQDN。 - 你提到的“集群未默认创建服务地址空间和子网”是正常行为:AKS的Service ClusterIP是虚拟IP,无需在VNet中创建物理子网,由kube-proxy通过iptables/IPVS在节点上完成流量转发。
解决步骤
1. 配置路由规则,实现WebApp到Service IP的访问
步骤1:获取AKS服务地址段
运行Azure CLI命令查看当前集群的Service地址池:
az aks show --resource-group <你的资源组名> --name <AKS集群名> --query serviceProfile.serviceCidr -o tsv
输出示例:10.0.0.0/16,这就是ClusterIP的地址范围。
步骤2:创建用户定义路由(UDR)并关联到app-subnet
- 登录Azure门户,找到目标VNet,进入「路由表」页面,新建路由表。
- 在路由表中添加规则:
- 地址前缀:填入上述获取的服务地址段
- 下一跃点类型:选择「虚拟网络」
- 下一跃点目标:选择AKS的节点子网(aks-subnet)
- 将该路由表关联到WebApp集成的
app-subnet子网。
配置后,WebApp发往Service IP的流量会被路由到AKS节点子网,kube-proxy会自动将流量转发至对应Pod。
2. 配置DNS转发,实现WebApp到Service私有FQDN的访问
步骤1:获取AKS CoreDNS的ClusterIP
运行kubectl命令获取CoreDNS服务IP:
kubectl get service kube-dns -n kube-system -o jsonpath='{.spec.clusterIP}'
输出示例:10.0.0.10。
步骤2:配置WebApp的DNS转发规则
- 登录Azure门户,进入目标WebApp的「网络」>「VNet集成」页面。
- 点击「DNS配置」,添加自定义DNS规则:
- 域名后缀:
cluster.local(AKS默认集群域) - DNS服务器IP:填入上述获取的CoreDNS IP
- 域名后缀:
若需解析特定命名空间的FQDN,可添加更具体的后缀(如<namespace>.svc.cluster.local)。
验证操作
配置完成后,通过WebApp控制台或应用内测试:
- 测试Service IP访问:
curl <service-cluster-ip>:<port> - 测试Service FQDN访问:
curl <service-name>.<namespace>.svc.cluster.local:<port>
确认能正常访问即完成配置。
内容的提问来源于stack exchange,提问作者Stavros Koureas
相关产品推荐
相关产品推荐

