【Azure API 管理】APIM集成內網虛擬網絡后,啟用自定義路由管理外出流量經過防火牆(Firewall),遇見APIs加載不出來問題


問題描述

使用 Azure 虛擬網絡,Azure APIM 可以管理無法通過 Internet 訪問的 API,達到以保護企業內部的后端API的目的。在虛擬網絡中,啟用網絡安全組(NSG:Network Security Group)來控制出站,入站的端口,我們可以形象的把它比喻成一道門,需要滿足條件的流量才能通過這道安全的大門。

通過安全大門以后,我們就需要有路,才能達到目的。而默認的網絡路徑由Azure的骨干網絡控制,如果需要通過公司自己的防火牆(Azure Firewall或企業自己的防火牆)。在虛擬網絡中,通過路由表(Route Table)來指定下一跳(Next Pod),通過使用0.0.0.0/0的配置方式(UDRs:user-defined routes),把虛擬網絡中的所有流量都導入並經過防火牆。實現企業級的安全保護。

以上兩句總結起來就是:NSG是門,UDR是路。解決方案架構圖為:

但是,在搭建APIM VNET時候,卻遇見了各種各樣的錯誤。

1)因為NSG的緣故,必須的端口不通。導致APIM的網絡連接狀態“Network connectivity status”頁面中狀態顯示為 Error

 

2)因為配置了自定義路由(UDR), 導致了APIM頁面中的APIs,Repository等頁面錯誤,且門戶一直彈出Failed to connect to management endpoint錯誤消息

 

問題分析

首先:以上的兩個問題,都可以在" 如何將 Azure API 管理與虛擬網絡配合使用:常見網絡配置問題 "一文中找到答案。

問題一端口問題:添加上文檔中所列出的所有必要端口,就可以實現網絡連接狀態全部Success的狀態。

API 管理所需的端口:可以使用 網絡安全組控制其中部署了 API 管理的子網的入站和出站流量。 如果其中的任一端口不可用,API 管理可能無法正常工作且不可訪問。 將 API 管理與 VNET 配合使用時,另一個常見的錯誤配置問題是阻止了這些端口中的一個或多個。

VNET 中托管 APIM服務實例時,將使用下表中的端口。

源/目標端口 方向 傳輸協議 服務標記
源/目標
目的 (*) 虛擬網絡類型
* / [80], 443 入站 TCP INTERNET/VIRTUAL_NETWORK 客戶端與 API 管理的通信 外部
* / 3443 入站 TCP ApiManagement / VIRTUAL_NETWORK Azure 門戶和 PowerShell 的管理終結點 外部和內部
* / 443 出站 TCP VIRTUAL_NETWORK / Storage 與 Azure 存儲的依賴關系 外部和內部
* / 443 出站 TCP VIRTUAL_NETWORK / AzureActiveDirectory Azure Active Directory 和 Azure KeyVault 依賴項 外部和內部
* / 1433 出站 TCP VIRTUAL_NETWORK / SQL 訪問 Azure SQL 終結點 外部和內部
* / 443 出站 TCP VIRTUAL_NETWORK / AzureKeyVault 訪問 Azure KeyVault 外部和內部
* / 5671, 5672, 443 出站 TCP VIRTUAL_NETWORK / EventHub 事件中心策略日志和監視代理的依賴項 外部和內部
* / 445 出站 TCP VIRTUAL_NETWORK / Storage 與適用於 GIT 的 Azure 文件共享的依賴關系 外部和內部
* / 443, 12000 出站 TCP VIRTUAL_NETWORK / AzureCloud 運行狀況和監視擴展 外部和內部
* / 1886、443 出站 TCP VIRTUAL_NETWORK / AzureMonitor 發布診斷日志和指標資源運行狀況和 Application Insights 外部和內部
* / 25、587、25028 出站 TCP VIRTUAL_NETWORK/INTERNET 連接到 SMTP 中繼以發送電子郵件 外部和內部
* / 6381 - 6383 入站和出站 TCP VIRTUAL_NETWORK/VIRTUAL_NETWORK 訪問 Redis 服務以獲取計算機之間的緩存策略 外部和內部
* / 4290 入站和出站 UDP VIRTUAL_NETWORK/VIRTUAL_NETWORK 同步用於計算機之間的速率限制策略的計數器 外部和內部
* / * 入站 TCP AZURE_LOAD_BALANCER/VIRTUAL_NETWORK Azure 基礎結構負載均衡器 外部和內部

配置完成NSG后,一定要記住,在APIM中去Apply Network Configration,以實現網絡配置雙邊同步。 

 

問題二自定義路由問題:情況要復雜一些。需要開啟服務終結點,在路由表中放行所在中國區的IP地址(控制平面 IP 地址

 使用 Express Route 或網絡虛擬設備強制隧道流量發往本地防火牆:客戶的常用配置是定義自己的默認路由 (0.0.0.0/0),強制來自 API 管理所委托子網的所有流量流經本地防火牆或流向網絡虛擬設備。 此流量流一定會中斷與 Azure API 管理的連接,因為出站流量會在本地被阻止,或者通過“網絡地址轉換”功能發送到不再與各種 Azure 終結點一起工作的一組無法識別的地址。 

此解決方案要求執行以下三項操作:

第一項:在部署 API 管理服務的子網上啟用服務終結點。 需為 Azure SQL、Azure 存儲、Azure 事件中心和 Azure 服務總線啟用服務終結點。 直接從 API 管理委托的子網啟用這些服務的終結點可以讓它們使用 Azure 主干網絡,為服務流量提供優化的路由。 如果將服務終結點與強制隧道 API 管理配合使用,則不會將上述 Azure 服務流量進行強制隧道傳輸。 其他 API 管理服務依賴項流量會通過強制隧道重定向,不能丟失,否則 API 管理服務會功能失常。


第二項:所有控制平面流量(從 Internet 到 API 管理服務的管理終結點)都會通過特定的一組由 API 管理托管的入站 IP 進行路由。 當流量被強制進行隧道傳輸時,響應不會對稱地映射回這些入站源 IP。 為了克服此限制,我們需要添加以下用戶定義的路由 (UDR),通過將這些主機路由的目標設置為“Internet”來將流量傳回 Azure。 用於控制平面流量的入站 IP 集是記錄在案的控制平面 IP 地址

 

第三項:對於被強制進行隧道傳輸的其他 API 管理服務依賴項,應該有一種方法來解析主機名並訪問該終結點。 其中包括:

  • 指標和運行狀況監視到 Azure 監視終結點的出站網絡連接,可在內網中解析,這些 URL 在 AzureMonitor 服務標記下表示,用於網絡安全組。
        1. mooncake.warmpath.chinacloudapi.cn
        2. global.prod.microsoftmetrics.com(新增)
        3. shoebox2.prod.microsoftmetrics.com(新增)
        4. shoebox2-red.prod.microsoftmetrics.com
        5. shoebox2-black.prod.microsoftmetrics.com
        6. shoebox2-red.shoebox2.metrics.nsatc.net
        7. shoebox2-black.shoebox2.metrics.nsatc.net
        8. prod3.prod.microsoftmetrics.com(新增)
        9. prod3-red.prod.microsoftmetrics.com
        10. prod5.prod.microsoftmetrics.com
        11. prod5-black.prod.microsoftmetrics.com
        12. prod5-red.prod.microsoftmetrics.com
        13. gcs.prod.warm.ingestion.monitoring.azure.cn
  • Azure 門戶診斷若要在從虛擬網絡內部使用 API 管理擴展時從 Azure 門戶啟用診斷日志流,需要允許在端口 443 上對 dc.services.visualstudio.com 進行出站訪問。 
  • SMTP 中繼  :在主機 smtpi-co1.msn.comsmtpi-ch1.msn.comsmtpi-db3.msn.comsmtpi-sin.msn.comies.global.microsoft.com 下解析的 SMTP 中繼的出站網絡連接
  • 開發人員門戶驗證碼:在主機 client.hip.live.com 和 partner.hip.live.com 下解析的開發人員門戶 CAPTCHA 的出站網絡連接。

 

問題解決

對比NSG列表,添加缺少的端口。特別是:1433,5671, 5672,12000,1886,25028, 6381 - 6383等不常配置的端口。

在Route Table中添加中國區兩個被標記為全球的IP地址。這是必須的地址,也是在配置中常常忽略的問題。也是產生此問題的根源。

 

 

參考資料

 

在內部虛擬網絡中使用 Azure API 管理服務:https://docs.azure.cn/zh-cn/api-management/api-management-using-with-internal-vnet

APIM常見網絡配置問題:https://docs.azure.cn/zh-cn/api-management/api-management-using-with-vnet#common-network-configuration-issues

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM