如何使用 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 涉及三個步驟︰
- 首先會使用內部負載平衡器位址 (而不是公用 VIP),在虛擬網路中建立基底 ASE。 在此步驟中,根網域名稱會指派給 ILB ASE。
- 一旦建立 ILB ASE,就會上傳 TLS/SSL 憑證。
- 上傳的 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 應用程式。 無需信用卡,也無需簽定合約。