使用专用终结点访问CosmosDB时出现‘请求来自VNET服务终结点’错误如何解决?
解决AKS中通过专用端点访问CosmosDB的DNS解析与防火墙拦截问题
你的问题核心是DNS解析未正确指向专用端点IP,导致请求仍走旧的服务端点路径,但当前CosmosDB已禁用公共访问和选定网络规则,因此触发防火墙拦截。以下是具体排查和解决步骤:
1. 修复DNS解析不匹配问题
1.1 验证专用DNS区域与AKS VNET的关联
- 登录Azure门户,找到
privatelink.documents.azure.com专用DNS区域,检查VNET链接:必须确保AKS集群所在的整个VNET(而非仅专用端点所在子网)已关联到该区域。若仅关联部分子网,AKS节点子网内的Pod无法正确解析专用IP。 - 若未关联,添加AKS VNET到专用DNS区域的链接列表。
1.2 检查AKS Pod的DNS策略
- 查看测试Pod的DNS配置:执行
kubectl describe pod <pod-name>,检查DNS Policy字段。- 如果是
None:修改Pod的dnsPolicy为ClusterFirst,或在自定义DNS配置中添加专用DNS区域的解析规则。 - 如果是
ClusterFirst:确认AKS的CoreDNS未被手动修改(AKS默认会自动关联VNET的私有DNS区域,自定义配置可能导致失效)。
- 如果是
1.3 刷新CoreDNS缓存
CoreDNS可能缓存了旧的解析记录,执行以下命令重启CoreDNS Pod:
kubectl rollout restart deployment coredns -n kube-system
重启后再次在Pod内执行nslookup cosmosname.documents.azure.com,确认解析出的IP与专用DNS区域中的记录一致。
2. 清理残留的服务端点配置
- 找到AKS节点所在的子网,进入服务端点配置页面,移除
Microsoft.AzureCosmosDB的服务端点条目。 - 即使CosmosDB已禁用“选定网络”,若子网仍保留服务端点标记,请求会优先走服务端点路径,触发防火墙拦截。
3. 验证专用端点状态
- 检查CosmosDB的专用端点:确认状态为已批准,专用链接连接状态为已成功。
- 若专用端点处于“待批准”状态,需在CosmosDB的专用链接页面手动批准该连接。
4. 测试连接有效性
在测试Pod内执行以下命令验证:
# 查看解析详情 dig cosmosname.documents.azure.com # 测试端口连通性 telnet cosmosname.documents.azure.com 443
若解析IP与专用DNS区域一致且443端口能连通,再重启应用Pod测试连接。
内容的提问来源于stack exchange,提问作者floaty39
相关产品推荐
相关产品推荐

