使用 Azure 资源管理器模板创建 ASE

概述

重要

本文介绍用于独立应用服务计划的应用服务环境 v2。 应用服务环境 v1 和 v2 于 2024 年 8 月 31 日停用。 应用服务环境有新版本,此版本更易于使用并在更强大的基础结构上运行。 若要详细了解该新版本,请先参阅应用服务环境简介。 如果你当前正在使用应用服务环境 v1,请按照本文中的步骤迁移到新版本。

从 2024 年 8 月 31 日开始,服务级别协议 (SLA) 和服务额度不再适用于继续投入生产的应用服务环境 v1 和 v2 工作负载,因为这些产品已经停用。 应用服务环境 v1 和 v2 硬件已开始停用,这可能会影响你的应用和数据的可用性和性能。

必须立即完成到应用服务环境 v3 的迁移,否则你的应用和资源可能会被删除。 我们将使用就地迁移功能在最大程度上努力尝试自动迁移任何剩余的应用服务环境 v1 和 v2,但 Microsoft 对自动迁移后的应用程序可用性不作任何声明或保证。 你可能需要执行手动配置来完成迁移,并优化应用服务计划 SKU 选项来满足需求。 如果无法进行自动迁移,你的资源和关联的应用数据会被删除。 我们强烈建议你立即采取行动,以避免发生这两种极端情况之一。

如果你需要更多时间,我们可以提供一次性的 30 天宽限期,以便你完成迁移。 如需了解更多信息并申请此宽限期,请查看宽限期概述,然后转到 Azure 门户并访问每个应用服务环境的“迁移”窗格。

有关应用服务环境 v1/v2 停用的最新信息,请参阅应用服务环境 v1 和 v2 停用更新

可通过能访问 Internet 的终结点或 Azure 虚拟网络内部地址上的终结点创建 Azure 应用服务环境 (ASE)。 使用内部终结点创建时,该终结点由被称为内部负载均衡器 (ILB) 的 Azure 组件提供。 内部 IP 地址上的 ASE 被称为 ILB ASE。 具有公共终结点的 ASE 被称为外部 ASE。

可使用 Azure 门户或 Azure 资源管理器模板创建 ASE。 本文介绍使用资源管理器模板创建外部 ESE 或 ILB ASE 所需的步骤和语法。 若要了解如何在 Azure 门户中创建 ASEv2,请参阅[生成外部 ASE][MakeExternalASE] 或生成 ILB ASE

在 Azure 门户中创建 ASE 时,可同时创建自己的虚拟网络,或者选择要部署到的预先存在的虚拟网络。

基于模板创建 ASE 时,必须首先具有:

  • 一个 Azure 虚拟网络。
  • 该虚拟网络中的子网。 建议使用带 256 个地址的大小为 /24 的 ASE 子网,以适应将来的增长和缩放需求。 创建 ASE 后,就无法更改其大小。
  • 要部署到的订阅。
  • 要部署到的位置。

若要自动创建 ASE,请遵循以下部分中的指导原则。 如果要创建具有自定义 dnsSuffix 的 ILB ASEv2(例如 internal.contoso.com),还要执行一些额外操作。

  1. 创建具有自定义 dnsSuffix 的 ILB ASE 后,应上传与 ILB ASE 域匹配的 TLS/SSL 证书。

  2. 上传的 TLS/SSL 证书将分配到 ILB ASE 作为其“默认”TLS/SSL 证书。 当应用使用分配给 ASE 的一般根域(如 https://someapp.internal.contoso.com)时,此证书用于 ILB ASE 上流向应用的 TLS/SSL 流量。

创建 ASE

有关用于创建 ASE 的资源管理器模板及其关联的参数文件,可参阅 GitHub 上的 ASEv2

如果要创建 ASE,请使用此资源管理器模板 ASEv2 示例。 azuredeploy.parameters.json 文件中的大部分参数常用于创建 ILB ASE 和外部 ASE。 使用现有子网创建创建 ILB ASE 时,以下列表会调出特殊注释的参数或唯一的参数。

参数

  • aseName:此参数定义唯一 ASE 名称。
  • location:此参数定义应用服务环境的位置。
  • existingVirtualNetworkName:此参数定义 ASE 将在其中驻留的现有虚拟网络和子网的虚拟网络名称。
  • existingVirtualNetworkResourceGroup:此参数定义 ASE 将在其中驻留的现有虚拟网络和子网的资源组名称。
  • subnetName:此参数定义 ASE 将在其中驻留的现有虚拟网络和子网的子网名称。
  • internalLoadBalancingMode:此属性多数情况下设置为 3,这表示端口 80/443 上的 HTTP/HTTPS 流量以及 ASE 上的 FTP 服务所侦听的控制/数据通道端口将绑定到 ILB 分配的虚拟网络内部地址。 如果此属性设置为 2,则仅将与 FTP 服务相关的端口(包括控制和数据信道)绑定至 ILB 地址。 如果将此属性设置为 0,则 HTTP/HTTPS 流量将保留在公共 VIP 上。
  • dnsSuffix:此参数定义要分配给 ASE 的默认根域。 在 Azure 应用服务的公共变体中,所有 Web 应用的默认根域均为 chinacloudsites.cn。 由于 ILB ASE 位于客户虚拟网络的内部,因此不适合使用公共服务的默认根域。 而应当具有适合在公司的内部虚拟网络中使用的默认根域。 例如,对于只能在 Contoso 虚拟网络内解析和访问的应用,Contoso Corporation 可能会使用默认根域 internal.contoso.com。 若要指定自定义根域,需要使用 API 版本 2018-11-01 或更早版本。
  • ipSslAddressCount:在“azuredeploy.json”文件中,此参数的值自动默认为 0,因为 ILB ASE 只有一个 ILB 地址。 ILB ASE 没有显式 IP-SSL 地址。 因此,ILB ASE 的 IP-SSL 地址池应设置为零。 否则将出现预配错误。

在填充 azuredeploy.parameters.json 文件后,使用 PowerShell 代码片段来创建 ASE。 更改文件路径,以匹配资源管理器模板文件在计算机上的位置。 切记提供自己的资源管理器部署名称值和资源组名称值:

$templatePath="PATH\azuredeploy.json"
$parameterPath="PATH\azuredeploy.parameters.json"

New-AzResourceGroupDeployment -Name "CHANGEME" -ResourceGroupName "YOUR-RG-NAME-HERE" -TemplateFile $templatePath -TemplateParameterFile $parameterPath

创建 ASE 可能需要约两小时。 然后,对于触发部署的订阅,ASE 将显示在门户的 ASE 列表中。

上传和配置“默认”TLS/SSL 证书

TLS/SSL 证书必须与 ASE 关联,作为用于建立应用的 TLS/SSL 连接的“默认”TLS/SSL 证书。 如果 ASE 的默认 DNS 后缀是 internal.contoso.com,则需要对 *.internal.contoso.com 有效的 TLS/SSL 证书才可连接到 https://some-random-app.internal.contoso.com

可通过三种方式获取有效的 TLS/SSL 证书:使用内部证书颁发机构、向外部颁发者购买证书或使用自签名证书。 无论 TLS/SSL 证书的来源如何,都需要正确配置以下证书属性:

  • 使用者:此属性必须设置为 *“your-root-domain-here.com”。
  • 使用者可选名称:此属性必须同时包含 .your-root-domain-here.com*.scm.your-root-domain-here.com*。 以 TLS 方式连接到与每个应用关联的 SCM/Kudu 站点时,使用 your-app-name.scm.your-root-domain-here.com 形式的地址。

备妥有效的 TLS/SSL 证书以后,还需要两个额外的准备步骤。 将 TLS/SSL 证书转换/另存为 .pfx 文件。 请记住,.pfx 文件必须包括所有的中间和根证书。 使用密码进行保护。

需要将 .pfx 文件转换为 base64 字符串,因为将使用资源管理器模板上传 TLS/SSL 证书。 由于资源管理器模板是文本文件,因此必须将 .pfx 文件转换为 base64 字符串。 如此才可将其作为模板的参数包含在内。

通过下列 PowerShell 代码片段:

  • 生成自签名证书。
  • 将证书导出为.pfx 文件。
  • 将 .pfx 文件转换为 base64 编码的字符串。
  • 将 base64 编码的字符串保存到单独的文件。

base64 编码的 PowerShell 代码改写自 PowerShell 脚本博客

$certificate = New-SelfSignedCertificate -certstorelocation cert:\localmachine\my -dnsname "*.internal.contoso.com","*.scm.internal.contoso.com"

$certThumbprint = "cert:\localMachine\my\" + $certificate.Thumbprint
$password = ConvertTo-SecureString -String "CHANGETHISPASSWORD" -Force -AsPlainText

$fileName = "exportedcert.pfx"
Export-PfxCertificate -cert $certThumbprint -FilePath $fileName -Password $password     

$fileContentBytes = get-content -encoding byte $fileName
$fileContentEncoded = [System.Convert]::ToBase64String($fileContentBytes)
$fileContentEncoded | set-content ($fileName + ".b64")

成功生成 TLS/SSL 证书并将其转换为 base64 编码字符串后,使用 GitHub 上的示例资源管理器模板配置默认 SSL 证书

azuredeploy.parameters.json 文件中的参数如下所列:

  • appServiceEnvironmentName:要配置的 ILB ASE 的名称。
  • existingAseLocation:包含 ILB ASE 部署所在的 Azure 区域的文本字符串。 例如“中国北部 2”。
  • pfxBlobString:.pfx 文件的 based64 编码字符串表示形式。 使用先前所示的代码片段并复制“exportedcert.pfx.b64”中包含的字符串。 将其作为 pfxBlobString 属性的值进行粘贴。
  • password:用于保护 .pfx 文件的密码。
  • certificateThumbprint:证书的指纹。 如果从 Powershell 中检索到此值(例如先前代码片段中的 $certificate.Thumbprint),可按原样使用此值。 如果从 Windows 证书对话框复制此值,请记得去除多余的空格。 certificateThumbprint 应如下所示:AF3143EB61D43F6727842115BB7F17BBCECAECAE。
  • certificateName:用户自己选择的易记字符串标识符,用于标识证书。 此名称用作 Microsoft.Web/certificates 实体(表示 TLS/SSL 证书)的资源管理器唯一标识符的一部分。 名称必须以下述后缀结尾:_yourASENameHere_InternalLoadBalancingASE。 此后缀由 Azure 门户使用,表示证书用于维护启用 ILB 的 ASE 的安全。

azuredeploy.parameters.json 的缩写示例如下所示:

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "appServiceEnvironmentName": {
      "value": "yourASENameHere"
    },
    "existingAseLocation": {
      "value": "China North 2"
    },
    "pfxBlobString": {
      "value": "MIIKcAIBAz...snip...snip...pkCAgfQ"
    },
    "password": {
      "value": "PASSWORDGOESHERE"
    },
    "certificateThumbprint": {
      "value": "AF3143EB61D43F6727842115BB7F17BBCECAECAE"
    },
    "certificateName": {
      "value": "DefaultCertificateFor_yourASENameHere_InternalLoadBalancingASE"
    }
  }
}

在填充 azuredeploy.parameters.json 文件后,使用 PowerShell 代码片段来配置默认 TLS/SSL 证书。 更改文件路径,以匹配资源管理器模板文件在计算机上的位置。 切记提供自己的资源管理器部署名称值和资源组名称值:

$templatePath="PATH\azuredeploy.json"
$parameterPath="PATH\azuredeploy.parameters.json"

New-AzResourceGroupDeployment -Name "CHANGEME" -ResourceGroupName "YOUR-RG-NAME-HERE" -TemplateFile $templatePath -TemplateParameterFile $parameterPath

每个 ASE 前端约耗时 40 分钟才能应用此更改。 例如,有一个默认大小的 ASE 使用两个前端,则模板需要大约 1 小时 20 分钟才能完成。 运行模板时无法缩放 ASE。

模板运行完成后,即可通过 HTTPS 访问 ILB ASE 上的应用。 使用默认 TLS/SSL 证书来保护连接安全。 如果 ILB ASE 上的应用使用应用程序名称与默认主机名的组合来寻址,则会使用默认 TLS/SSL 证书。 例如,https://mycustomapp.internal.contoso.com 使用 *.internal.contoso.com 的默认 TLS/SSL 证书。

但是,就像公共多租户服务上运行的应用一样,开发者可为单个应用配置自定义主机名。 还可为单个应用配置唯一的 SNI TLS/SSL 证书绑定。