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

APIM,APIs,功能,网络 · 浏览次数 : 285

小编点评

## APIM 测试页面错误分析 通过日志分析,发现问题发生在APIM测试页面上,在请求发送过程中报错。经过调试,发现问题与虚拟网络的 DNS 解析有关。 **问题分析步骤:** 1. **APIM 网关代理服务器解析**:因为测试页面通过代理服务器进行请求,域名解析到代理服务器的 IP地址。然而,因为内部网络无法解析外网域名,导致请求无法正常发送。 2. **DNS 解析失败导致请求无法发送**:当无法解析域名时,DNS 解析过程无法完成,导致请求无法找到正确的域名服务器地址。 **解决方法:** 1. 在虚拟网络的 DNS服务器中,**添加对域名(apimanagement-cors-proxy-mc.azure-api.cn)**的解析。这可以确保测试页面能够通过正确的域名服务器获取 IP 地址。 2. **直接在当前的VM中修改windows host文件**:您可以修改C:\Windows\System32\drivers\etc目录下的hosts文件,添加以下一行: ``` 202.0.0.0 apimanagement-cors-proxy-mc.azure-api.cn ``` 3. **刷新APIM Test页面,再次点击Test Send 按钮**:完成后,您的测试页面将再次发送请求,并成功连接到您的API服务器。 **注意:** * 建议您在测试之前确保虚拟网络已配置并可用。 * 可以通过修改hosts文件中的域名,在本地测试 API 管理的正常工作。 * 如果您无法修改hosts文件,您可以通过在虚拟网络的DNS服务器中添加解析记录的方法实现域名解析。

正文

问题描述

使用微软API管理服务(Azure API Management),简称APIM。 因为公司策略要求只能内部网络访问,所以启用了VNET集成。集成方式见: (在内部模式下使用 Azure API 管理连接到虚拟网络:https://docs.azure.cn/zh-cn/api-management/api-management-using-with-internal-vnet?tabs=stv1)

 

当APIM配置好后,直接通过CURL命令访问APIM的网关接口(如:curl https://bei3apim.azure-api.cn/httpbin/get -v ),请求响应成功。

但是,直接在门户上访问时,为什么一直都报错 “Could not complete the request. Please try again later.”

问题分析

首先,请求通过APIM 网关已经能成功转发请求到后端服务器,并且返回状态为200。获得正确的返回结果。 

然后,这个问题,只发生在APIM门户的 Test 页面,并且当点击“Test” 按钮后,马上就触发了API 管理提示的错误。

所以,判断这个问题,就发生在APIM门户页面端,是JS的一些执行报错。所以可以通过浏览器开发模式(F12)查看,Console中的输出,检测JS执行的错误消息。

 

谜底揭晓:因为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地址

 

2) 进入VM 的Host文件,添加 IP 域名记录

 3) 刷新APIM Test页面,再次点击Test Send 按钮,请求发送成功!

 

 

[END]

 

参考资料

在内部模式下使用 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功能失败相似的内容: