分享方式:


如何使用 Azure Resource Manager 範本建立 ILB ASEv1

重要

這篇文章是關於 App Service 環境 v1。 App Service 環境 v1 和 v2 自 2024 年 8 月 31 日起已淘汰 (英文)。 有較新版本的 App Service 環境,其更易於使用,並且是在更強大的基礎結構上執行。 若要深入了解新版本,請從 App Service 環境簡介開始。 如果您目前使用 App Service 環境 v1,請遵循此文章中的步驟來移轉至新版本。

自 2024 年 8 月 31 日起,服務等級協定 (SLA) 和服務點數 (英文) 將不再適用於繼續在生產環境中的 App Service 環境 v1 和 v2 工作負載,因為其是已淘汰的產品。 App Service 環境 v1 和 v2 硬體的解除委任已經開始,而這可能會影響您的應用程式和資料的可用性和效能。

您必須立即完成移轉至 App Service 環境 v3,否則您的應用程式和資源可能會遭到刪除。 我們會嘗試使用就地移轉功能,自動移轉任何剩餘的 App Service Environment v1 和 v2,但 Microsoft 並未就自動移轉後的相關應用程式可用性提供聲明或保證。 您可能需要執行手動設定來完成移轉,並最佳化您的 App Service 方案 SKU 選擇,以符合您的需求。 如果自動移轉不可行,您的資源和相關聯的應用程式資料將遭到刪除。 我們強烈敦促您立即採取行動,以避免上述任一極端案例。

如果您需要額外的時間,我們可以提供一次性 30 天的寬限期,讓您完成移轉。 如需詳細資訊和申請寬限期,請檢閱寬限期概觀 (英文),然後移至 Azure 入口網站,造訪每個 App Service 環境的窗格。

如需 App Service 環境 v1/v2 淘汰的最新資訊,請參閱 App Service 環境 v1 和 v2 淘汰更新

概觀

使用虛擬網路內部位址 (而不是公用 VIP) 可以建立 App Service 環境。 此內部位址是由稱為內部負載平衡器 (ILB) 的 Azure 元件提供。 使用 Azure 入口網站可以建立 ILB ASE。 也可以透過 Azure Resource Manager 範本使用自動化建立。 本文逐步解說使用 Azure Resource Manager 範本建立 ILB ASE 所需的步驟和語法。

自動建立 ILB ASE 涉及三個步驟︰

  1. 首先會使用內部負載平衡器位址 (而不是公用 VIP),在虛擬網路中建立基底 ASE。 在此步驟中,根網域名稱會指派給 ILB ASE。
  2. 一旦建立 ILB ASE,就會上傳 TLS/SSL 憑證。
  3. 上傳的 TLS/SSL 憑證會明確指派給 ILB ASE 作為其「預設」TLS/SSL 憑證。 如果應用程式是使用指派給 ASE 的一般根網域 (例如 https://someapp.mycustomrootcomain.com) 來定址,此 TLS/SSL 憑證將使用於 ILB ASE 上應用程式的 TLS 流量

建立基底 ILB ASE

此處提供了一個範例 Azure Resource Manager 範本及其相關聯的參數檔案。

azuredeploy.parameters.json 檔案中的大部分參數通用於建立 ILB ASE 以及繫結至公用 VIP 的 ASE。 建立 ILB ASE 時,以下清單會呼叫特殊附註或唯一的參數︰

  • internalLoadBalancingMode:決定控制項和資料連接埠的公開方法。
    • 3 表示連接埠 80/443 上的 HTTP/HTTPS 流量,以及 ASE 上 FTP 服務所接聽的控制/資料通道連接埠,都會繫結至已配置 ILB 的虛擬網路內部位址。
    • 2 表示只有 FTP 服務相關的連接埠 (控制和資料通道) 會繫結至 ILB 位址,而 HTTP/HTTPS 流量將保留在公用 VIP 上。
    • 0 表示所有流量都會繫結至讓 ASE 成為外部的公用 VIP。
  • ︰這個參數會定義要指派給 ASE 的預設根網域。 在 Azure App Service 的公用種變化中,所有 Web 應用程式的預設根網域皆為 azurewebsites.net 。 不過,由於 ILB ASE 位於客戶虛擬網路的內部,所以不適合使用公用服務的預設根網域。 相反地,ILB ASE 應具有適合在公司的內部虛擬網路內使用的預設根網域。 例如,假定的 Contoso Corporation 可能會將 internal.contoso.com 的預設根網域用於只能在 Contoso 虛擬網路內解析和存取的應用程式。
  • ipSslAddressCount︰在 azuredeploy.json 檔案中,這個參數的值會自動預設為 0,因為 ILB ASE 只有單一 ILB 位址。 ILB ASE 沒有明確的 IP-SSL 位址,因此 ILB ASE 的 IP-SSL 位址集區必須設為零,否則會發生佈建錯誤。

一旦針對 ILB ASE 填入 azuredeploy.parameters.json 檔案,就可以使用下列 PowerShell 程式碼片段建立 ILB ASE。 變更檔案路徑,以符合 Azure Resource Manager 範本檔案位於您電腦上的位置。 也請記得提供您自己的 Azure Resource Manager 部署名稱和資源群組名稱的值。

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

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

提交 Azure Resource Manager 範本之後,需要數小時的時間才能建立 ILB ASE。 建立完成後,ILB ASE 會顯示在觸發部署之訂用帳戶的 App Service 環境清單的入口網站 UX 中。

上傳和設定「預設」TLS/SSL 憑證

建立 ILB ASE 後,TLS/SSL 憑證應與 ASE 相關聯,作為用來建立應用程式的 TLS/SSL 連線的「預設」TLS/SSL 憑證。 繼續討論假定的 Contoso Corporation 範例,如果 ASE 的預設 DNS 尾碼是 internal.contoso.com,則連線到 https://some-random-app.internal.contoso.com 需要有對 *.internal.contoso.com 有效的 TLS/SSL 憑證。

有不同的方式可取得有效的 TLS/SSL 憑證,包括內部 CA、向外部簽發者購買憑證,以及使用自我簽署的憑證。 無論 TLS/SSL 憑證的來源,都需要正確設定下列憑證屬性:

  • 主體:此屬性必須設為 *.your-root-domain-here.com
  • 主體別名:此屬性必須同時包含 .your-root-domain-here.com*.scm.your-root-domain-here.com*。 第二個項目的原因是將使用 your-app-name.scm.your-root-domain-here.com 形式的位址,進行與每個應用程式相關聯的 SCM/Kudu 網站的 TLS 連線。

備妥有效的 TLS/SSL 憑證,還需要兩個額外的準備步驟。 TLS/SSL 憑證必須能夠轉換/另存為 .pfx 檔案。 請記住,.pfx 檔案必須包含所有中繼和根憑證,而且也必須使用密碼保護。

然後必須將結果產生的.pfx 檔案轉換成 base64 字串,因為會使用 Azure Resource Manager 範本上載 TLS/SSL 憑證。 因為 Azure Resource Manager 範本是文字檔案,所以必須將 .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 編碼字串後,範例 Azure Resource Manager 範本即可用於設定預設 TLS/SSL 憑證

「azuredeploy.parameters.json」 檔案中的參數如下所列︰

  • ︰設定 ILB ASE 的名稱。
  • ︰包含 ILB ASE 部署所在的 Azure 區域的文字字串。 例如:"South Central US (美國中南部)"。
  • pfxBlobString:.pfx 檔案的 based64 編碼字串表示法。 使用稍早所示的程式碼片段,您會複製 "exportedcert.pfx.b64" 中包含的字串並貼入做為 pfxBlobString 屬性的值。
  • : The used to secure the .pfx file.
  • ︰憑證的指紋。 如果您從 PowerShell 擷取此值 (例如先前程式碼片段中的 $certThumbprint),可以直接使用該值。 不過,如果您從 Windows 憑證對話方塊複製此值,請記得去除多餘的空格。 CertificateThumbprint 應如下所示︰AF3143EB61D43F6727842115BB7F17BBCECAECAE
  • ︰您自己選擇的好記字串識別碼,可用來識別憑證。 此名稱作為 Microsoft.Web/certificates 實體 (表示 TLS/SSL 憑證) 的唯一 Azure Resource Manager 識別碼的一部分。 名稱「必須」以下列尾碼結尾︰_yourASENameHere_InternalLoadBalancingASE。 入口網站會使用這個尾碼做為憑證要用於保護啟用 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": "East US 2"
        },
        "pfxBlobString": {
            "value": "MIIKcAIBAz...snip...snip...pkCAgfQ"
        },
        "password": {
            "value": "PASSWORDGOESHERE"
        },
        "certificateThumbprint": {
            "value": "AF3143EB61D43F6727842115BB7F17BBCECAECAE"
        },
        "certificateName": {
            "value": "DefaultCertificateFor_yourASENameHere_InternalLoadBalancingASE"
        }
    }
}

一旦填入 azuredeploy.parameters.json 檔案,就可以使用下列 PowerShell 程式碼片段設定 TLS/SSL 憑證。 變更檔案路徑,以符合 Azure Resource Manager 範本檔案位於您電腦上的位置。 也請記得提供您自己的 Azure Resource Manager 部署名稱和資源群組名稱的值。

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

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

提交 Azure Resource Manager 範本之後,每個 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 憑證繫結。

開始使用

若要開始使用 App Service 環境,請參閱 App Service 環境簡介

注意

如果您想要在註冊 Azure 帳戶前先開始使用 Azure App Service,請前往試用應用程式服務,您可以在應用程式服務中立即建立暫時的入門 Web 應用程式。 無需信用卡,也無需簽定合約。