跨Tenant的VNET互联一般来说并不是特别常见,但是也不是什么看不到的场景,很久之前其实写过一篇如果跨tenant创建VNET Peering的blog,里边介绍了跨tenant情况下如何创建VNET Peering,有兴趣的可以瞅一眼
跨tenant建立Azure Global 对等互联
而除了这种方式之外,还可以通过另一项Azure的网络服务 - Azure Virtual WAN来实现这种跨tenant的VNET互联需求,本质上来讲其实背后都是建立的VNET Peering,只不过对用户来说入口以及适用场景不一样而已
假设只有个别的VNET有这个需求,其实用哪种方式都无所谓,但是对于大规模的网络模型来说,使用Virtual WAN可以极大简化部署和维护的复杂度
而这也是Virtual WAN本身最大的优势之一
关于Virtual WAN,这是一项最近两三年出现的服务,现在应该是比较成熟了,Virtual WAN算是Azure上大规模组网时的核心服务之一,可以很好地整合复杂的网络架构,把复杂的问题简单化,像是之前比较熟悉的ER、Site2Site VPN、P2S VPN,VNET Peering这种常用的组网服务都可以整合进Virtual WAN里,并且灵活的控制路由传播
除了大规模组网时建议使用Virtual WAN以外,小规模应用其实也一样适用,因为我们还要考虑组织的扩展性,架构层面一开始就留下余地的话,将来扩展时会变得容易很多,所以对于一些可以明显看到将来有扩展机会的企业,可以尝试下一开始就使用Virtual WAN组网
回到这次的话题,这次只是个简单的demo,来演示下通过Virtual WAN将两个在不同region,不同tenant的VNET连接到一起,大致的架构如下
基本非常简单,不需要过多的介绍,如果想让Tenant A下的VNET A和Tenant B下的VNET B互联的话,只需要将两个VNET都连接到Virtual WAN中的HUB即可,两个VNET即可自动建立peering连接,如果有更多的VNET,也只需要再加入到Hub,即可实现多方互联,不需要像VNET Peering那样受不可传递限制
首先需要给tenant A中的用户授权访问Tenant B中的VNET B,这样才能将VNET B连接到Virtual WAN中的hub,这点是通过Azure AD B2B实现的,和之前跨tenant创建VNET Peering其实是一样的
在另外一个账户切换目录,可以看到被授权的resource
目前这种跨tenant的连接还是没办法在portal执行,所以只能通过PowerShell或者CLI来做
在Tenant A下执行命令,首先切换到Tenant B获取到VNET信息
Connect-AzAccount -SubscriptionId "TenantB_SUB_ID" -TenantId "TenantB ID" -UseDeviceAuthentication
Get-AzVirtualNetwork |ft name
获取VNET 信息
$VNET = Get-AzVirtualNetwork
切换回Tenant A,可以看到不同于Tenant B,Tenant A下有三个VNET
Connect-AzAccount -SubscriptionId "TenantA_SUB_ID" -TenantId "TenantA ID" -UseDeviceAuthentication
Get-AzVirtualNetwork|Measure-Object
创建到Virtual Hub的Connection
New-AzVirtualHubVnetConnection -ResourceGroupName VWAN -VirtualHubName 'VHub' -Name "EastAsiaCon" -RemoteVirtualNetwork $VNET
可以看到连接了
VM内也可以正常访问对端的VNET