Публикации внутренних интерфейсов API для внешних потребителейPublishing internal APIs to external consumers

В этом сценарии организация разместила несколько API с использованием среды служб приложений(ILB ASE) и хотела бы консолидировать эти API внутри управления API Azure (APIM), развернутых внутри виртуальной сети.In this scenario, an organization has hosted multiple APIs using Application Service Environments(ILB ASE) and would like to consolidate these APIs internally using Azure API Management (APIM) deployed inside a Virtual Network. Внутренний экземпляр управления API может также быть подвержен внешним пользователям, позволяющим использовать весь потенциал API.The internal API Management instance could also be exposed to external users to allow for utilization of the full potential of the APIs. Эта внешняя экспозиция может быть достигнута с помощью запросов на переадресовывание шлюзов приложений во внутреннюю службу управления API, которая, в свою очередь, потребляет API, развернутые в ASE.This external exposure could be achieved using an Application Gateways forwarding requests to the internal API Management service, which in turn consumes the APIs deployed in the ASE.

ArchitectureArchitecture

Диаграмма архитектуры

Вышеупомянутый сценарий охватывает полный жизненный цикл внутренних AA, потребляемых внешними пользователями.The above scenario covers a complete lifecycle of internal APIs getting consumed by the external users.

Путь потока данных выглядит следующим образом:The data flows as follows:

  1. Разработчики проверяют код в репозитории GitHub, подключенном к агенту конвейера CI/CD, установленному на Azure VMDevelopers check in code to a GitHub repository connected to CI/CD pipeline Agent installed on an Azure VM
  2. Агент подталкивает сборку к приложению API, размещенной на ILB ASEThe agent pushes the build to the API application hosted on ILB ASE
  3. API Management потребляет вышеуказанные API через заголовок HOST, указанные в политике управления APIAPI Management consumes the above APIs via HOST Headers specified in API Management policy
  4. API Management использует DNS-имя DNS-среды службы приложений для всех APIAPI Management uses the App Service Environment's DNS name for all the APIs
  5. Приложение Gateway предоставляет разработчика API Management и портал APIApplication Gateway exposes API Management's developer and API portal
  6. Azure Private DNS используется для внутреннего маршрута трафика между ASE, API Management и Application GatewayAzure Private DNS is used to route the traffic internally between ASE, API Management, and Application Gateway
  7. Внешние пользователи используют открытые Dev Portal для потребления AI через общедоступный IP-адрес Application GatewayExternal Users uses exposed Dev Portal to consume the APIs via Application Gateway's public IP

КомпонентыComponents

  • Виртуальная сеть Azure позволяет ресурсам Azure безопасно общаться друг с другом, интернетом и сетевыми сетями.Azure Virtual Network enables Azure resources to securely communicate with each other, the internet, and on-premises networks.
  • Azure Private DNS позволяет разрешать имена доменов в виртуальной сети без необходимости добавлять пользовательское DNS-решение.Azure Private DNS allows domain names to be resolved in a virtual network without needing to add a custom DNS solution.
  • Управление API Azure помогает организациям публиковать API внешним, партнерским и внутренним разработчикам для использования своих данных и служб.Azure API Management helps organizations publish APIs to external, partner, and internal developers to use their data and services.
  • Приложение Gateway является балансизатором нагрузки веб-трафика, который позволяет управлять трафиком на веб-приложения.Application Gateway is a web traffic load balancer that enables you to manage traffic to your web applications.
  • Внутренняя среда службы приложений для обеспечения баланса нагрузки — это функция службы приложений Azure, которая обеспечивает полностью изолированную и выделенную среду для надежного запуска приложений Службы приложений в больших масштабах.Internal Load Balancer App Service Environment is an Azure App Service feature that provides a fully isolated and dedicated environment for securely running App Service apps at high scale.
  • Azure DevOps — это сервис для управления жизненным циклом разработки и включает в себя функции планирования и управления проектами, управления кодом, сборки и выпуска.Azure DevOps is a service for managing your development lifecycle and includes features for planning and project management, code management, build, and release.
  • Application Insights — это расширяемый сервис управления производительностью приложений (APM) для веб-разработчиков на нескольких платформах.Application Insights is an extensible Application Performance Management (APM) service for web developers on multiple platforms.
  • Azure Cosmos DB — это глобально распределенная многомодельная служба баз данных корпорации Майкрософт.Azure Cosmos DB is Microsoft's globally distributed, multi-model database service.

Альтернативные вариантыAlternatives

  • В сценарии подъема и смены Azure, развернутой в виртуальной сети Azure, серверы бэк-энда могут быть непосредственно удалены через частные IP-адреса.In an Azure lift and shift scenario deployed into an Azure Virtual Network, back-end servers could be directly addressed through private IP addresses.
  • При использовании внутренних ресурсов экземпляр Управления API может вернуться к внутренней службе в частном порядке через шлюз Azure VPN и подключение IPSec VPN от сайта или ExpressRoute, что делает гибридный Azure и припредмогательный сценарий.If using on-premises resources, the API Management instance could reach back to the internal service privately via an Azure VPN gateway and site-to-site IPSec VPN connection or ExpressRoute making a hybrid Azure and on-premises scenario.
  • Вместо DNS-сервиса DNS, базирующегося с открытым исходным кодом, можно использовать существующие dNS-провайдеры с открытым исходным кодом.Existing or open-source DNS providers could be used instead of the Azure-based DNS Service.
  • Внутренние API, развернутые за пределами Azure, могут по-прежнему пользоваться преимуществами, разоблачая API через службу управления API.Internal APIs deployed outside of Azure can still benefit by exposing the APIs through API Management Service.

ОсобенностиConsiderations

  • Веб-AI размещаются по защищенному протоколу HTTPS и будут использовать сертификат SSL.The web APIs are hosted over secured HTTPS protocol and will be using an SSL Certificate.
  • Шлюз приложения также настроен по порту 443 для защищенных и надежных исходящих вызовов.The Application Gateway also is configured over port 443 for secured and reliable outbound calls.
  • Служба управления API настроена на использование пользовательских доменов с использованием SSL-сертификатов.The API Management service is configured to use custom domains using SSL certificates.
  • Просмотрите предлагаемую конфигурацию сети для сред службы приложенийReview the suggested network configuration for App Service Environments
  • Необходимо прямоупомянуто упомянуть о порте 3443, позволяющий управлению API управлять через портал Azure или PowerShell.There needs to be an explicit mention about port 3443 allowing API Management to manage via the Azure portal or PowerShell.
  • Использование политики в APIM для добавления заголовка HOST для API, размещенного на ASE.Leverage policies within APIM to add a HOST header for the API hosted on ASE. Это гарантирует, что балансомер нагрузки ASE будет должным образом перенаправить запрос.This ensures that the ASE's load balancer will properly forward the request.
  • Руководство API принимает dNS-запись ASE для всех приложений, размещенных в средах службы приложений.The API Management accepts ASE's DNS entry for all the apps hosted under App Service Environments. Добавьте политику APIM, чтобы четко установить заголовок HOST, чтобы балансизатор нагрузки ASE различал приложения в среде службы приложений.Add an APIM policy to explicitly set the HOST Header to allow the ASE load balancer to differentiate between Apps under the App Service Environment.
  • Рассмотрим интеграцию управления API Azure в Azure Application Insights, которая также отображает метрики через Azure Monitor.Consider Integrating with Azure Application Insights, which also surfaces metrics through Azure Monitor for monitoring.
  • При использовании конвейеров CI/CD для развертывания внутренних AIS рассмотрите возможность создания собственного хостинг-агента на VM внутри виртуальной сети.If using CI/CD pipelines for deploying Internal APIs, consider building your own Hosted Agent on a VM inside the Virtual Network.

ДоступностьAvailability

Служба управления API Azure может быть развернута как многорегионневое развертывание для повышения доступности, а также для сокращения просрили.Azure API Management service could be deployed as a Multi-Region deployment for higher availability and also to reduce latencies. Эта функция доступна только в режиме Premium.This feature is only available in Premium Mode. Служба управления API в данном конкретном сценарии потребляет API из сред службы приложений.The API Management service in this specific scenario consumes APIs from App Service Environments. Можно было бы также использовать APIM для AA, размещенных на внутренней внутренней инфраструктуре.One could also use APIM for APIs hosted on the internal on-premises infrastructure.

Среды службы приложений могут использовать профили диспетчера трафика для распределения трафика, размещенного в средах службы приложений, для более высокого масштаба и доступности.App Service Environments could make use of Traffic Manager profiles to distribute the traffic hosted on App Service Environments for higher scale and availability.

МасштабируемостьScalability

Экземпляры управления API могут быть масштабированы в зависимости от ряда факторов, таких как количество и скорость одновременных подключений, вид и количество настроенных политик, размерзапросов и ответов, а также задняя часть нотности на API.API Management instances could be scaled out depending upon a number of factors like number and rate of concurrent connections, the kind and number of configured policies, request and response sizes, and back-end latencies on the APIs. Масштабирование вариантов экземпляров доступно в базовых, стандартных и премиум-уровнях, но связано верхним пределом шкалы в уровнях ниже премиум-класса.Scaling out instance options are available in Basic, Standard, and Premium Tiers but are bound by an upper scale limit in tiers below premium. Экземпляры называются единицами и могут быть масштабированы до максимум двух единиц в базовом уровне, четырех единиц в стандартном уровне и любого количества единиц в уровне Premium.The instances are referred to as Units and can be scaled up to a max of two units in Basic tier, four units in Standard tier and any number of units in the Premium tier. Параметры автоматического масштабирования также доступны для масштабирования на основе правил.Auto Scaling options are also available to enable scale out based on rules.

Среды службы приложений предназначены для масштабирования с ограничениями, основанными на уровне ценообразования, а приложения, размещенные в средах службы приложений, могут быть настроены для масштабирования (количество экземпляров) или масштабирования (размер экземпляра) в зависимости от требований приложения.App Service Environments are designed for scale with limits based on the pricing tier and the apps hosted under the App Service Environments can be configured to scale out (number of instances) or scale up (instance size) depending upon the requirements of the application.

Автоматическое масштабирование Azure Application Gateway доступно как часть избыточного SKU Зоны во всех глобальных регионах Azure.Azure Application Gateway auto scaling is available as a part of the Zone redundant SKU in all global Azure regions. Ознакомьтесь с общедоступной функцией предварительного просмотра, касающейся масштабирования автоматического масштабирования шлюза Приложения.See the public preview feature regarding App gateway Auto scaling.

БезопасностьSecurity

Поскольку приведенный выше пример полностью размещается во внутренней сети, API Management и ASE уже развернуты на защищенной инфраструктуре (Azure VNet).Since the above example scenario is hosted completely on an internal network, API Management and ASE are already deployed on secured infrastructure (Azure VNet). Шлюзы приложений могут быть интегрированы с Центром безопасности Azure, чтобы обеспечить беспрепятственный способ предотвращения, обнаружения и реагирования на угрозы окружающей среде.Application Gateways can be integrated with Azure Security Center to provide a seamless way to prevent, detect, and respond to threats to the environment. Для получения общих рекомендаций по Azure Security Documentation разработке безопасных решений см.For general guidance on designing secure solutions, see the Azure Security Documentation

УстойчивостьResiliency

Этот пример сценария, хотя больше говорит о конфигурации, API, размещенные в средах службы приложений, должны быть достаточно устойчивыми для обработки ошибок в запросах, которые в конечном итоге управляются службой управления API и шлюзом приложений.This example scenario though talks more about configuration, the APIs hosted on the App Service Environments should be resilient enough to handle errors in the requests, which eventually is managed by the API Management service and Application Gateway. Рассмотрим шаблоны выключателей Retry и Circuit в дизайне API.Consider Retry and Circuit breaker patterns in the API design. Общее руководство по проектированию устойчивых решений см. в разделе Проектирование устойчивых приложений для Azure.For general guidance on designing resilient solutions, see Designing resilient applications for Azure.

Развертывание сценарияDeploy the scenario

Предварительные требования и предположенияPrerequisites and assumptions

  1. Пользовательские доменное имя должны быть приобретены.A custom domain name will need to be purchased.
  2. Сертификат SSL (мы использовали сертификат wild-card от службы сертификатов Azure) для использования сертификата для всех наших пользовательских доменов.An SSL certificate (we used a wild-card certificate from Azure Certificates Service) to use one for all our custom domains. Вы также можете приобрести сертификат, подписанный самостоятельно для сценариев Dev Test.You could also procure a self-signed certificate for Dev Test scenarios.
  3. В этом конкретном развертывании используется доменное имя contoso.org и сертификат SSL подстановочных карт для домена.This specific deployment uses the domain name contoso.org and a wild-card SSL certificate for the domain.
  4. Развертывание использует имена ресурсов и адресные пространства, упомянутые в разделе развертывания, которые могут быть настроены.The deployment is using the resource names and address spaces mentioned in the deployment section, which can be configured.

Развертывание и объединение частейDeployment and putting the pieces together

Развертывание в AzureDeploy to Azure

Компоненты, развернутые с использованием вышеуказанного шаблона управления ресурсами, должны быть дополнительно настроены нижеThe components deployed using the above Resource Manager template needs to be further configured as below

  1. VNet со следующими конфигурациями:VNet with the following configurations:

    • Имя: ase-internal-vnetName: ase-internal-vnet
    • Адресное пространство для VNet: 10.0.0.0/16Address space for VNet: 10.0.0.0/16
    • Четыре подсетиFour Subnets
      • backendSubnet для DNS-сервиса: 10.0.0.0/24backendSubnet for DNS Service: 10.0.0.0/24
      • apimsubnet для службы управления внутренним API: 10.0.1.0/28apimsubnet for Internal API Management Service: 10.0.1.0/28
      • асесубнет для ILB ASE: 10.0.2.0/24asesubnet for ILB ASE: 10.0.2.0/24
      • VMSubnet для тестовых VMs и внутренних DevOps Хостинг Агент VM: 10.0.3.0/24VMSubnet for Test VMs and Internal DevOps Hosted Agent VM: 10.0.3.0/24
  2. Частный сервис DNS (Public Preview) после добавления службы DNS требует, чтобы VNet был пустым.Private DNS service (Public Preview) since adding a DNS service requires the VNet to be empty.

  3. Среда обслуживания приложений с внутренним балансом нагрузки (ILB) вариант: aseinternal (DNS: aseinternal.contoso.org).App Service Environment with Internal Load Balancer (ILB) option: aseinternal (DNS: aseinternal.contoso.org). После завершения развертывания загрузите сертификат wild-card для ILBOnce the Deployment is complete, upload the wild-card cert for the ILB

  4. План обслуживания приложений с ASE как местоположениеApp Service Plan with ASE as location

  5. API App (App Services for simplicity) - srasprest (URL: https://srasprest.contoso.org) - ASP.NET MVC-основанный веб-API.An API App (App Services for simplicity) - srasprest (URL: https://srasprest.contoso.org) – ASP.NET MVC-based web API. После развертывания настроитеAfter the deployment, configure

    • веб-приложение для использования сертификата SSLweb app to use the SSL certificate
    • Приложение Исследования выше приложений: api-инсайтыApplication Insights to the above apps: api-insights
    • Создание службы Cosmos DB для веб-AIS, размещенных внутри VNet: noderestapidbCreate a Cosmos DB service for web APIs hosted internal to VNet: noderestapidb
    • Создание записей DNS в зоне Private DNS, созданнойCreate DNS entries on the Private DNS zone created
    • Можно использовать Azure Pipelines для настройки агентов на виртуальных машинах для развертывания кода для Web App во внутренней сетиYou could make use of Azure Pipelines to configure the agents on Virtual Machines to deploy the code for Web App on internal Network
    • Для внутреннего тестирования приложения API создайте тестV-систему VNet в подсети VNetFor testing the API App internally, create a test VM within the VNet subnet
  6. Создает службу управления API: apim-internalCreates API Management service: apim-internal

  7. Настройте службу для подключения к внутренней Сети ВНет на Subnet: apimsubnet.Configure the service to connect to internal VNet on Subnet: apimsubnet. После завершения развертывания выполните ниже дополнительные шагиAfter the deployment is complete, perform the below additional steps

    • Настройка пользовательских доменов для служб APIM с помощью SSL CertConfigure custom domains for APIM Services using SSL Cert
      • Портал API (api.contoso.org)API portal (api.contoso.org)
      • Портал Дев (portal.contoso.org)Dev Portal (portal.contoso.org)
      • В разделе AI нанастройка приложений ASE с использованием DNS-названия ASE добавлена политика для ЗАголовок HOST для веб-приложенияIn the APIs section, configure the ASE Apps using ASE's DNS name added Policy for HOST Header for the Web app
      • Используйте вышесозданный тест VM для тестирования службы управления API внутри виртуальной сетиUse the above created test VM to test the API Management service internal on the Virtual Network

    Примечание

    Тестирование APIM AIS с портала Azure по-прежнему не будет работать, так как у нас нет api.contoso.org не сможем публично решить»The testing the APIM APIs from Azure portal will still NOT work as we don't have api.contoso.org not be able to publicly resolve*

  8. Настройте шлюз приложений (WAF V1) для доступа к службе APU: apim-шлюз на Port 80.Configure Application Gateway (WAF V1) to access the APU service: apim-gateway on Port 80. Добавьте SSL Certs в шлюз Приложения и соответствующие зонды здоровья и настройки Http.Add SSL Certs to the App Gateway and corresponding Health probes and Http settings. Также настроить правила и слушателей для использования SSL CertAlso configure the Rules and Listeners to use SSL Cert

После успешного завершения вышеуказанных этапов назначайте записи DNS в записях GoDaddy CNAME api.contoso.org и portal.contoso.org с общедоступным dNS-именем App Gateway: ase-appgtwy.westus.cloudapp.azure.com и проверяйте, можете ли вы связаться с порталом Dev от общественности и можете протестировать APIM-сервисы APIs с помощью портала AzureOnce the above steps are successfully completed, Configure the DNS entries in GoDaddy CNAME entries of api.contoso.org and portal.contoso.org with App Gateway's public DNS name: ase-appgtwy.westus.cloudapp.azure.com and verify if you are able to reach the Dev Portal from Public and are able to test the APIM services APIs using Azure portal

Это не лучшая практика, чтобы использовать тот же URL для внутренних и внешних конечных точек для служб APIM (в настоящее время в приведенном выше демо, оба URL-адреса одинаковы). Если мы хотим выбрать, чтобы иметь различные URL-адреса для внутренних и внешних конечных точек, мы могли бы использовать App Gateway WAF v2, который поддерживает перенаправление http и многое другое.It is not a good practice to use same URL for Internal and External endpoints for the APIM services (currently in the above demo, both URLs are same). If we want to choose to have different URLs for internal and external endpoints, we could make use of App Gateway WAF v2, which supports http redirection and much more.

ЦеныPricing

Для службы управления API предлагаются четыре уровня: "Разработка", "Базовый", Стандартный" и "Премиум".API Management is offered in four tiers: developer, basic, standard, and premium. Подробное руководство по различиям этих уровней можно найти на странице Цены на управление API.You can find detailed guidance on the difference in these tiers at the Azure API Management pricing guidance here.

Клиенты могут масштабировать управление API путем добавления и удаления единиц.Customers can scale API Management by adding and removing units. Мощность единиц зависит от их уровня.Each unit has capacity that depends on its tier.

Примечание

Уровень "Разработка" можно использовать для оценки компонентов управления API.The Developer tier can be used for evaluation of the API Management features. Уровень "Разработка" нельзя использовать для рабочей среды.The Developer tier should not be used for production.

Чтобы просмотреть прогнозируемые затраты и настроить потребности развертывания, вы можете изменить количество единиц масштабирования и экземпляров службы приложений в Калькуляторе цен Azure.To view projected costs and customize to your deployment needs, you can modify the number of scale units and App Service instances in the Azure Pricing Calculator.

Аналогичным образом, руководство по ценообразованию среды среды Службы App предоставляется здесьSimilarly, the App Service Environments pricing guidance is provided here

Цены на шлюзы приложений могут быть настроены здесь в зависимости от требуемого уровня и ресурсов.Application Gateway pricing can be configured here depending upon the required tier and resources.

Ознакомьтесь с соответствующим сценарием по миграции устаревших web-API в Управление APICheck out the related scenario on Migrating legacy web APIs to API Management