《Windows Azure Platform 系列文章目录》
部署环境:
1.我们只有1个订阅,1个Virtual Network
2.我们有1个Hub-VNet, 在Virtual Network上设置了DNS Server指向到DNS Svr1, Svr2, Svr3三台虚拟机的内网IP地址
3.我们创建了PaaS Datatbase服务,并且创建了Private Endpoint和Private DNS Zone资源
Virtual Network的DNS Server Private IP指向到Unbound虚拟机的内网IP地址,结合Private Endpoint,则解析顺序如下:
上图的DNS解析顺序:
1.如步骤1,虚拟机需要解析地址为*.database.windows.net,查看到Virtual Network上的DNS Server(假设是Unbound),虚拟机往DNS Server上发送DNS查询
2.如步骤2,DNS Server查看到存在转发域,database.windows.net的转发域为168.63.129.16
3.如步骤3,DNS Server往168.63.129.16转发
4.如步骤4,Private DNS Zone与HUb-VNet设置了Virtual Network Link,且Private DNS Zone存在该域名的A记录,返回的内网IP为:10.88.233.4
5.如步骤5,虚拟机查询DNS的结果为内网IP:10.88.233.4,则虚拟机往这个DNS发送请求
Azure DNS的解析顺序如下:
那假设我们有2个Virtual Network,分别在2个订阅里,比如:
1.我们有1个Hub订阅,里面创建了1个Hub VNet,并且设置了3台DNS Server作为高可用
2.我们还有1个订阅叫Spoke订阅,里面也创建1个Spoke VNet
3.Hub VNet和Spoke VNet设置了VNet Peering对等互联
4.Spoke VNet的DNS Server IP指向到Hub区3台DNS Server的内网IP地址
这样会产生问题,如下图所示:
上图的说明:
1.如果1个用户user01,他的权限只在Hub订阅里操作的话,则创建PaaS资源的Private Endpint。默认是在Hub订阅里。假设Hub区里创建privatelink.database.windows.net
2.如果另外一个用户user02,他的权限只在Spoke订阅订阅的话,则创建的PaaS资源的Private Endpoint,默认是在Spoke订阅里创建privatelink.database.windows.net
3.因为Spoke订阅里的Spoke VNet的DNS Server指向到Hub区的DNS Server 内网IP,则查询的时候通过Hub区的DNS Server进行查询
4.但是Hub区的VNet只与Hub区的Private DNS Zone做了连接Link,且因为重名,无法与Spoke区里同名的Private DNS Zone做link,所以从Hub区找不到A记录,该A记录只在Spoke里存在
所以建议的方案是:
上图的方案说明:
1.我们有2个Spoke VNet,分别是Spoke1-VNet和Spoke2-VNet
2.Spoke VNet和Hub VNet内网互通
3.Spoke VNet的DNS Server指向到Hub VNet里DNS Server内网IP地址
4.对Spoke VNet有权限的用户,我们规定创建Private Endpoint的资源,都必须强制创建在Hub订阅里
为了满足Spoke区的用户,强制创建Private DNS ZOne都在Hub订阅里,我们就需要设置自定义权限,并规范操作:
具体的自定义权限:
需要修改assignableScopes生效范围,为Hub区的订阅名称:
另外下面的自定义权限是:
(1)允许spoke区用户,在Hub区创建Private DNS Zone和新增A记录,但不允许删除A记录
(2)其他Hub区的资源,spoke区用户都不可以访问
{
"properties": {
"roleName": "private_dnszone_custom",
"description": "create and manage Azure Private DNS Zone, while cannot delete private dns zone",
"assignableScopes": [
"/subscriptions/[修改为hub区的订阅ID]"
],
"permissions": [
{
"actions": [
"Microsoft.Authorization/*/read",
"Microsoft.ResourceHealth/availabilityStatuses/read",
"Microsoft.Resources/deployments/*",
"Microsoft.Resources/subscriptions/resourceGroups/read",
"Microsoft.Support/*",
"Microsoft.Network/privateDnsZones/*/read",
"Microsoft.Network/privateDnsZones/*/write",
"Microsoft.Network/privateDnsZones/join/action",
"Microsoft.Network/virtualnetworks/*/read",
"Microsoft.Network/virtualNetworks/join/action",
"*/register/action"
],
"notActions": [],
"dataActions": [],
"notDataActions": []
}
]
}
}
Spoke区的用户,在创建Private DNS Zone的时候,需要选择到Hub区订阅,操作步骤如下:
在上图的subscription里,我们可以选择到不同的订阅名称,这里我们需要选择到Hub区的订阅