Azure PostgreSQL灵活服务器VNet集成私有DNS解析异常咨询
根因分析与修复方案
公网环境可同时ping通两个域名的原因
- 服务器默认域名
my-dev-db.postgres.database.azure.com本身自带公网权威解析记录:只要部署PostgreSQL灵活服务器时没有完全禁用公网访问(即使配置了公网访问白名单限制源IP),该域名默认就会绑定服务分配的公网IP,公网环境可正常解析ping通属于默认配置逻辑下的正常现象。 - 自定义域名
my-dev.postgres.database.azure.com可在公网被解析属于配置错误,常见两种触发场景:- 创建的是公网DNS区域而非私有DNS区域,导致该域名的记录被同步到公网DNS递归节点,所有公网环境都可查询到解析结果
- 本地设备缓存了之前测试时留存的错误解析记录,可通过指定公共DNS服务器执行
nslookup my-dev.postgres.database.azure.com 8.8.8.8验证:如果返回NXDOMAIN即为本地缓存问题,执行ipconfig /flushdns(Windows)或sudo systemd-resolve --flush-caches(Linux)清理缓存即可;如果返回有效IP则确认是DNS区域类型创建错误。
同VNet虚拟机无法解析自定义私有DNS域名的原因
该问题均为私有DNS配置缺失导致,手写Bicep部署时漏配以下任意一项都会触发该现象:
- 未创建私有DNS区域到目标VNet的虚拟网络链接:私有DNS区域不会自动对同区域/同资源组的VNet生效,必须显式配置VNet链接才能让关联VNet内的资源查询到该区域内的解析记录,这是手写Bicep/ARM模板时最高发的漏配项(门户可视化部署私有DNS集成时会自动创建该链接,无需手动操作)。
- 未在私有DNS区域内添加对应解析记录:仅创建空的私有DNS区域不会自动生成自定义域名的记录,需要手动添加名为
my-dev的A记录,指向PostgreSQL灵活服务器的VNet集成私有IP;注意不要配置CNAME记录指向服务默认公网域名,否则VNet内解析会绕到公网导致连接失败。 - VNet配置了自定义DNS服务器未做转发:如果VNet没有使用Azure默认DNS服务器
168.63.129.16,需要在自定义DNS服务器上配置条件转发规则,将postgres.database.azure.com后缀的解析请求转发到Azure私有DNS服务节点,否则自定义DNS无法返回私有区域的解析结果。
Bicep配置修复参考
补全以下配置段即可解决私有DNS解析问题:
// 私有DNS区域定义 resource customPsqlDnsZone 'Microsoft.Network/privateDnsZones@2023-09-01' = { name: 'my-dev.postgres.database.azure.com' location: 'global' } // 关键配置:绑定私有DNS区域到数据库所在VNet resource dnsVnetLink 'Microsoft.Network/privateDnsZones/virtualNetworkLinks@2023-09-01' = { parent: customPsqlDnsZone name: 'link-psql-dns-to-dev-vnet' location: 'global' properties: { registrationEnabled: false virtualNetwork: { id: psqlVnetId // 替换为PostgreSQL服务所在VNet的资源ID } } } // 添加自定义域名的A记录指向数据库私有IP resource customDomainRecord 'Microsoft.Network/privateDnsZones/A@2023-09-01' = { parent: customPsqlDnsZone name: 'my-dev' properties: { ttl: 300 aRecords: [ { ipv4Address: psqlPrivateIp // 替换为PostgreSQL灵活服务器的VNet接入私有IP } ] } }
部署完成后可在同VNet虚拟机内执行
nslookup my-dev.postgres.database.azure.com验证解析结果,返回数据库私有IP即为配置生效。
内容的提问来源于stack exchange,提问作者raduone
相关产品推荐
相关产品推荐

