Azure Lei Zhang的博客

weibo: LeiZhang的微博/QQ: 185165016/QQ群:319036205/邮箱:leizhang1984@outlook.com/TeL:139-161-22926

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

  《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区的订阅

 

posted on 2024-06-10 21:31  Lei Zhang的博客  阅读(156)  评论(0编辑  收藏  举报