對 Azure App Service 的虛擬網路整合進行疑難排解
本文說明可用來針對與虛擬網路整合之 Azure App 服務 連線問題進行疑難解答的工具。
注意
App Service 中的 Docker Compose 案例不支援虛擬網路整合。 如果私人端點存在,則會忽略存取限制原則。
確認虛擬網路整合
若要針對連線問題進行疑難解答,您必須先確認虛擬網路整合是否已正確設定,以及是否已將私人IP指派給App Service 方案的所有實例。
若要解決此問題,請使用下列其中一種方法:
檢查 Kudu 偵錯控制台中的私人IP
若要存取 Kudu 控制台,請選取 Azure 入口網站 中的 App Service,移至 [開發工具],選取 [進階工具],然後選取 [移至]。 在 Kudu 服務頁面中,選取 [工具>偵錯控制台>CMD]。
您也可以直接透過 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 應用程式中,工具 ping、 nslookup 和 tracert 無法透過控制台運作,因為安全性條件約束 (它們可在自定義 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。 選取 [診斷並解決問題],然後搜尋網路疑難排解員。
注意
線上問題案例尚不支援 Linux 或容器型應用程式。
線上問題 - 它會檢查虛擬網路整合的狀態,包括檢查是否已將私人IP指派給App Service 方案和 DNS 設定的所有實例。 如果未設定自定義 DNS,則會套用預設的 Azure DNS。 您也可以針對您要測試連線能力的特定端點執行測試。
設定問題 - 此疑難解答員會檢查您的子網是否適用於虛擬網路整合。
子網/VNet 刪除問題 - 此疑難解答員會檢查您的子網是否有任何鎖定,以及是否有任何未使用的服務關聯連結可能會封鎖刪除 VNet/子網。
收集網路追蹤
收集網路追蹤有助於分析問題。 在 Azure App 服務 中,網路追蹤會取自應用程式進程。 若要取得正確的資訊,請在啟動網路追蹤集合時重現問題。
注意
虛擬網路流量不會在網路追蹤中擷取。
Windows App Services
若要收集 Windows App Services 的網路追蹤,請遵循下列步驟:
- 在 Azure 入口網站 中,流覽至您的 Web 應用程式。
- 在左側導覽中,選取 [ 診斷並解決問題]。
- 在搜尋方塊中,輸入 [收集網络追蹤 ],然後選取 [收集網络追蹤 ] 以啟動網路追蹤收集。
若要取得每個提供 Web 應用程式的實體追蹤檔案,請在瀏覽器中移至 Web 應用程式的 Kudu 控制台 (https://<sitename>.scm.azurewebsites.net
)。 從 C:\home\LogFiles\networktrace 或 D:\home\LogFiles\networktrace 資料夾下載追蹤檔案。
Linux App Services
若要收集未使用自定義容器之 Linux App Services 的網路追蹤,請遵循下列步驟:
tcpdump
執行下列命令以安裝命令列公用程式:apt-get update apt install tcpdump
透過安全殼層通訊協定 (SSH) 連線到容器。
執行下列命令來識別啟動和執行的介面(例如 :
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]
執行下列命令來啟動網路追蹤集合:
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 意見反應社群提交產品意見反應。