category
Azure API管理可以部署(注入)在Azure虚拟网络(VNet)中,以访问网络中的后端服务。有关VNet连接选项、要求和注意事项,请参阅:
- 使用Azure API管理的虚拟网络
- API管理注入虚拟网络的网络资源需求
- Using a virtual network with Azure API Management
- Network resource requirements for API Management injection into a virtual network
本文介绍如何在内部模式下为API管理实例设置VNet连接。在此模式下,您只能访问您控制其访问权限的VNet中的以下API管理端点。
- API网关
- 开发者门户
- Direct management
- Git
笔记
- 没有任何API管理终结点在公共DNS上注册。在为ExpressRoute配置DNS之前,端点仍然无法访问。
- 要在此模式下使用自托管网关,还需启用与自托管网关配置端点的专用连接。
在内部模式下使用API管理可以:
- 通过使用Azure VPN连接或Azure ExpressRoute,使托管在私有数据中心的API可由外部第三方安全访问。
- 通过公共网关公开基于云的API和本地API,实现混合云场景。
- 使用单个网关端点管理托管在多个地理位置的API。
连接到内部ExpressRoute
有关特定于外部模式的配置,其中API管理端点可从公共互联网访问,后端服务位于网络中,请参阅将Azure API管理实例部署到虚拟网络-外部模式。
笔记
我们建议您使用Azure Az PowerShell模块与Azure进行交互。若要开始,请参阅安装Azure PowerShell。要了解如何迁移到Az PowerShell模块,请参阅将Azure PowerShell从AzureRM迁移到Az。
先决条件
开始之前,请查看将API管理注入虚拟网络的网络资源要求。
根据托管API管理实例的计算平台的版本(stv2或stv1),某些先决条件有所不同。
提示
使用门户创建或更新现有API管理实例的网络连接时,该实例托管在stv2计算平台上。
stv2
- 【An API Management instance.】API管理实例。有关更多信息,请参阅创建Azure API管理实例。
- 【A virtual network and subnet】与API管理实例位于同一区域和订阅中的虚拟网络和子网。
- 用于连接到API管理实例的子网可能包含其他Azure资源类型。
- 子网不应启用任何委派。子网的“将子网委托给服务”设置应设置为“无”。
- 【A network security group 】连接到上述子网的网络安全组。需要网络安全组(NSG)明确允许入站连接,因为API管理内部使用的负载平衡器默认情况下是安全的,并拒绝所有入站流量。有关具体配置,请参阅本文后面的配置NSG规则。
- 【service endpoints 】对于某些情况,将子网中的服务端点启用到依赖服务,如Azure存储或Azure SQL。有关更多信息,请参阅本文后面使用ExpressRoute或网络虚拟设备将隧道流量强制传输到本地防火墙。
- (可选)标准SKU公共IPv4地址。
- 重要的
- 从2024年5月开始,在内部模式下在VNet中部署(注入)API管理实例或将内部VNet配置迁移到新子网时,不再需要公共IP地址。在外部ExpressRoute模式下,指定公共IP地址是可选的;如果不提供,则会自动配置Azure管理的公共IP地址。在外部VNet模式下,公共IP地址用于运行时API流量。
- 目前,如果在内部模式或外部模式下为VNet中的API管理实例启用区域冗余,则必须指定新的公共IP地址。
如果提供,则IP地址必须与API管理实例和虚拟网络位于相同的区域和订阅中。 - 创建公共IP地址资源时,请确保为其分配DNS名称标签。通常,您应该使用与API管理实例相同的DNS名称。如果更改了它,请重新部署您的实例,以便应用新的DNS标签。
- 为了获得最佳的网络性能,建议使用默认的路由首选项:Microsoft网络。
- 在计划为API管理实例启用区域冗余的区域中创建公共IP地址时,请配置区域冗余设置。
- IP地址的值被分配为该区域中API管理实例的虚拟公用IPv4地址。
- 对于多区域API管理部署,请分别为每个位置配置虚拟网络资源。
stv1
- API管理实例。有关更多信息,请参阅创建Azure API管理实例。
- 与API管理实例位于同一区域和订阅中的虚拟网络和子网。
- 用于连接到API管理实例的子网必须专用于API管理。它不能包含其他Azure资源类型,否则部署将失败。
- 用于连接到API管理实例的子网不应启用任何委派。子网的“将子网委托给服务”设置应设置为“无”。
- 对于某些情况,将子网中的服务端点启用到依赖服务,如Azure存储或Azure SQL。有关更多信息,请参阅本文后面使
- ExpressRoute或网络虚拟设备将隧道流量强制传输到本地防火墙。
- 对于多区域API管理部署,请分别为每个位置配置虚拟网络资源。
启用Vnet连接
使用Azure门户(stv2平台)启用ExpressRoute连接
- 转到Azure门户以查找您的API管理实例。搜索并选择API管理服务。
- 选择您的API管理实例。
- 选择网络>虚拟网络。
- 选择内部访问类型。
- 在提供API管理服务的位置(地区)列表中:
- 选择一个位置。
- 选择虚拟网络和子网。
- 在您正在配置的区域中设置的Azure订阅中可用的资源管理器逻辑节点填充到ListView列表中。
-
选择应用。API管理实例的虚拟网络页面将使用新的VNet和子网选项进行更新。在Azure门户中设置内部ExpressRoute
- 继续为API管理实例的其余位置配置VNet设置。
- 在顶部导航栏中,选择“保存”。
更新API管理实例可能需要15到45分钟。在此过程中,开发人员层会停机。基本SKU和更高SKU在此过程中没有停机时间。
成功部署后,您应该在概览刀片上看到API管理服务的私有虚拟IP地址和公共虚拟IP地址。有关IP地址的更多信息,请参阅本文中的路由。
Azure门户中寻址的公共和私有IP
笔记
由于网关URL未在公共DNS上注册,Azure门户上可用的测试控制台将不适用于内部部署的Direct3D服务。相反,请使用开发人员门户上提供的测试控制台。
使用资源管理器模板(stv2平台)启用连接
Azure资源管理器模板(API版本2021-08-01)
使用Azure PowerShell cmdlet(stv1平台)启用连接
在VNet中创建或更新API管理实例。
Create or update an API Management instance in a VNet.
配置NSG规则
在API管理子网中配置自定义网络规则,以筛选来往API管理实例的流量。我们建议遵循以下NSG最低规则,以确保您的实例正常运行和访问。仔细检查您的环境,以确定可能需要的更多规则。
重要的
根据您对缓存和其他功能的使用情况,您可能需要配置下表中最低规则之外的其他NSG规则。有关详细设置,请参阅虚拟网络配置参考。
对于大多数场景,使用指示的服务标签而不是服务IP地址来指定网络源和目标。
将这些规则的优先级设置为高于默认规则的优先级。
stv2
Source / Destination Port(s) | Direction | Transport protocol | Service tags Source / Destination |
Purpose | VNet type |
---|---|---|---|---|---|
* / [80], 443 | Inbound | TCP | Internet / VirtualNetwork | Client communication to API Management | External only |
* / 3443 | Inbound | TCP | ApiManagement / VirtualNetwork | Management endpoint for Azure portal and PowerShell | External & Internal |
* / 6390 | Inbound | TCP | AzureLoadBalancer / VirtualNetwork | Azure Infrastructure Load Balancer | External & Internal |
* / 443 | Inbound | TCP | AzureTrafficManager / VirtualNetwork | Azure Traffic Manager routing for multi-region deployment | External only |
* / 443 | Outbound | TCP | VirtualNetwork / Storage | Dependency on Azure Storage for core service functionality | External & Internal |
* / 1433 | Outbound | TCP | VirtualNetwork / SQL | Access to Azure SQL endpoints for core service functionality | External & Internal |
* / 443 | Outbound | TCP | VirtualNetwork / AzureKeyVault | Access to Azure Key Vault for core service functionality | External & Internal |
* / 1886, 443 | Outbound | TCP | VirtualNetwork / AzureMonitor | Publish Diagnostics Logs and Metrics, Resource Health, and Application Insights | External & Internal |
DNS配置
在内部VNet模式下,您必须管理自己的DNS,以启用对API管理端点的入站访问。
我们建议:
- 配置Azure DNS专用区域。
- 将Azure DNS专用区域链接到已部署API管理服务的VNet。
了解如何在Azure DNS中设置专用区域。
笔记
API管理服务不侦听其IP地址上的请求。它只响应对其端点上配置的主机名的请求。这些端点包括:
- API gateway
- The Azure portal
- The developer portal
- Direct management endpoint
- Git
访问默认主机名
创建API管理服务(例如,contosointernalvnet)时,默认情况下配置以下终结点:
Endpoint | Endpoint configuration |
---|---|
API Gateway | contosointernalvnet.azure-api.net |
Developer portal | contosointernalvnet.portal.azure-api.net |
The new developer portal | contosointernalvnet.developer.azure-api.net |
Direct management endpoint | contosointernalvnet.management.azure-api.net |
Git | contosointernalvnet.scm.azure-api.net |
访问自定义域名
如果您不想使用默认主机名访问API管理服务,请为所有端点设置自定义域名,如下图所示:
配置DNS记录
在您的DNS服务器中创建记录,以访问可从ListView中访问的端点。将端点记录映射到服务的私有虚拟IP地址。
出于测试目的,您可以更新与部署API管理的VNet连接的子网中的虚拟机上的主机文件。假设您的服务的私有虚拟IP地址为10.1.0.5,您可以按如下方式映射hosts文件。主机映射文件位于%SystemDrive%\drives\etc\hosts(Windows)或/etc/hosts(Linux、macOS)。
Internal virtual IP address | Endpoint configuration |
---|---|
10.1.0.5 | contosointernalvnet.azure-api.net |
10.1.0.5 | contosointernalvnet.portal.azure-api.net |
10.1.0.5 | contosointernalvnet.developer.azure-api.net |
10.1.0.5 | contosointernalvnet.management.azure-api.net |
10.1.0.5 | contosointernalvnet.scm.azure-api.net |
然后,您可以从创建的虚拟机访问所有API管理端点。
路由
为内部虚拟网络中的API管理实例配置了以下虚拟IP地址。
Virtual IP address | Description |
---|---|
Private virtual IP address | A load balanced IP address from within the API Management instance's subnet range (DIP), over which you can access the API gateway, developer portal, management, and Git endpoints. Register this address with the DNS servers used by the VNet. |
Public virtual IP address | Used only for control plane traffic to the management endpoint over port 3443. Can be locked down to the ApiManagement service tag. |
负载平衡的公共和私有IP地址可以在Azure门户的Overview刀片上找到。
有关更多信息和注意事项,请参阅Azure API管理的IP地址。
VIP和DIP地址
动态IP(DIP)地址将被分配给服务中的每个底层虚拟机,并用于访问Contoso和对等网络中的端点和资源。API管理服务的公共虚拟IP(VIP)地址将用于访问公共寻址资源。
如果IP限制列出了VNet或对等VNet中的安全资源,我们建议指定部署API管理服务的整个子网范围,以授予或限制对该服务的访问。
了解有关推荐子网大小的更多信息。
实例
如果您在内部VNet的高级层部署1个容量单位的API管理,将使用3个IP地址:1个用于私有VIP,一个用于两个VM的DIP。如果扩展到4个单元,则子网中的其他DIP将消耗更多的IP。
如果目标端点只允许列出一组固定的DIP,如果将来添加新单元,将导致连接失败。因此,由于子网完全在您的控制之下,我们建议允许在后端列出整个子网。
使用ExpressRoute或网络虚拟设备强制将隧道流量传输到本地防火墙
强制隧道允许您将所有从子网到互联网的流量重定向或“强制”回本地进行检查和审计。通常,您配置并定义自己的默认路由(0.0.0.0/0),强制来自API管理子网的所有流量通过本地防火墙或流向网络虚拟设备。此流量流中断了与API管理的连接,因为出站流量要么在本地被阻止,要么NAT到无法识别的地址集,这些地址集不再与各种Azure端点一起工作。您可以通过以下方法解决此问题:
- 在部署API管理服务的子网上启用服务终结点:
- Azure SQL(如果API管理服务部署到多个区域,则仅在主要区域中需要)
- Azure存储
- Azure事件中心
- Azure密钥保管库(在stv2平台上部署API管理时需要)
通过启用从API管理子网直接到这些服务的端点,您可以使用Microsoft Azure骨干网络,为服务流量提供最佳路由。如果使用具有强制隧道化API管理的服务端点,则不会强制隧道化前面Azure服务的流量。但是,其他API管理服务依赖流量仍然是强制隧道化的。请确保防火墙或虚拟设备不会阻止此流量,否则API管理服务可能无法正常工作。
笔记
我们强烈建议将服务端点直接从API管理子网启用到支持它们的从属服务,如Azure SQL和Azure Storage。但是,某些组织可能要求强制从API管理子网中传输所有流量。在这种情况下,请确保将防火墙或虚拟设备配置为允许此流量。您需要允许每个依赖服务的完整IP地址范围,并在Azure基础架构更改时保持此配置最新。由于此网络流量的强制隧道,您的API管理服务也可能会遇到延迟或意外超时。
- 从互联网到API管理服务的管理端点的所有控制平面流量都通过一组特定的入站IP路由,这些IP由API管理托管,包含在ApiManagement服务标签中。当流量被强制隧道传输时,响应不会对称地映射回这些入站源IP,与管理端点的连接也会丢失。为了克服这一限制,请为ApiManagement服务标记配置一个用户定义的路由(UDR),并将下一跳类型设置为“Internet”,以将流量引导回Azure。
笔记
允许API管理流量绕过本地防火墙或网络虚拟设备并不被视为重大安全风险。API管理子网的推荐配置仅允许端口3443上的入站管理流量来自ApiManagement服务标记包含的Azure IP地址集。建议的UDR配置仅适用于此Azure流量的返回路径。
- (外部VNet模式)由于强制隧道传输引入的不对称路由,尝试从互联网到达API管理网关和开发人员门户的客户端的数据平面流量也将在默认情况下被丢弃。对于每个需要访问的客户端,配置一个具有下一跳类型“Internet”的显式UDR,以绕过防火墙或虚拟网络设备。
- 对于其他强制隧道化API管理服务依赖项,请解析主机名并联系端点。这些措施包括:
- 指标和健康监测
- Azure门户诊断
- SMTP中继
- 开发者门户CAPTCHA
- Azure KMS服务器
有关更多信息,请参阅虚拟网络配置参考。
常见的网络配置问题
此部分已移动。请参阅虚拟网络配置参考。
故障排除
将API管理服务初始部署到子网失败
- 将虚拟机部署到同一子网中。
- 连接到虚拟机,并验证与Azure订阅中以下每个资源的连接:
- Azure存储blob
- Azure SQL数据库
- Azure存储表
- Azure密钥保管库(用于托管在stv2平台上的API管理实例)
重要的
验证连接后,在将API管理部署到子网之前删除子网中的所有资源(当API管理托管在stv1平台上时需要)。
验证网络状态
- 将API管理部署到子网后,使用门户检查实例与依赖项(如Azure存储)的连接。
- 在门户的左侧菜单中,在部署和基础架构下,选择网络>网络状态。
Filter | Description |
---|---|
Required | Select to review the required Azure services connectivity for API Management. Failure indicates that the instance is unable to perform core operations to manage APIs. |
Optional | Select to review the optional services connectivity. Failure indicates only that the specific functionality won't work (for example, SMTP). Failure may lead to degradation in using and monitoring the API Management instance and providing the committed SLA. |
要帮助解决连接问题,请选择:
- 指标-审查网络连接状态指标
- 诊断-在指定的时间段内运行虚拟网络验证器
- 要解决连接问题,请查看网络配置设置并修复所需的网络设置。
增量更新
更改网络时,请参阅NetworkStatus API以验证API管理服务是否未失去对关键资源的访问。连接状态应每15分钟更新一次。
要使用门户将网络配置更改应用于API管理实例,请执行以下操作:
- 在实例的左侧菜单中,在部署和基础架构下,选择网络>虚拟网络。
- 选择应用网络配置。
资源导航链接
托管在stv1计算平台上的API管理实例在部署到Resource Manager VNet子网中时,通过创建资源导航链接来保留子网。如果子网已包含来自其他提供程序的资源,则部署将失败。类似地,当您删除API管理服务或将其移动到其他子网时,资源导航链接将被删除。
将API管理实例重新分配到上一个子网时遇到的挑战
VNet锁-将API管理实例移回其原始子网时,由于VNet锁,可能无法立即重新分配,这需要长达一个小时的时间才能删除。如果原始子网具有其他基于stv1平台的API管理服务(基于云服务),则需要删除这些服务并等待,以便在同一子网中部署基于stv2平台的服务。- 资源组锁-另一种需要考虑的情况是,在资源组级别或更高级别存在范围锁,阻碍了资源导航链接删除过程。若要解决此问题,请删除作用域锁定,并允许API管理服务延迟约4-6小时,以便在删除锁定之前解除与原始子网的链接,从而能够部署到所需的子网。
从ExpressRoute内部对与Microsoft Graph的连接进行故障排除
包括用户使用Microsoft Entra身份提供程序登录开发人员门户在内的功能需要与Microsoft Graph的网络连接。
要排除从ExpressRoute内部连接到Microsoft Graph的故障,请执行以下操作:
- 确保为从API管理实例到Microsoft Graph的出站连接配置了NSG和其他网络规则(使用AzureActiveDirectory服务标记)。
- 确保DNS解析和网络访问graph.microsoft.com。例如,在ExpressRoute中配置一个新的VM,连接到它,并尝试GEThttps://graph.microsoft.com/v1.0/从浏览器或使用cURL、PowerShell或其他工具获取$metadata。
下一步
Learn more about:
- 登录 发表评论
- 21 次浏览
最新内容
- 1 day ago
- 1 day 4 hours ago
- 1 day 5 hours ago
- 3 days 20 hours ago
- 4 days 4 hours ago
- 4 days 4 hours ago
- 4 days 5 hours ago
- 4 days 5 hours ago
- 1 week 1 day ago
- 1 week 1 day ago