使用 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错误消息
问题分析
首先:以上的两个问题,都可以在" "一文中找到答案。
问题一端口问题:添加上文档中所列出的所有必要端口,就可以实现网络连接状态全部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 基础结构负载均衡器
外部和内部