將您的應用程式與 Azure 虛擬網路整合
注意
從 2024 年 6 月 1 日起,所有新建立的 App Service 應用程式都可以選擇使用命名慣例 <app-name>-<random-hash>.<region>.azurewebsites.net
來產生唯一的預設主機名稱。 現有的應用程式名稱將保持不變。
範例: myapp-ds27dh7271aah175.westus-01.azurewebsites.net
如需詳細資料,請參閱 App Service 資源的唯一預設主機名稱 (英文)。
本文說明 Azure App Service 虛擬網路整合功能,以及如何使用 App Service 中的應用程式來加以設定。 使用 Azure 虛擬網路後,您可以將許多 Azure 資源放在非網際網路可路由的網路中。 App Service 虛擬網路整合功能可讓您的應用程式存取 VNet 中的資源,或透過 VNet 存取資源。
注意
閘道所需的虛擬網路整合的相關資訊已移至新位置。
App Service 有兩種變化:
- 專用的計算定價層,包括基本、標準、進階、進階 v2 和進階 v3。
- App Service 環境,其會直接部署至具有專用支援基礎結構的虛擬網路,並使用隔離式和隔離式 v2 定價層。
虛擬網路整合功能會用於 Azure App Service 專用計算定價層。 如果您的應用程式位於 App Service 環境,則其已與虛擬網路整合,您不需要設定虛擬網路整合功能來連線到相同虛擬網路中的資源。 如需所有網路功能的詳細資訊,請參閱 App Service 網路功能。
虛擬網路整合能讓您的應用程式存取您虛擬網路中的資源,但不會授與從虛擬網路存取您應用程式的輸入私人存取權。 私人站台存取是指讓您的應用程式只能透過在 Azure 虛擬網路中等私人網路存取。 虛擬網路整合只會用來從您的應用程式對虛擬網路進行輸出呼叫。 有關輸入私人存取,請參閱私人端點。
虛擬網路整合功能:
- 需要支援的基本或標準、進階、進階 v2、進階 v3 或彈性進階 App Service 價格層。
- 支援 TCP 和 UDP。
- 使用 App Service 應用程式、函式應用程式和邏輯應用程式。
虛擬網路整合不支援部分項目,例如:
- 掛接磁碟機。
- Windows Server Active Directory 網域加入。
- NetBIOS。
虛擬網路整合支援連線至相同區域中的虛擬網路。 使用虛擬網路整合可讓您的應用程式存取:
- 您在虛擬網路中整合的資源。
- 在與您應用程式所整合虛擬網路對等互連之虛擬網路中的資源,包括全域對等互連連線。
- Azure ExpressRoute 連線中的資源。
- 服務端點保護的服務。
- 已啟用私人端點的服務。
當您使用虛擬網路整合時,可以使用下列 Azure 網路功能:
- 網路安全性群組 (NSG):您可以使用您對整合子網路使用的 NSG 來封鎖輸出流量。 因為您無法使用虛擬網路整合來提供應用程式的輸入存取權,所以不適用輸入規則。
- 路由表 (UDR):您可以在整合子網路上放置路由表,以從您想要的位置傳送輸出流量。
- NAT 閘道:您可以使用 NAT 閘道取得專用輸出 IP,並緩解 SNAT 連接埠耗盡。
了解如何啟用虛擬網路整合。
虛擬網路整合的運作方式
App Service 中的應用程式裝載於背景工作角色上。 虛擬網路整合的運作方式是將虛擬介面掛接至具有委派子網路中位址的背景工作角色。 使用的虛擬介面不是客戶可直接存取的資源。 因為來源位址位於您的虛擬網路中,所以它可以存取虛擬網路中,或透過虛擬網路中存取多數內容,例如虛擬網路中的 VM。
啟用虛擬網路整合時,您的應用程式會透過虛擬網路進行輸出呼叫。 應用程式屬性入口網站中所列的輸出位址是您應用程式仍然使用的位址。 不過,如果您的輸出呼叫是整合虛擬網路或對等互連虛擬網路中的虛擬機器或私人端點,則輸出位址是來自整合子網路的位址。 指派給執行個體的私人 IP 會透過環境變數 WEBSITE_PRIVATE_IP 來公開。
啟用所有流量路由時,所有輸出流量都會傳送至您的虛擬網路。 如果未啟用所有流量路由,則只會將整合子網路上設定的私人流量 (RFC1918) 和服務端點傳送至虛擬網路。 從應用程式直接路由傳送至網際網路的輸出流量。
虛擬網路整合功能對每個背景工作角色支援兩個虛擬介面。 每個背景工作角色有兩個虛擬介面表示每個 App Service 方案的兩個虛擬網路整合。 換句話說,App Service 方案的虛擬網路最多可以整合最多兩個子網路/虛擬網路。 相同 App Service 方案中的應用程式只能使用特定子網路的其中一個虛擬網路整合,這表示應用程式在指定時間只能有單一虛擬網路整合。
子網路需求
虛擬網路整合取決於專用子網路。 當您建立子網路時,Azure 子網路會從頭取用五個 IP。 每個 App Service 方案執行個體的整合子網路都會使用一個位址。 如果您將應用程式調整為四個執行個體,則會使用四個位址。
當您相應增加/減少執行個體大小時,App Service 方案所使用的 IP 位址數量會在調整作業完成時暫時加倍。 在取消佈建現有執行個體之前,新執行個體必須完全運作。 調整作業會影響指定子網路大小的實際可用支援執行個體。 平台升級需要免費的 IP 位址,以確保升級可以發生,而不會中斷輸出流量。 最後,在擴大、縮小或作業完成之後,可能需要一小段時間才能釋放 IP 位址。 在極少數情況下,這項作業最多可以 12 小時,而且如果您快速縮減/放大或增加/減少,則需要比最大規模還要多的 IP 數。
由於在指派之後無法變更子網路大小,請使用夠大的子網路來容納應用程式可能達到的任何規模。 您也應該保留用於平台升級的 IP 位址。 為了避免子網路容量發生任何問題,我們建議您配置比計劃最大規模還多兩倍的 IP。 具有 64 個位址的 /26
涵蓋單一多租用戶 App Service 方案的最大規模。 與虛擬網路整合的期間,在 Azure 入口網站中建立子網路時,需要的大小下限為 /27
。 如果子網路在透過入口網站整合之前已存在,您可以使用 /28
子網路。
透過多方案子網路聯結 (MPSJ),您可以將多個 App Service 方案加入相同的子網路。 所有 App Service 方案都必須位於相同的訂用帳戶中,但虛擬網路/子網路可以位於不同的訂用帳戶中。 每個 App Service 方案中的每個執行個體都需要來自子網路的 IP 位址,而且需要最少 /26
的子網路大小才能使用 MPSJ。 如果您打算加入許多和/或大規模的方案,則應該規劃較大的子網路範圍。
重要
由於已知的錯誤,如果建立多個網站並嘗試同時與虛擬網路整合,MPSJ 就會失敗。 即將部署修正程式。 同時,您可以使用下列其中一種方法來解決此問題:
- 如果您手動建立網站,請逐一建立及整合網站。
- 如果您以程式設計方式建立網站,例如使用 Terraform 或 ARM 範本,請將 dependsOn 元素新增至範本中的每個網站,以相依於為範本中除了第一個網站建立前一個網站。 這會在每個月臺的月臺建立與虛擬網路整合之間建立延遲,因此不會因為已知的 Bug 而遭到封鎖。 如需詳細資訊, 請參閱定義在ARM範本中部署資源的順序。
Windows 容器特定限制
Windows 容器會對於個別 App Service 方案執行個體的每個應用程式使用額外 IP 位址,而且您必須對應地調整子網路的大小。 例如,如果您有 10 個 Windows 容器 App Service方案執行個體及四個執行中應用程式,則您需要 50 個 IP 位址及額外的位址,才能支援水平 (放大/縮小) 調整。
範例計算:
針對每個 App Service 方案執行個體,您需要:4 個 Windows 容器應用程式 = 4 個 IP 位址, 每個 App Service 方案執行個體 1 個 IP 位址,4 + 1 = 5 個 IP 位址
共有 10 個執行個體: 每個 App Service 方案 5 x 10 = 50 個 IP 位址
因為您有 1 個 App Service 方案,1 x 50 = 50 個 IP 位址。
此外,您也會受限於所使用背景工作角色層中可用的核心數目。 每個核心都會新增三個網路單元。 背景工作角色本身會使用一個單位,而每個虛擬網路連線都會使用一個單位。 其餘單位可用於應用程式。
範例計算:
App Service 方案執行個體,其中四個應用程式會執行並使用虛擬網路整合。 應用程式會連線到兩個不同的子網路 (虛擬網路連線)。 此設定需要七個網路單元 (1 個背景工作角色 + 2 個連線 + 4 個應用程式)。 執行此設定的大小下限是 I2v2 (四個核心 x 3 個單位 = 12 個單位)。
使用 I1v2,您最多可以使用同一 (1) 連線執行最多 4 個應用程式,或使用 2 個連線來執行 3 個應用程式。
權限
您必須在子網路上至少有下列或更高層級的角色型存取控制權限,才能透過 Azure 入口網站、CLI 或直接設定 virtualNetworkSubnetId
網站屬性時設定虛擬網路整合:
動作 | 描述 |
---|---|
Microsoft.Network/virtualNetworks/read | 讀取虛擬網路定義 |
Microsoft.Network/virtualNetworks/subnets/read | 讀取虛擬網路子網路定義 |
Microsoft.Network/virtualNetworks/subnets/join/action | 加入虛擬網路 |
如果虛擬網路位於與應用程式不同的訂用帳戶中,則您必須確定已向 Microsoft.Web
資源提供者註冊具有虛擬網路的訂用帳戶。 您可以遵循本文件明確註冊提供者,但也可在訂用帳戶中建立第一個 Web 應用程式時自動註冊。
路由
您可以控制流經虛擬網路整合的流量。 當您設定虛擬網路整合時,需要考慮三種類型的路由。 應用程式路由會定義從您的應用程式路由傳送的流量,以及路由傳送至虛擬網路的流量。 設定路由會影響啟動應用程式之前或期間發生的作業。 範例包括容器映像提取和具有 Key Vault 參考的應用程式設定。 網路路由是處理如何從虛擬網路路由應用程式和設定流量,並從它們之中路由輸出的能力。
透過應用程式路由或組態路由選項,您可以設定透過虛擬網路整合傳送的流量。 只有在透過虛擬網路整合傳送流量時,流量才會受到網路路由限制。
應用程式路由
應用程式路由會套用至應用程式在啟動後傳送的流量。 請參閱啟動期間流量的設定路由。 當您設定應用程式路由時,可以將所有流量或只將私人流量 (也稱為 RFC1918 流量) 路由傳送至虛擬網路。 您可以透過輸出網際網路流量設定來設定此行為。 如果已停用輸出網際網路流量路由,您的應用程式只會將私人流量路由傳送至您的虛擬網路。 如果您想要將所有輸出應用程式流量路由傳送至虛擬網路,請確定已啟用輸出網際網路流量。
- 只有應用程式或組態路由中設定的流量受限於套用至整合子網路的 NSG 和 UDR。
- 啟用輸出網際網路流量路由時,來自您應用程式的輸出流量來源位址仍然是應用程式屬性中列出的其中一個 IP 位址。 如果您透過防火牆或 NAT 閘道路由傳送流量,則來源 IP 位址會源自此服務。
了解如何設定應用程式路由。
注意
當 SMTP 流量透過虛擬網路整合路由傳送時,App Service 支援輸出 SMTP 連線 (連接埠 25)。 支援性取決於部署虛擬網路所在訂用帳戶上的設定。 針對在 1 之前建立的虛擬網路/子網路。 2022 年 8 月,您必須起始虛擬網路/子網路的暫存組態變更,才能從訂用帳戶同步設定。 例如,新增暫存子網路、暫時建立 NSG 的關聯/解除關聯,或暫時設定服務端點。 如需詳細資訊,請參閱針對 Azure 中的輸出 SMTP 連線能力問題進行疑難排解。
組態路由
當您使用虛擬網路整合時,您可以設定如何管理組態流量的部分。 根據預設,組態流量會直接透過公用路由傳送,但針對提及的個別元件,您可以主動設定流量以透過虛擬網路整合進行路由傳送。
內容共用
根據預設,Azure Functions 會在進階方案中調整函式應用程式時,使用內容共用作為部署來源。 您必須設定額外的設定,以確保流量會透過虛擬網路整合路由傳送至此內容共用。 如需詳細資訊,請參閱如何設定內容共用路由。
除了設定路由之外,您還必須確定子網路流量上設定的任何防火牆或網路安全性群組都允許流量流向連接埠 443 和 445。
容器映像提取
使用自訂容器時,您可以透過虛擬網路整合提取容器。 若要透過虛擬網路整合路由傳送容器提取流量,您必須確定已設定路由設定。 深入了解如何設定映像提取的路由傳送。
備份/還原
App Service 有內建的備份/還原,但如果您想要備份至自己的儲存體帳戶,則可以使用自訂備份/還原功能。 如果您想要透過虛擬網路整合將流量路由傳送至儲存體帳戶,則必須設定路由設定。 虛擬網路整合不支援資料庫備份。
使用 Key Vault 參考的應用程式設定
使用 Key Vault 參考的應用程式設定會嘗試透過公用路由取得祕密。 如果 Key Vault 封鎖公用流量,且應用程式正在使用虛擬網路整合,則會嘗試透過虛擬網路整合來取得祕密。
注意
- 目前不支援從私人 Key Vault 設定 SSL/TLS 憑證。
- 目前不支援 App Service 記錄至私人儲存體帳戶。 我們建議使用診斷記錄,並允許儲存體帳戶的受信任服務。
路由應用程式設定
App Service 有現有的應用程式設定,可設定應用程式和設定路由。 如果同時有網站屬性和應用程式設定存在,前者會覆寫後者。 網站屬性的優點是可透過 Azure 原則進行稽核,並在設定時進行驗證。 建議您使用網站屬性。
您仍可使用現有的 WEBSITE_VNET_ROUTE_ALL
應用程式設定來設定應用程式路由。
某些設定路由選項也有應用程式設定。 這些應用程式設定名為 WEBSITE_CONTENTOVERVNET
與 WEBSITE_PULL_IMAGE_OVER_VNET
。
網路路由
您可以使用路由表,路由傳送來自您應用程式的輸出流量,而不受任何限制。 常見的目的地包括防火牆裝置或閘道。 您也可以使用網路安全性群組 (NSG) 來封鎖對您虛擬網路或網際網路中所含資源的輸出流量。 無論套用至整合子網路的路由表為何,套用至整合子網路的 NSG 都會生效。
路由表和網路安全性群組僅適用於透過虛擬網路整合路由傳送的流量。 如需詳細資料,請參閱應用程式路由和設定路由。 路由不適用於來自輸入應用程式要求的回覆,NSG 中的輸入規則不適用於您的應用程式。 虛擬網路整合只會影響來自您應用程式的輸出流量。 若要控制應用程式的輸入流量,請使用存取限制功能或私人端點。
設定套用至輸出流量的網路安全性群組或路由表時,您必須考慮應用程式相依性。 應用程式相依性包括應用程式在執行階段期間所需的端點。 除了應用程式正在呼叫的 API 和服務之外,這些端點也可以衍生端點,例如憑證撤銷清單 (CRL) 檢查端點與身分識別/驗證端點,例如 Microsoft Entra ID。 如果您在 App Service 中使用持續部署,可能也需要根據類型和語言來允許端點。 特別是對於 Linux 持續部署,您必須允許 oryx-cdn.microsoft.io:443
。 對於 Python,您還需要允許 files.pythonhosted.org
、pypi.org
。
Azure 會使用 UDP 連接埠 30,000 來執行網路健康情況檢查。 如果您封鎖此流量,它不會直接影響您的應用程式,但會讓 Azure 支援較難偵測和疑難排解網路相關的問題。
當您想要將所有輸出流量路由傳送至內部部署時,可以使用路由表將所有輸出流量傳送至您的 Azure ExpressRoute 閘道。 如果您將流量路由傳送至閘道,請在外部網路中設定路由以傳回任何回覆。 邊界閘道協定 (BGP) 路由也會影響您的應用程式流量。 如果您具有 來自類似 ExpressRoute 閘道的 BGP 路由,您的應用程式輸出流量會受到影響。 與使用者定義的路由類似,BGP 路由會根據您的路由範圍設定影響流量。
服務端點
虛擬網路整合可讓您觸達服務端點所保護的 Azure 服務。 若要存取服務端點保護的服務,請遵循下列步驟:
- 設定 Web 應用程式的虛擬網路整合,以連線至特定的子網路進行整合。
- 前往目的地服務,並針對整合子網路設定服務端點。
私人端點
如果您想要對私人端點進行呼叫,則請確定您的 DNS 查閱解析為私人端點。 您可以透過下列其中一種方法強制執行此行為:
- 與 Azure DNS 私人區域整合。 若您的虛擬網路沒有自訂 DNS 伺服器,則在區域連結至虛擬網路時,便會自動完成整合。
- 管理應用程式所使用 DNS 伺服器中的私人端點。 若要管理組態,您必須知道私人端點 IP 位址。 然後,使用 A 記錄來指向嘗試連線至該位址的端點。
- 將您自己的 DNS 伺服器設定為轉接至 Azure DNS 私人區域。
Azure DNS 私人區域
應用程式與虛擬網路整合之後,它會使用與虛擬網路所設定的相同 DNS 伺服器。 如果未指定任何自訂 DNS,則會使用 Azure 預設 DNS 以及連結至虛擬網路的任何私人區域。
限制
使用虛擬網路整合有一些限制:
- 此功能可從進階 v2 和進階 v3 中的所有 App Service 部署取得。 它也可在基本層和標準層中使用,但僅適用於較新的 App Service 部署。 如果您使用的是較舊的部署,則只能使用進階 v2 App Service 方案中的功能。 如果您想要確定您可以使用基本或標準 App Service 方案中的功能,請在進階 v3 App Service 方案中建立您的應用程式。 這些方案僅支援我們最新的部署。 如果您想要在建立方案之後縮小。
- 此功能不適用於 App Service 環境中的隔離式方案應用程式。
- 您無法透過傳統虛擬網路跨對等互連連線來連線資源。
- 此功能需要 Azure Resource Manager 虛擬網路中 IPv4
/28
或更大區塊的未使用子網路。 MPSJ 需要/26
以上的區塊。 - 應用程式和虛擬網路必須位於同一個區域。
- 整合虛擬網路無法定義 IPv6 位址空間。
- 整合子網無法啟用服務端點原則。
- 您無法使用整合式應用程式刪除虛擬網路。 請先移除整合,再刪除虛擬網路。
- 每個 App Service 方案不能有兩個以上的虛擬網路整合。 相同 App Service 方案中的多個應用程式可以使用相同的虛擬網路整合。
- 當有使用虛擬網路整合的應用程式時,您無法變更應用程式或方案的訂用帳戶。
存取內部部署資源
虛擬網路整合功能不需要額外的設定,即可透過虛擬網路連線至內部部署資源。 您只需要使用 ExpressRoute 或站對站 VPN 將虛擬網路連線至內部部署資源。
對等互連
如果您使用對等互連搭配虛擬網路整合,便不需要再執行任何設定。
手動虛擬網路整合
使用虛擬網路連線和中斷連線是在應用程式層級。 可能會影響跨多個應用程式中虛擬網路整合的作業位於 App Service 方案層級。 從應用程式 [網路] >> [VNet 整合] 入口網站,您可以取得虛擬網路的詳細資料。 您可以在 [App Service 方案] > [網路] > [VNet 整合] 入口網站中的 App Service 方案層級,查看類似的資訊。
在虛擬網路整合執行個體的應用程式檢視中,您可以將應用程式與虛擬網路中斷連線,而且您可以設定應用程式路由。 若要中斷應用程式與虛擬網路的連線,請選取 [中斷連線]。 當您中斷與虛擬網路的連線時,您的應用程式會重新啟動。 中斷連線並不會變更您的虛擬網路。 不會移除子網路。 如果您接著想要刪除虛擬網路,請先中斷應用程式與虛擬網路的連線。
指派給執行個體的私人IP會透過環境變數 WEBSITE_PRIVATE_IP 公開。 Kudu 主控台 UI 也會顯示 Web 應用程式可用的環境變數清單。 此 IP 會從整合式子網路的位址範圍指派。 Web 應用程式會使用此 IP 透過 Azure 虛擬網路連線至資源。
注意
WEBSITE_PRIVATE_IP 的值會繫結至變更。 不過,這會是整合子網路位址範圍內的 IP,因此您必須允許從整個位址範圍存取。
價格詳細資料
除了 App Service 方案定價層費用以外,虛擬網路整合功能沒有任何額外費用。
疑難排解
這項功能很容易設定,但不表示您在使用過程中不會遇到問題。 如果在存取您所需的端點時發生問題,您可以根據觀察到的狀況採取不同的步驟。 如需詳細資訊,請參閱虛擬網路整合疑難排解指南。
注意
- App Service 中的 Docker Compose 案例不支援虛擬網路整合。
- 存取限制不適用於透過私人端點傳入的流量。
在中斷網路整合的連線之前,請先刪除 App Service 方案或應用程式
如果您刪除應用程式或 App Service 方案,但未先中斷虛擬網路整合的連線,則無法在已用於與已刪除資源整合的虛擬網路或子網路上執行任何更新/刪除作業。 子網路委派 'Microsoft.Web/serverFarms' 仍會指派給您的子網路,且會阻止更新和刪除作業。
若要再次更新/刪除子網路或虛擬網路,您需要重新建立虛擬網路整合,然後中斷其連線:
- 重新建立 App Service 方案和應用程式 (必須使用與之前完全相同的 Web 應用程式名稱)。
- 在 Azure 入口網站中瀏覽至應用程式的 [網路],並設定虛擬網路整合。
- 設定虛擬網路整合之後,請選取 [中斷連線] 按鈕。
- 刪除 App Service 方案或應用程式。
- 更新/刪除子網路或虛擬網路。
如果依照上述步驟操作後仍發生虛擬網路整合的問題,請連絡 Microsoft 支援服務。