針對虛擬網路與 Azure App 服務整合進行疑難解答

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

注意事項

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

驗證虛擬網路整合

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

若要這樣做,請使用下列其中一種方法:

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

若要存取 Kudu 控制台,請選取 Azure 入口網站 中的應用程式服務,移至 [開發工具],選取 [進階工具],然後選取 [執行]。 在 [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 Apps 中,工具 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 應用程式上的輸出連線進行疑難解答

直接 [sitename].scm.azurewebsites.net在 移至 Kudu。 在 [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 入口網站 中的應用程式服務。 選 取 [診斷並解決問題],然後搜尋 [網络疑難解答員]

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

注意事項

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

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

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

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

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

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

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

收集網路追蹤

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

注意事項

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

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 應用程式服務

若要收集不使用自訂容器之 Linux 應用程式服務的網路追蹤,請遵循下列步驟:

  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 意應見反社群