【Azure API 管理】Azure APIM服务集成在内部虚拟网络后,在内部环境中打开APIM门户使用APIs中的TEST功能失败

问题描述使用微软API管理服务(Azure API Management),简称APIM 。因为公司策略要求只能内部网络访问,所以启用了VNET集成 。集成方式见: (在内部模式下使用 Azure API 管理连接到虚拟网络:https://docs.azure.cn/zh-cn/api-management/api-management-using-with-internal-vnet?tabs=stv1)
【【Azure API 管理】Azure APIM服务集成在内部虚拟网络后,在内部环境中打开APIM门户使用APIs中的TEST功能失败】当APIM配置好后,直接通过CURL命令访问APIM的网关接口(如:curl https://bei3apim.azure-api.cn/httpbin/get -v ),请求响应成功 。

【Azure API 管理】Azure APIM服务集成在内部虚拟网络后,在内部环境中打开APIM门户使用APIs中的TEST功能失败

文章插图
但是 , 直接在门户上访问时,为什么一直都报错 “Could not complete the request. Please try again later.”
【Azure API 管理】Azure APIM服务集成在内部虚拟网络后,在内部环境中打开APIM门户使用APIs中的TEST功能失败

文章插图
问题分析首先,请求通过APIM 网关已经能成功转发请求到后端服务器,并且返回状态为200 。获得正确的返回结果 。
然后,这个问题,只发生在APIM门户的 Test 页面,并且当点击“Test” 按钮后,马上就触发了API 管理提示的错误 。
所以 , 判断这个问题,就发生在APIM门户页面端,是JS的一些执行报错 。所以可以通过浏览器开发模式(F12)查看,Console中的输出 , 检测JS执行的错误消息 。
【Azure API 管理】Azure APIM服务集成在内部虚拟网络后,在内部环境中打开APIM门户使用APIs中的TEST功能失败

文章插图
谜底揭晓:因为APIM的Test功能是把请求先发送到一个代理服务器( https://apimanagement-cors-proxy-mc.azure-api.cn/ )上执行,而在内网中,这个代理服务器URL无法被解析 。
解决方法:在虚拟网络的DNS服务器中,加上对域名(apimanagement-cors-proxy-mc.azure-api.cn)的解析 。或者直接在当前的VM中修改windows host文件(C:\Windows\System32\drivers\etc)
解题步骤1) 在公网中 , 通过 nslookup apimanagement-cors-proxy-mc.azure-api.cn 解析出它的IP地址
 
【Azure API 管理】Azure APIM服务集成在内部虚拟网络后,在内部环境中打开APIM门户使用APIs中的TEST功能失败

文章插图
2) 进入VM 的Host文件,添加 IP 域名记录
【Azure API 管理】Azure APIM服务集成在内部虚拟网络后,在内部环境中打开APIM门户使用APIs中的TEST功能失败

文章插图
3) 刷新APIM Test页面,再次点击Test Send 按钮 , 请求发送成功!
【Azure API 管理】Azure APIM服务集成在内部虚拟网络后,在内部环境中打开APIM门户使用APIs中的TEST功能失败

文章插图
[END]
参考资料在内部模式下使用 Azure API 管理连接到虚拟网络:https://docs.azure.cn/zh-cn/api-management/api-management-using-with-internal-vnet?tabs=stv1
 

    推荐阅读