針對虛擬網路與 Azure App 服務整合進行疑難解答
本文說明可用來針對與虛擬網路整合之 Azure App 服務 中的連線問題進行疑難解答的工具。
注意事項
App Service 中的 Docker Compose 案例不支援虛擬網路整合。 如果有私人端點,則會忽略存取限制原則。
驗證虛擬網路整合
若要針對連線問題進行疑難解答,您必須先確認是否已正確設定虛擬網路整合,以及是否已將私人IP指派給 App Service方案的所有實例。
若要這樣做,請使用下列其中一種方法:
在 Kudu 偵錯控制台中檢查私人 IP
若要存取 Kudu 控制台,請選取 Azure 入口網站 中的應用程式服務,移至 [開發工具],選取 [進階工具],然後選取 [執行]。 在 [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 Apps 中,工具 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 應用程式上的輸出連線進行疑難解答
直接 [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 入口網站 中的應用程式服務。 選 取 [診斷並解決問題],然後搜尋 [網络疑難解答員]。
注意事項
線上問題案例尚不支援 Linux 或容器型應用程式。
線上問題 - 它會檢查虛擬網路整合的狀態,包括檢查是否已將私人IP指派給 App Service 方案和 DNS 設定的所有實例。 如果未設定自定義 DNS,則會套用預設的 Azure DNS。 您也可以針對想要測試連線能力的特定端點執行測試。
設定問題 - 此疑難解答員會檢查您的子網是否適用於虛擬網路整合。
子網/VNet 刪除問題 - 此疑難解答員會檢查您的子網是否有鎖定,以及是否有任何可能封鎖刪除 VNet/子網的未使用服務關聯連結。
收集網路追蹤
收集網路追蹤有助於分析問題。 在 Azure App Services 中,網路追蹤會從應用程式程式中取得。 若要取得準確的資訊,請在啟動網路追蹤集合時重現問題。
注意事項
網路追蹤中不會擷取虛擬網路流量。
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 應用程式服務
若要收集不使用自訂容器之 Linux 應用程式服務的網路追蹤,請遵循下列步驟:
執行下
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 意應見反社群。