共用方式為


對 Azure App Service 的虛擬網路整合進行疑難排解

本文說明可用來針對與虛擬網路整合之 Azure App 服務 連線問題進行疑難解答的工具。

注意

App Service 中的 Docker Compose 案例不支援虛擬網路整合。 如果私人端點存在,則會忽略存取限制原則。

確認虛擬網路整合

若要針對連線問題進行疑難解答,您必須先確認虛擬網路整合是否已正確設定,以及是否已將私人IP指派給App Service 方案的所有實例。

若要解決此問題,請使用下列其中一種方法:

檢查 Kudu 偵錯控制台中的私人IP

若要存取 Kudu 控制台,請選取 Azure 入口網站 中的 App Service,移至 [開發工具],選取 [進階工具],然後選取 [移至]。 在 Kudu 服務頁面中,選取 [工具>偵錯控制台>CMD]。

顯示如何在 Azure 入口網站 中開啟 Kudu 服務頁面的螢幕快照。

您也可以直接透過 URL [sitename].scm.azurewebsites.net/DebugConsole移至 Kudu 偵錯控制台。

在 [偵錯] 控制台中,執行下列其中一個命令:

以 Windows OS 為基礎的應用程式

SET WEBSITE_PRIVATE_IP

如果已成功指派私人IP,您將會收到下列輸出:

WEBSITE_PRIVATE_IP=<IP address>

Linux OS 型應用程式

set| egrep --color 'WEBSITE_PRIVATE_IP'

檢查 Kudu 環境中的私人 IP

移至的 Kudu 環境 [sitename].scm.azurewebsites.net/Env ,並搜尋 WEBSITE_PRIVATE_IP

一旦我們確定虛擬網路整合已成功設定,就可以繼續進行連線測試。

針對 Windows Apps 上的輸出連線進行疑難解答

在原生 Windows 應用程式中,工具 pingnslookuptracert 無法透過控制台運作,因為安全性條件約束 (它們可在自定義 Windows 容器中運作)。

直接 [sitename].scm.azurewebsites.net/DebugConsole在 移至 Kudu 控制台。

若要測試 DNS 功能,您可以使用 nameresolver.exe。 語法為:

nameresolver.exe hostname [optional:DNS Server]

您可以使用 nameresolver 來檢查應用程式相依的主機名。 如此一來,您可以測試您的 DNS 是否有任何設定錯誤,或可能沒有 DNS 伺服器的存取權。 您可以檢查環境變數 WEBSITE_DNS_SERVER 和 WEBSITE_DNS_ALT_SERVER,以查看應用程式在主控台中使用的 DNS 伺服器。

注意

nameresolver.exe 工具目前無法在自訂 Windows 容器中運作。

若要測試主機和埠組合的 TCP 連線能力,您可以使用 tcpping。 語法為 。

tcpping.exe hostname [optional: port]

tcpping 公用程式會讓您知道是否可以連接特定主機和連接埠。 只有當有應用程式接聽主機和埠組合,而且有從您的應用程式到指定的主機和埠的網路存取時,它才會顯示成功。

針對 Linux Apps 上的輸出連線進行疑難解答

直接前往 Kudu。[sitename].scm.azurewebsites.net 在 Kudu 服務頁面中,選取 [工具>偵錯控制台>CMD]。

若要測試 DNS 功能,您可以使用 nslookup 命令。 語法為:

nslookup hostname [optional:DNS Server]

根據上述結果,您可以檢查 DNS 伺服器上是否有設定錯誤。

注意

nameresolver.exe工具目前無法在Linux應用程式中運作。

若要測試連線能力,您可以使用 Curl 命令。 語法為:

curl -v https://hostname
curl hostname:[port]

對虛擬網路裝載資源的存取進行偵錯

許多因素可能會防止您的應用程式連線到特定的主機和埠。 大部分時候,這是下列其中一項:

  • 路線中有防火牆。 如果路線中有防火牆,則會達到 TCP 逾時。 此案例中 TCP 逾時值就是 21 秒。 使用 tcpping 工具來測試連線能力。 TCP 逾時可能是許多項目越過防火牆並啟動所造成。
  • DNS 無法存取。 DNS 逾時是每個 DNS 伺服器的三秒。 如果您有兩部 DNS 伺服器,則逾時為六秒。 使用 nameresolver 查看 DNS 是否正常運作。 您無法使用 nslookup,因為不會使用虛擬網路設定的 DNS。 如果無法存取,您可能會有防火牆或 NSG 封鎖 DNS 的存取,或可能會關閉。 某些使用自定義 DNS 伺服器的 DNS 架構可能十分複雜,而且偶爾可能會遇到逾時。 若要判斷此情況是否成立,可以設定環境變數 WEBSITE_DNS_ATTEMPTS 。 如需 App Services 中 DNS 的詳細資訊,請參閱 App Service 中的名稱解析(DNS)。

如果這些項目無法解決您的問題,請先確認幾件事,例如:

區域性虛擬網路整合

  • 您的目的地是否為非 RFC1918 位址,且您並未啟用 [完整路由]
  • 是否有 NSG 封鎖來自整合子網路的輸出?
  • 如果您要通過 Azure ExpressRoute 或 VPN,您的內部部署閘道是否已設為將流量路由回 Azure? 如果您可以連線至虛擬網路中的端點,但無法連線至內部部署,則請檢查您的路由。
  • 您是否有足夠的權限可設定整合子網路上的委派? 在區域虛擬網路整合設定期間,您的整合子網路會委派給 Microsoft.Web/serverFarms。 VNet 整合 UI 會自動將子網路委派給 Microsoft.Web/serverFarms。 如果您的帳戶沒有足夠的網路權限可設定委派,則您需要可以在整合子網路上設定屬性的人員來委派子網路。 若要手動委派整合子網路,請前往 Azure 虛擬網路子網路 UI,並設定 Microsoft.Web/serverFarms 的委派。

對網路問題進行偵錯是一項挑戰,因為您看不到是什麼封鎖了特定主機與連接埠組合的存取。 可能的原因包括:

  • 您已在主機上啟動防火牆,阻止從點對站 IP 範圍存取應用程式連接埠。 跨越子網路通常需要公用存取權。
  • 目標主機已關閉。
  • 應用程式已關閉。
  • IP 或主機名稱錯誤。
  • 應用程式不是接聽您預期的連接埠。 您可以在端點主機上使用 "netstat -aon",將處理序識別碼與接聽連接埠進行比對。
  • 您將網路安全性群組設定為阻止從點對站 IP 範圍存取應用程式主機和連接埠。

您不知道應用程式實際使用的位址。 這可能是整合子網路或點對站位址範圍中的任何位址,因此您必須允許從整個位址範圍存取。

其他偵錯步驟包括:

  • 連線至虛擬網路中的 VM,並嘗試從該處連接資源的主機與連接埠組合。 若要測試 TCP 存取,請使用 PowerShell 命令 Test-NetConnection。 語法為:
Test-NetConnection hostname [optional: -Port]
  • 啟動 VM 上的應用程式,並使用 tcpping,測試是否可透過應用程式從主控台存取該主機和連接埠。

網路疑難排解員

您也可以使用網路疑難解答員,針對 App Service 中應用程式的連線問題進行疑難解答。 若要開啟網路疑難解答員,請移至 Azure 入口網站 中的 App Service。 選取 [診斷並解決問題],然後搜尋網路疑難排解員

顯示如何在 Azure 入口網站 中開啟網路疑難解答員的螢幕快照。

注意

線上問題案例尚不支援 Linux 或容器型應用程式。

線上問題 - 它會檢查虛擬網路整合的狀態,包括檢查是否已將私人IP指派給App Service 方案和 DNS 設定的所有實例。 如果未設定自定義 DNS,則會套用預設的 Azure DNS。 您也可以針對您要測試連線能力的特定端點執行測試。

顯示連線問題的執行疑難解答員的螢幕快照。

設定問題 - 此疑難解答員會檢查您的子網是否適用於虛擬網路整合。

顯示如何針對 Azure 入口網站 中的設定問題執行疑難解答員的螢幕快照。

子網/VNet 刪除問題 - 此疑難解答員會檢查您的子網是否有任何鎖定,以及是否有任何未使用的服務關聯連結可能會封鎖刪除 VNet/子網。

顯示如何針對子網或虛擬網路刪除問題執行疑難解答員的螢幕快照。

收集網路追蹤

收集網路追蹤有助於分析問題。 在 Azure App 服務 中,網路追蹤會取自應用程式進程。 若要取得正確的資訊,請在啟動網路追蹤集合時重現問題。

注意

虛擬網路流量不會在網路追蹤中擷取。

Windows App Services

若要收集 Windows App Services 的網路追蹤,請遵循下列步驟:

  1. 在 Azure 入口網站 中,流覽至您的 Web 應用程式。
  2. 在左側導覽中,選取 [ 診斷並解決問題]。
  3. 在搜尋方塊中,輸入 [收集網络追蹤 ],然後選取 [收集網络追蹤 ] 以啟動網路追蹤收集。

顯示如何擷取網路追蹤的螢幕快照。

若要取得每個提供 Web 應用程式的實體追蹤檔案,請在瀏覽器中移至 Web 應用程式的 Kudu 控制台 (https://<sitename>.scm.azurewebsites.net)。 從 C:\home\LogFiles\networktraceD:\home\LogFiles\networktrace 資料夾下載追蹤檔案。

Linux App Services

若要收集未使用自定義容器之 Linux App Services 的網路追蹤,請遵循下列步驟:

  1. tcpdump執行下列命令以安裝命令列公用程式:

    apt-get update
    apt install tcpdump
    
  2. 透過安全殼層通訊協定 (SSH) 連線到容器。

  3. 執行下列命令來識別啟動和執行的介面(例如 : eth0

    root@<hostname>:/home# tcpdump -D
    
    1.eth0 [Up, Running, Connected]
    2.any (Pseudo-device that captures on all interfaces) [Up, Running]
    3.lo [Up, Running, Loopback]
    4.bluetooth-monitor (Bluetooth Linux Monitor) [Wireless]
    5.nflog (Linux netfilter log (NFLOG) interface) [none]
    6.nfqueue (Linux netfilter queue (NFQUEUE) interface) [none]
    7.dbus-system (D-Bus system bus) [none]
    8.dbus-session (D-Bus session bus) [none]
    
  4. 執行下列命令來啟動網路追蹤集合:

    root@<hostname>:/home# tcpdump -i eth0 -w networktrace.pcap
    

    將取代 eth0 為實際介面的名稱。

若要下載追蹤檔案,請透過 Kudu、FTP 或 Kudu API 要求等方法連線到 Web 應用程式。 以下是觸發檔案下載的要求範例:

https://<sitename>.scm.azurewebsites.net/api/vfs/<path to the trace file in the /home directory>/filename

協力廠商資訊免責聲明

本文提及的協力廠商產品是由與 Microsoft 無關的獨立廠商所製造。 Microsoft 不以默示或其他方式,提供與這些產品的效能或可靠性有關的擔保。

與我們連絡,以取得說明

如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以向 Azure 意見反應社群提交產品意見反應。