可用性
重要
此功能在 API 管理的“高级”和“开发人员”层中可用。
可将 Azure API 管理部署(注入)在 Azure 虚拟网络 (VNet) 内部,以访问该网络中的后端服务。 有关 VNet 连接选项、要求和注意事项,请参阅:
本文介绍如何在内部模式下为 API 管理实例设置 VNet 连接。 在这种模式下,只能在由你控制的 VNet 内访问下列 API 管理终结点。
- API 网关
- 开发人员门户
- 直接管理
- Git
在内部模式中使用 API 管理可以:
- 通过使用 Azure VPN 连接或 Azure ExpressRoute,使专用数据中心内托管的 API 可由其外部的第三方安全地访问。
- 通过公共网关公开基于云的 API 和本地 API,以便启用混合云方案。
- 使用单一网关终结点管理托管在多个地理位置的 API。
              
               
              
              
            
对于特定于外部模式的配置,可以从公共 Internet 访问 API 管理终结点,而后端服务位于网络中,请参阅将 Azure API 管理实例部署到虚拟网络 - 外部模式。
注意
建议使用 Azure Az PowerShell 模块与 Azure 交互。 请参阅安装 Azure PowerShell 以开始使用。 若要了解如何迁移到 Az PowerShell 模块,请参阅 将 Azure PowerShell 从 AzureRM 迁移到 Az。
重要
更改 API 管理服务的基础结构(例如配置自定义域、添加 CA 证书、缩放、虚拟网络配置、可用性区域更改和区域添加)可能需要 15 分钟或更长时间才能完成,具体取决于服务层和部署大小。 对于具有更大规模单位或多区域配置的实例,预期时间更长。
当服务正在更新时,无法进行其他服务基础结构更改。 但是,可以配置 API、产品、策略和用户设置。 该服务不会经历网关停机(开发人员层除外)。
先决条件
- API 管理实例。 有关详细信息,请参阅创建 Azure API 管理实例。
- 虚拟网络和子网位于 API 管理实例所在的区域和订阅中。 - 子网必须专用于 API 管理实例。 若尝试将 Azure API 管理实例部署到包含其他资源的资源管理器 VNET 子网,则部署将失败。 
启用 VNet 连接
使用 Azure 门户启用 VNet 连接
- 转到 Azure 门户,查找 API 管理实例。 搜索并选择“API 管理服务”。
- 选择你的 API 管理实例。
- 选择“网络”“虚拟网络”。
- 选择“内部”访问类型。
- 在配置 API 管理服务的地区(区域)列表中: - 选择位置。
- 选择“虚拟网络”和“子网”。
- 系统将在 VNet 列表中填充你所配置区域内设置的 VNet 订阅中的可用资源管理器虚拟网络。
 
 
- 选择“应用”。 API 管理实例的“虚拟网络”页面会更新为包含您的新的 VNet 和子网选项。
              
                
- 继续为 API 管理实例的其余位置配置 VNet 设置。
- 在顶部导航栏中选择“保存”。
成功部署后,你应该能在“概述”边栏选项卡中查看你 API 管理服务的专用虚拟 IP 地址和公共虚拟 IP 地址。 有关 IP 地址的详细信息,请参阅本文中的路由。
              
               
              
              
            
注意
由于网关 URL 未在公共 DNS 上注册,Azure 门户上提供的测试控制台不适用于内部 VNet 部署的服务。 应改用开发人员门户上提供的测试控制台。
使用资源管理器模板启用连接
- Azure 资源管理器模板(API 版本 2021-08-01) 
配置 NSG 规则
在 API 管理子网中配置自定义网络规则,以筛选进出 API 管理实例的流量。 建议使用以下最低 NSG 规则,以确保正确操作和访问实例。
重要
根据您对监视和其他功能的使用情况,您可能需要配置除下表中的最小规则之外的其他 NSG 规则。 有关详细设置,请参阅虚拟网络配置参考。
- 在大多数情况下,请使用指示的服务标记(而不是服务 IP 地址)来指定网络源和目标。
- 将这些规则的优先级设置为高于默认规则的优先级。
| 源/目标端口 | 方向 | 传输协议 | 服务标记 源/目标 | 用途 | VNet 类型 | 
|---|---|---|---|---|---|
| * / [80], 443 | 入站 | TCP | Internet/VirtualNetwork | 客户端与 API 管理的通信 | 仅外部 | 
| * / 3443 | 入站 | TCP | ApiManagement / VirtualNetwork | Azure 门户和 PowerShell 的管理端点 | 外部和内部 | 
| * / * | 入站 | TCP | AzureLoadBalancer /VirtualNetwork | Azure 基础结构负载均衡器(高级服务层级所需) | 外部和内部 | 
| * / 443 | 出站 | TCP | 虚拟网络 / 存储 | 与 Azure 存储的依赖关系 | 外部和内部 | 
| * / 1433 | 出站 | TCP | VirtualNetwork /SQL | 访问 Azure SQL 终结点 | 外部和内部 | 
DNS 配置
在内部 VNet 模式下,必须管理自己的 DNS,才能对 API 管理终结点进行入站访问。
我们建议:
- 配置 Azure DNS 专用区域。
- 将 Azure DNS 专用区域链接到已部署 API 管理服务的 VNet。
了解如何在 Azure DNS 中设置专用区域。
注意
API 管理服务不会侦听其 IP 地址上的请求。 它仅响应对其终结点上配置的主机名发出的请求。 这些终结点包括:
- API 网关
- Azure 门户
- 开发人员门户
- 直接管理端点
- Git
基于默认主机名的访问权限
当你创建 API 管理服务(例如,contosointernalvnet)时,将默认配置以下终结点:
| 端点 | 终结点配置 | 
|---|---|
| API 网关 | contosointernalvnet.azure-api.cn | 
| 开发人员门户 | contosointernalvnet.portal.azure-api.cn | 
| 新的开发人员门户 | contosointernalvnet.developer.azure-api.cn | 
| 直接管理端点 | contosointernalvnet.management.azure-api.cn | 
| Git | contosointernalvnet.scm.azure-api.cn | 
基于自定义域名的访问权限
如果不想通过默认主机名访问 API 管理服务,则可为所有终结点设置自定义域名,如下图所示:
              
               
              
              
            
配置 DNS 记录
在你的 DNS 服务器中创建记录,以访问可从 VNet 中访问的终结点。 将终结点记录映射到服务的专用虚拟 IP 地址。
出于测试目的,可以在连接到部署了 API 管理的 VNet 的子网中的虚拟机上更新主机文件。 假设服务的专用虚拟 IP 地址为 10.1.0.5,可按下面所示映射 hosts 文件。 主机映射文件位于 %SystemDrive%\drivers\etc\hosts (Windows) 或 /etc/hosts(Linux、macOS)。
| 内部虚拟 IP 地址 | 终结点配置 | 
|---|---|
| 10.1.0.5 | contosointernalvnet.azure-api.cn | 
| 10.1.0.5 | contosointernalvnet.portal.azure-api.cn | 
| 10.1.0.5 | contosointernalvnet.developer.azure-api.cn | 
| 10.1.0.5 | contosointernalvnet.management.azure-api.cn | 
| 10.1.0.5 | contosointernalvnet.scm.azure-api.cn | 
然后即可从创建的虚拟机访问所有 API 管理终结点。
路线规划
为内部虚拟网络中的 API 管理实例配置以下虚拟 IP 地址。
| 虚拟 IP 地址 | 说明 | 
|---|---|
| 专用虚拟 IP 地址 | 来自 API 管理实例子网范围内部的负载均衡 IP 地址 (DIP),通过该地址可以访问 API 网关、开发人员门户、管理和 Git 终结点。 用 VNet 使用的 DNS 服务器注册此地址。 | 
| 公共虚拟 IP 地址 | 仅用于通过端口 3443 传输到管理终结点的控制平面流量。 可以锁定到 ApiManagement 服务标记。 | 
负载均衡的公共和专用 IP 地址可以在 Azure 门户的“概述”边栏选项卡上找到。
有关详细信息和注意事项,请参阅 Azure API 管理的 IP 地址。
VIP 和 DIP 地址
动态 IP (DIP) 地址将分配给服务中每个基础虚拟机,用于访问 VNet 和对等 VNet 中的终结点和资源。 API 管理服务的公共虚拟 IP (VIP) 地址将用于访问面向公共的资源。
如果使用 IP 限制列表保护 VNet 或对等 VNet 内的资源,那么建议指定部署 API 管理服务的整个子网范围,以授予或限制该服务的访问权限。
详细了解建议的子网大小。
示例
如果在高级层上的内部 VNet 中部署 1 个容量单位的 API 管理,则会使用 3 个 IP 地址:1 个地址用于专用 VIP,另外两个地址用于两个 VM 的 DIP。 如果横向扩展到 4 个单位,则会将子网中的其他 IP 用于附加的 DIP。
如果目标终结点上只有固定的一组 DIP 加入了允许列表,则将来添加新单位会导致连接失败。 出于此原因,并且由于子网完全由你控制,我们建议将后端中的整个子网加入允许列表。
使用 ExpressRoute 或网络虚拟设备,强制通过隧道将流量传输到本地防火墙
借助强制隧道技术,可以将来自子网的所有流向互联网的流量重定向或“强制”返回到本地数据中心,以进行监控和审计。 通常可以通过配置及定义自己的默认路由 (0.0.0.0/0),以使来自 API 管理子网的所有流量强制穿过本地防火墙或流入网络虚拟设备。 此流量流会中断与 API 管理的连接,因为出站流量会在本地遭到阻止,或者已经过网络地址转换处理,变为一组无法再与各种 Azure 终结点配合工作的无法识别的地址。 可通以下方法解决此问题:
- 在部署以下服务的 API 管理所在的子网上启用服务终结点: - Azure SQL(仅在 API 管理服务部署到多个区域的情况下主要区域才需要使用)
- Azure 存储
- Azure 事件中心
- Azure 密钥保管库(在 stv2平台上部署 API 管理时需要)
 - 通过直接从 API 管理子网为这些服务启用终结点,可以使用 Azure 主干网络为服务流量提供最佳路由。 如果将服务终结点用于强制隧道 API 管理,则上述 Azure 服务的流量不会强制隧道。 然而,其他 API 管理服务的依赖流量仍被强制通过隧道。 确保防火墙或虚拟设备不会阻止此流量,否则 API 管理服务可能无法正常工作。 - 注意 - 我们强烈建议直接从 API 管理子网启用服务终结点,使之成为支持它们的依赖服务(例如 Azure SQL 和 Azure 存储)。 但是,某些组织可能要求强制通过隧道传送来自API 管理子网的所有流量。 在这种情况下,请确保将防火墙或虚拟设备配置为允许此流量。 你需要允许每个依赖服务的完整 IP 地址范围,并在 Azure 基础结构更改时使此配置保持最新。 由于强制通过隧道传送此网络流量,API 管理服务也可能会遇到延迟或意外超时。 
- 所有从 Internet 传输至 API 管理服务之管理终结点的控制平面流量均通过由 API 管理托管的一组特定入站 IP 进行路由。 当强制通过隧道传输流量时,响应不会对称地映射回这些入站源 IP,并且与管理终结点的连接也会丢失。 若要克服此限制,请为这些入站 IP 配置用户定义的路由 (UDR),并将下一跃点类型设置为“Internet”,以将流量引导回 Azure。 配置 ApiManagement 服务标记,或查找控制平面 IP 地址中记录的控制平面流量的入站 IP 集。 - 重要 - 请仅在某些网络方案需要控制平面 IP 地址时,才为网络访问规则和路由配置这些 IP 地址。 建议使用 ApiManagement 服务标记而不要使用控制平面 IP 地址,以防止在基础结构的改进需要对 IP 地址进行更改时出现停机。 - 注意 - 允许“API 管理”的管理流量绕过本地防火墙或网络虚拟应用程序不视为重大安全风险。 API 管理子网的推荐配置只允许通过端口 3443 的入站管理流量,该流量仅限于来自 ApiManagement 服务标记所包含的 Azure IP 地址集。 建议的 UDR 配置仅适用于此 Azure 流量的返回路径。 
- (外部 VNet 模式)尝试从 Internet 访问 API 管理网关和开发人员门户的客户端数据平面流量也将默认丢弃,这是由于强制隧道引入的非对称路由路径所致。 对于需要访问权限的每个客户端,请配置下一跃点类型为“Internet”的显式 UDR,以绕过防火墙或虚拟网络设备。 
- 对于强制通过隧道传输流量的其他 API 管理服务依赖项,应解析主机名并访问相应终结点。 其中包括: - 指标和健康监控
- Azure 门户诊断功能
- SMTP 中继
- 开发人员门户验证码
- Azure KMS 服务器
 
有关更多信息,请参阅虚拟网络配置参考。
常见网络配置问题
本部分已移到其他位置。 请参阅虚拟网络配置参考。
故障排除
- 在子网中初次部署 API 管理服务失败
- 将虚拟机部署到相同子网。
- 连接到虚拟机,并验证与 Azure 订阅中以下其中一项资源的连接:- Azure 存储 Blob
- Azure SQL 数据库
- Azure 存储表
- Azure Key Vault
 
 
重要
验证连接性后,先删除子网中的所有资源,然后再将 API 管理部署到子网。
- 验证网络连接状态 - 在将 API 管理部署到子网后,应使用门户来检查实例与依赖项(如 Azure 存储)之间的连接性。
- 在门户的左侧菜单中的“部署和基础结构”下,选择“网络连接状态” 。
   - 筛选器 - 说明 - 必需 - 选择“必需”,以查看 API 管理与必需 Azure 服务之间的连接性。 如果失败,则表示该实例无法执行核心操作来管理 API。 - 可选 - 选择以查看可选服务的连接性。 如果连接失败,仅表示特定功能(如 SMTP)将无法正常工作。 失败可能会导致使用和监控 API 管理实例的性能下降,并影响提供承诺的 SLA。 - 若要解决连接问题,请查看网络配置设置并修复所需的网络设置。 
- 增量更新 
 更改网络时,请参阅 NetworkStatus API,以验证 API 服务是否仍具有关键资源的访问权限。 连接状态应每 15 分钟更新一次。- 若要使用门户来应用对 API 管理实例的网络配置更改,请执行以下操作: - 在实例的左侧菜单中的“部署和基础结构”下,选择“虚拟网络”。
- 选择“应用网络配置”。
 
- 资源导航链接 
 托管在计算平台上的 APIM 实例在部署到某个资源管理器 VNET 子网后,将通过创建资源导航链接来保留该子网。 如果子网已包含来自其他提供程序的资源,则部署将失败。 同样,当删除 API 管理服务或将其移至其他子网时,资源导航链接也将会删除。
相关内容
了解有关以下方面的详细信息: