你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

将内部 API 发布给外部用户

Azure API 管理
Azure 应用程序网关
Azure DevOps
Azure Monitor
Azure 虚拟网络

在此方案中,组织使用部署在虚拟网络中的 Azure API 管理在内部合并多个 API。

体系结构

体系结构图显示了外部用户使用的内部 API 的完整生命周期。

下载此体系结构的 Visio 文件

上图介绍了外部用户使用的内部 API 的完整生命周期。

数据流

数据流如下所示:

  1. 开发人员将代码签入到连接到 Azure VM 上安装的 CI/CD 管道的 GitHub 存储库代理。
  2. 代理将生成推送到 ILB App 服务 环境中托管的 API 应用程序。
  3. Azure API 管理通过 API 管理策略中指定的主机头使用上述 API。
  4. API 管理对所有 API 使用App 服务环境 DNS 名称。
  5. 应用程序网关公开API 管理开发人员和 API 门户。
  6. Azure 私人 DNS用于在App 服务环境、API 管理和应用程序网关之间内部路由流量。
  7. 外部用户利用公开的开发人员门户通过应用程序网关公共 IP 使用 API。

组件

  • 通过 Azure 虚拟网络,Azure 资源能够以安全方式彼此通信、与 Internet 通信以及与本地网络通信。
  • Azure 专用 DNS 允许在虚拟网络中解析域名,无需添加自定义 DNS 解决方案。
  • Azure API 管理可帮助组织将 API 发布给外部、合作伙伴和内部开发人员,以使用他们的数据和服务。
  • 应用程序网关是一种 Web 流量负载均衡器,可用于管理 Web 应用程序的流量。
  • 内部负载均衡器App 服务环境是一项Azure App 服务功能,提供完全隔离且专用的环境,用于大规模安全地运行App 服务应用。
  • Azure DevOps 是用于管理开发生命周期的服务,包括用于规划和项目管理、代码管理、生成和发布的功能。
  • Application Insights 是多个平台上面向 Web 开发人员的可扩展应用程序性能管理 (APM) 服务。
  • Azure Cosmos DB 是 Microsoft 提供的全球分布式多模型数据库服务。

备选方法

  • 在部署到 Azure 虚拟网络的 Azure 直接迁移方案中 ,可以通过专用 IP 地址直接寻址后端服务器。
  • 如果使用本地资源,则API 管理实例可以通过 Azure VPN 网关 和站点到站点 Internet 协议安全性(IPSec)VPN 连接或 ExpressRoute 私下访问内部服务,从而生成混合 Azure 和本地方案
  • 可以使用现有或开源 DNS 提供程序,而不是基于 Azure 的 DNS 服务。
  • 通过 API 管理服务公开 API,部署在 Azure 外部的内部 API 仍会受益。

方案详细信息

在此方案中,组织使用Azure 应用程序服务环境(ILB App 服务环境)托管多个 API,他们希望使用虚拟网络中部署的 Azure API 管理(APIM)在内部合并这些 API。 内部 API 管理实例还可以向外部用户公开,以允许充分利用 Api 的全部潜能。 可以通过Azure 应用程序网关将请求转发到内部API 管理服务来实现此外部公开,这反过来又使用App 服务环境中部署的 API。

  • Web API 托管在受保护的 HTTPS 协议上,并将使用 TLS 证书
  • 应用程序网关还通过端口 443 进行配置,以实现安全可靠的出站调用。
  • API 管理服务配置为使用 TLS 证书的自定义域。
  • 查看应用服务环境的建议网络配置
  • 需要明确提及端口 3443 允许 API 管理通过 Azure 门户或 PowerShell 进行管理。
  • 使用 APIM 中的策略为App 服务环境中托管的 API 添加主机标头。 这可确保App 服务环境负载均衡器能够正确转发请求。
  • API 管理接受App 服务环境中托管的所有应用的App 服务环境 DNS 条目。 添加 APIM 策略以显式设置 HOST 标头,以允许App 服务环境负载均衡器区分App 服务环境中的应用。
  • 考虑与 Azure Application Insights 集成,这样还可以通过 Azure Monitor 公开指标用于监视。
  • 如果使用 CI/CD 管道部署内部 API,请考虑 在虚拟网络中的 VM 上生成自己的托管代理。

可能的用例

  • 在客户进行更改后,在内部同步客户地址信息。
  • 通过公开唯一数据资产吸引开发人员使用平台。

注意事项

这些注意事项实施 Azure 架构良好的框架的支柱原则,即一套可用于改善工作负荷质量的指导原则。 有关详细信息,请参阅 Microsoft Azure 架构良好的框架

可靠性

可靠性可确保应用程序符合你对客户的承诺。 有关详细信息,请参阅可靠性支柱概述

可用性

可以将 Azure API 管理服务部署为多区域部署,以实现更高的可用性并减少延迟。 仅在“高级”模式下提供此功能。 在此特定方案中,API 管理服务将从应用服务环境中使用 API。 还可以将 APIM 用于内部本地基础结构上托管的 API。

应用服务环境可利用流量管理器配置文件来分发在应用服务环境中托管的流量,以实现更高的规模和可用性。

复原

此示例方案介绍了有关配置的详细信息,在应用服务环境中托管的 API 应该具有足够的复原力,以处理请求中的错误,最终这些错误由 API 管理服务和应用程序网关进行管理。 在 API 设计中考虑重试和断路器模式。 若需可复原解决方案的通用设计指南,请参阅设计适用于 Azure 的可复原应用程序

安全性

安全性针对蓄意攻击及滥用宝贵数据和系统提供保障措施。 有关详细信息,请参阅安全性支柱概述

由于前面的示例方案完全托管在内部网络上,因此已在安全基础结构(Azure 虚拟网络)部署API 管理和App 服务环境。 可以将应用程序网关与 Microsoft Defender for Cloud 集成,提供一种无缝的方式来阻止、检测和响应环境中的威胁。 有关设计安全解决方案的通用指导,请参阅 Azure 安全性文档

成本优化

成本优化是关于寻找减少不必要的费用和提高运营效率的方法。 有关详细信息,请参阅成本优化支柱概述

以下四个层中提供了 API 管理:开发人员、基本、标准和高级。 在 Azure API 管理定价指导中,可以找到有关这些层的差异的详细指导。

客户可通过添加和删除单元来缩放 API 管理。 每个单元的容量取决于其所在的层。

注意

可以使用开发人员层来评估 API 管理功能。 不应将开发人员层用于生产。

要查看预计成本并根据部署需求进行自定义,可在 Azure 定价计算器中修改缩放单元和应用程序服务实例的数目。

同样,你可以找到应用服务环境定价指导

可以配置应用程序网关定价,具体取决于所需的层和资源。

性能效率

性能效率是指工作负荷能够以高效的方式扩展以满足用户对它的需求。 有关详细信息,请参阅性能效率要素概述

可伸缩性

可以根据多个因素横向扩展 API 管理实例,例如并发连接的数量和速率、配置策略的类型和数量、请求和响应大小以及 API 的后端延迟。 横向扩展实例选项在基本层、标准层和高级层中可用,但在基本层和标准层中受扩展上限的限制。 实例被称为单位,可以在基本层中纵向扩展到两个单位,在标准层中最多四个,在高级层可到任意数量。 还可以使用自动缩放选项根据规则启用横向扩展。

应用服务环境旨在根据定价层限制进行缩放。 可以配置应用服务环境下托管的应用来横向扩展(实例数)或纵向扩展(实例大小),具体取决于应用程序的要求。

在所有全球 Azure 区域中,Azure 应用程序网关自动缩放作为区域冗余 SKU 的一部分提供。 请参阅公共预览功能,了解应用网关自动缩放。

部署此方案

前提条件和假设

  1. 需要购买自定义域名。
  2. 需要为所有自定义域使用 TLS 证书(使用 Azure 证书服务中的通配符证书)。 你还可以购买用于开发测试方案的自签名证书。
  3. 此特定部署为域使用域名 contoso.org 和通配符 TLS 证书。
  4. 部署使用“部署”部分中提到的资源名称和地址空间。 可以配置资源名称和地址空间。

部署并将它们放在一起

部署到 Azure

需要进一步配置使用上述资源管理器模板部署的组件,如下所示:

  1. 具有以下配置的虚拟网络:

    • 名称:ase-internal-vnet
    • 虚拟网络的地址空间:10.0.0.0/16
    • 四个子网
      • DNS 服务 backendSubnet:10.0.0.0/24
      • 内部 API 管理服务 apimsubnet:10.0.1.0/28
      • asesubnetfor ILB App 服务 Environment: 10.0.2.0/24
      • 测试 VM 和内部 DevOps 托管代理 VM 的 VMSubnet:10.0.3.0/24
  2. 私人 DNS服务(公共预览版),因为添加 DNS 服务要求虚拟网络为空。

  3. 使用内部负载均衡器(ILB)选项App 服务环境: aseinternal (DNS: aseinternal.contoso.org)。 部署完成后,上传 ILB 的通配符证书

  4. 将App 服务环境作为位置的App 服务计划

  5. API 应用(为简单起见App 服务) - srasprest (URL: https://srasprest.contoso.org) - ASP.NET 基于模型视图控制器(MVC)的 Web API。 部署后,配置:

    • 使用 TLS 证书的 web 应用
    • 上述应用的 Application Insights:api-insights
    • 为托管在虚拟网络内部的 Web API 创建 Azure Cosmos DB 服务: noderestapidb
    • 在创建的 Azure 私人 DNS 区域中创建 DNS 条目
    • 可以使用 Azure Pipelines 在虚拟机上配置代理,以在内部网络上部署 Web 应用的代码
    • 若要在内部测试 API 应用,请在虚拟网络子网中创建测试 VM
  6. 创建 API 管理服务:apim-internal

  7. 配置服务以连接到子网上的内部虚拟网络: apimsubnet。 部署完成后,请执行以下附加步骤:

    • 使用 TLS 为 APIM 服务配置自定义域
      • API 门户 (api.contoso.org)
      • 开发门户 (portal.contoso.org)
      • 在“API”部分中,使用为 Web 应用的主机标头添加App 服务环境 DNS 名称配置App 服务环境应用
      • 使用上面创建的测试 VM 在虚拟网络内部测试 API 管理服务

    注意

    从 Azure 门户测试 APIM API 仍然无法工作,因为 api.contoso.org 无法公开解析。*

  8. 配置应用程序网关以访问 API 服务: apim-gateway 端口 80。 将 TLS 证书添加到应用程序网关和相应的运行状况探测和 HTTP 设置。 此外,将规则和侦听器配置为使用 TLS 证书。

成功完成上述步骤后,使用应用程序网关公共 DNS 名称在 Web 注册机构 CNAME 条目中配置 DNS 条目api.contoso.orgportal.contoso.orgase-appgtwy.westus.cloudapp.azure.com 验证是否能够从公共访问开发门户,以及是否能够使用 Azure 门户测试 APIM 服务 API。

注意

对 APIM 服务的内部和外部终结点使用相同的 URL 不是一个好做法。

作者

本文由 Microsoft 维护, 最初由以下参与者撰写。

主要作者:

其他参与者:

要查看非公开的 LinkedIn 个人资料,请登录到 LinkedIn。

后续步骤

使用 Azure API 管理迁移 Web 应用