問題描述
使用 Azure 虛擬網(wǎng)絡(luò),Azure APIM 可以管理無(wú)法通過 Internet 訪問的 API烁登,達(dá)到以保護(hù)企業(yè)內(nèi)部的后端API的目的怯屉。在虛擬網(wǎng)絡(luò)中,啟用網(wǎng)絡(luò)安全組(NSG:Network Security Group)來(lái)控制出站饵沧,入站的端口锨络,我們可以形象的把它比喻成一道門,需要滿足條件的流量才能通過這道安全的大門狼牺。
通過安全大門以后羡儿,我們就需要有路,才能達(dá)到目的是钥。而默認(rèn)的網(wǎng)絡(luò)路徑由Azure的骨干網(wǎng)絡(luò)控制掠归,如果需要通過公司自己的防火墻(Azure Firewall或企業(yè)自己的防火墻)缅叠。在虛擬網(wǎng)絡(luò)中,通過路由表(Route Table)來(lái)指定下一跳(Next Pod)虏冻,通過使用0.0.0.0/0的配置方式(UDRs:user-defined routes)肤粱,把虛擬網(wǎng)絡(luò)中的所有流量都導(dǎo)入并經(jīng)過防火墻。實(shí)現(xiàn)企業(yè)級(jí)的安全保護(hù)厨相。
以上兩句總結(jié)起來(lái)就是:NSG是門领曼,UDR是路。解決方案架構(gòu)圖為:
但是领铐,在搭建APIM VNET時(shí)候悯森,卻遇見了各種各樣的錯(cuò)誤。
1)因?yàn)镹SG的緣故绪撵,必須的端口不通瓢姻。導(dǎo)致APIM的網(wǎng)絡(luò)連接狀態(tài)“Network connectivity status”頁(yè)面中狀態(tài)顯示為 Error
2)因?yàn)榕渲昧俗远x路由(UDR), 導(dǎo)致了APIM頁(yè)面中的APIs,Repository等頁(yè)面錯(cuò)誤音诈,且門戶一直彈出Failed to connect to management endpoint錯(cuò)誤消息
問題分析
首先:以上的兩個(gè)問題幻碱,都可以在" 如何將 Azure API 管理與虛擬網(wǎng)絡(luò)配合使用:常見網(wǎng)絡(luò)配置問題 "一文中找到答案。
問題一端口問題:添加上文檔中所列出的所有必要端口细溅,就可以實(shí)現(xiàn)網(wǎng)絡(luò)連接狀態(tài)全部Success的狀態(tài)褥傍。
API 管理所需的端口:可以使用 網(wǎng)絡(luò)安全組控制其中部署了 API 管理的子網(wǎng)的入站和出站流量。 如果其中的任一端口不可用喇聊,API 管理可能無(wú)法正常工作且不可訪問恍风。 將 API 管理與 VNET 配合使用時(shí),另一個(gè)常見的錯(cuò)誤配置問題是阻止了這些端口中的一個(gè)或多個(gè)誓篱。
VNET 中托管 APIM服務(wù)實(shí)例時(shí)朋贬,將使用下表中的端口。
配置完成NSG后窜骄,一定要記住锦募,在APIM中去Apply Network Configration,以實(shí)現(xiàn)網(wǎng)絡(luò)配置雙邊同步邻遏。
問題二自定義路由問題:情況要復(fù)雜一些糠亩。需要開啟服務(wù)終結(jié)點(diǎn),在路由表中放行所在中國(guó)區(qū)的IP地址(控制平面 IP 地址)
使用 Express Route 或網(wǎng)絡(luò)虛擬設(shè)備強(qiáng)制隧道流量發(fā)往本地防火墻:客戶的常用配置是定義自己的默認(rèn)路由 (0.0.0.0/0)准验,強(qiáng)制來(lái)自 API 管理所委托子網(wǎng)的所有流量流經(jīng)本地防火墻或流向網(wǎng)絡(luò)虛擬設(shè)備赎线。 此流量流一定會(huì)中斷與 Azure API 管理的連接,因?yàn)槌稣玖髁繒?huì)在本地被阻止糊饱,或者通過“網(wǎng)絡(luò)地址轉(zhuǎn)換”功能發(fā)送到不再與各種 Azure 終結(jié)點(diǎn)一起工作的一組無(wú)法識(shí)別的地址垂寥。
此解決方案要求執(zhí)行以下三項(xiàng)操作:
第一項(xiàng):在部署 API 管理服務(wù)的子網(wǎng)上啟用服務(wù)終結(jié)點(diǎn)。 需為 Azure SQL、Azure 存儲(chǔ)矫废、Azure 事件中心和 Azure 服務(wù)總線啟用服務(wù)終結(jié)點(diǎn)。 直接從 API 管理委托的子網(wǎng)啟用這些服務(wù)的終結(jié)點(diǎn)可以讓它們使用 Azure 主干網(wǎng)絡(luò)砰蠢,為服務(wù)流量提供優(yōu)化的路由蓖扑。 如果將服務(wù)終結(jié)點(diǎn)與強(qiáng)制隧道 API 管理配合使用,則不會(huì)將上述 Azure 服務(wù)流量進(jìn)行強(qiáng)制隧道傳輸台舱。 其他 API 管理服務(wù)依賴項(xiàng)流量會(huì)通過強(qiáng)制隧道重定向律杠,不能丟失,否則 API 管理服務(wù)會(huì)功能失常竞惋。
第二項(xiàng):所有控制平面流量(從 Internet 到 API 管理服務(wù)的管理終結(jié)點(diǎn))都會(huì)通過特定的一組由 API 管理托管的入站 IP 進(jìn)行路由柜去。 當(dāng)流量被強(qiáng)制進(jìn)行隧道傳輸時(shí),響應(yīng)不會(huì)對(duì)稱地映射回這些入站源 IP拆宛。 為了克服此限制嗓奢,我們需要添加以下用戶定義的路由 (UDR),通過將這些主機(jī)路由的目標(biāo)設(shè)置為“Internet”來(lái)將流量傳回 Azure浑厚。 用于控制平面流量的入站 IP 集是記錄在案的控制平面 IP 地址
第三項(xiàng):對(duì)于被強(qiáng)制進(jìn)行隧道傳輸?shù)钠渌?API 管理服務(wù)依賴項(xiàng)股耽,應(yīng)該有一種方法來(lái)解析主機(jī)名并訪問該終結(jié)點(diǎn)。 其中包括:
- 指標(biāo)和運(yùn)行狀況監(jiān)視:到 Azure 監(jiān)視終結(jié)點(diǎn)的出站網(wǎng)絡(luò)連接钳幅,可在內(nèi)網(wǎng)中解析物蝙,這些 URL 在 AzureMonitor 服務(wù)標(biāo)記下表示,用于網(wǎng)絡(luò)安全組敢艰。
- mooncake.warmpath.chinacloudapi.cn
- global.prod.microsoftmetrics.com(新增)
- shoebox2.prod.microsoftmetrics.com(新增)
- shoebox2-red.prod.microsoftmetrics.com
- shoebox2-black.prod.microsoftmetrics.com
- shoebox2-red.shoebox2.metrics.nsatc.net
- shoebox2-black.shoebox2.metrics.nsatc.net
- prod3.prod.microsoftmetrics.com(新增)
- prod3-red.prod.microsoftmetrics.com
- prod5.prod.microsoftmetrics.com
- prod5-black.prod.microsoftmetrics.com
- prod5-red.prod.microsoftmetrics.com
- gcs.prod.warm.ingestion.monitoring.azure.cn
- Azure 門戶診斷:若要在從虛擬網(wǎng)絡(luò)內(nèi)部使用 API 管理擴(kuò)展時(shí)從 Azure 門戶啟用診斷日志流诬乞,需要允許在端口 443 上對(duì) dc.services.visualstudio.com 進(jìn)行出站訪問。
- **SMTP 中繼 ** :在主機(jī) smtpi-co1.msn.com钠导、smtpi-ch1.msn.com震嫉、smtpi-db3.msn.com、smtpi-sin.msn.com辈双、ies.global.microsoft.com 下解析的 SMTP 中繼的出站網(wǎng)絡(luò)連接
- 開發(fā)人員門戶驗(yàn)證碼:在主機(jī) client.hip.live.com 和 partner.hip.live.com 下解析的開發(fā)人員門戶 CAPTCHA 的出站網(wǎng)絡(luò)連接责掏。
問題解決
對(duì)比NSG列表,添加缺少的端口湃望。特別是:1433换衬,5671, 5672,12000证芭,1886瞳浦,25028, 6381 - 6383等不常配置的端口废士。
在Route Table中添加中國(guó)區(qū)兩個(gè)被標(biāo)記為全球的IP地址叫潦。這是必須的地址,也是在配置中常常忽略的問題官硝。也是產(chǎn)生此問題的根源矗蕊。
參考資料
在內(nèi)部虛擬網(wǎng)絡(luò)中使用 Azure API 管理服務(wù):https://docs.azure.cn/zh-cn/api-management/api-management-using-with-internal-vnet
APIM常見網(wǎng)絡(luò)配置問題:https://docs.azure.cn/zh-cn/api-management/api-management-using-with-vnet#common-network-configuration-issues