将Azure WebSite(应用)集成到虚拟网络

时间:2023-12-05 23:56:44

用过Azure的同学都知道如何将虚拟机加入虚拟网络,也非常简单,但是对于将应用(WebSite)集成到虚拟网络中却很少听到。今天我要讲的就是如何直接将我们部署在WebSite中的应用加入到虚拟网络。

1、先决条件:

  • 安装 Azure Powershell(download)
  • Azure 订阅账号(Azure Portal)

  • 在标准或高级 SKU 中运行的 Azure App Service 中的应用

2、创建虚拟网络

因为将WebSite加入到虚拟网络中是Point to Site,所以我们创建虚拟网络时需要启用点到站点连接,当然也可以创建完成再启用。

将Azure WebSite(应用)集成到虚拟网络

输入虚拟网络名称并选择网络位置

将Azure WebSite(应用)集成到虚拟网络

将Azure WebSite(应用)集成到虚拟网络

添加网关子网

将Azure WebSite(应用)集成到虚拟网络

创建网关,这一步骤时间有点长(大概20分钟)

将Azure WebSite(应用)集成到虚拟网络

3、创建WebSite

将Azure WebSite(应用)集成到虚拟网络

因为我们创建的WebSite SKU默认为“免费”,而能和虚拟网络进行集成的WebSite SKU需要是标准或高级,所以我们需要手动缩放下。

将Azure WebSite(应用)集成到虚拟网络

3、将应用连接到虚拟网络

使用Powershell命令登录Azure账号和订阅

Login-AzureRmAccount -EnvironmentName AzureChinaCloud

将Azure WebSite(应用)集成到虚拟网络

选中WebSite所在订阅

Select-AzureRmSubscription -SubscriptionName [WebAppSubscriptionName]

或者

Select-AzureRmSubscription -SubscriptionId [WebAppSubscriptionId]
  • 使用Powershell设置WebSite连接到虚拟网络的配置信息
$Configuration = @{}
$Configuration.WebAppResourceGroup = "[Your web app resource group]"
$Configuration.WebAppName = "[Your web app name]"
$Configuration.VnetSubscriptionId = "[Your vnet subscription id]"
$Configuration.VnetResourceGroup = "[Your vnet resource group]"
$Configuration.VnetName = "[Your vnet name]"
#国内Azure有两个数据中心:chinaeast、chiannorth
$Configuration.WebAppLocation = "[Your web app Location]"
$Configuration.GeneratedCertificatePath = "C:\Users\Crazy\Desktop\Certificate.cer"

查看刚才设置的配置

将Azure WebSite(应用)集成到虚拟网络

  • 向应用中申明虚拟网络
$vnet = New-AzureRmResource -Name "$($Configuration.WebAppName)/$($Configuration.VnetName)" -ResourceGroupName $Configuration.WebAppResourceGroup -ResourceType "Microsoft.Web/sites/virtualNetworkConnections" -PropertyObject @{"VnetResourceId" = "/subscriptions/$($Configuration.VnetSubscriptionId)/resourceGroups/$($Configuration.VnetResourceGroup)/providers/Microsoft.ClassicNetwork/virtualNetworks/$($Configuration.VnetName)"} -Location $Configuration.WebAppLocation -ApiVersion 2015-07-01

如果此命令成功,$vnet 中应该包含 Properties 变量。Properties 变量应该包含证书指纹和证书数据。

  • 将证书下载到本地
$certBytes = [System.Convert]::FromBase64String($vnet.Properties.certBlob)
[System.IO.File]::WriteAllBytes("$($Configuration.GeneratedCertificatePath)", $certBytes)

将下载的证书上载到虚拟网络

将Azure WebSite(应用)集成到虚拟网络

  • 获取点到站点包,并将其提供给WebSite应用

将以下模板保存到计算机上某个位置中的名为 GetNetworkPackageUri.json 的文件

{
"$schema": "http://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"certData": {
"type": "string"
},
"certThumbprint": {
"type": "string"
},
"networkName": {
"type": "string"
}
},
"variables": {
"legacyVnetName": "[concat('Group ', resourceGroup().name, ' ', parameters('networkName'))]"
},
"resources": [
],
"outputs" : {
"PackageUri" :
{
"value" : "[listPackage(resourceId('Microsoft.ClassicNetwork/virtualNetworks/gateways/clientRootCertificates', parameters('networkName'), 'primary', parameters('certThumbprint')), '2014-06-01').packageUri]", "type" : "string"
}
}
}

设置输入参数:

$parameters = @{"certData" = $vnet.Properties.certBlob ;
certThumbprint = $vnet.Properties.certThumbprint ;
"networkName" = $Configuration.VnetName }
  • 调用ARM模板
$output = New-AzureRmResourceGroupDeployment -Name unused -ResourceGroupName $Configuration.VnetResourceGroup -TemplateParameterObject $parameters -TemplateFile C:\PATH\TO\GetNetworkPackageUri.json

变量 $output.Outputs.packageUri 现在包含要提供给 Web 应用的包 URI。

  • 将点到站点包上载到应用
$vnet = New-AzureRmResource -Name "$($Configuration.WebAppName)/$($Configuration.VnetName)/primary" -ResourceGroupName $Configuration.WebAppResourceGroup -ResourceType "Microsoft.Web/sites/virtualNetworkConnections/gateways" -ApiVersion 2015-07-01 -PropertyObject @{"VnetName" = $Configuration.VnetName ; "VpnPackageUri" = $($output.Outputs.packageUri).Value } -Location $Configuration.WebAppLocation

此命令成功之后,应用现在应会连接到虚拟网络

4、确认应用是否连接到虚拟网络

下载WebSite发布配置文件

将Azure WebSite(应用)集成到虚拟网络

登录到应用Kudu管理平台,打开浏览器输入下图选中的Url并登录。

将Azure WebSite(应用)集成到虚拟网络

进入命令行界面

将Azure WebSite(应用)集成到虚拟网络

输入以下命令

SET WEBSITE_

将Azure WebSite(应用)集成到虚拟网络

我们可以看到WEBSITE_VNETNAME 的环境变量值就是连接的虚拟网络。