Использование Шлюза Spring Cloud

Примечание.

Azure Spring Apps — это новое название службы Azure Spring Cloud. Старое название будет еще некоторое время встречаться в наших материалах, пока мы не обновим ресурсы, такие как снимки экрана, видео и схемы.

Эта статья относится к:❌ Basic/Standard ✔️ Enterprise

В этой статье показано, как использовать шлюз VMware Spring Cloud с планом Azure Spring Apps Enterprise для маршрутизации запросов к приложениям.

VMware Spring Cloud Gateway — это коммерческий компонент VMware Tanzu на основе проекта Шлюза Spring Cloud с открытым исходным кодом. Spring Cloud Gateway обрабатывает перекрестные проблемы для команд разработки API, таких как единый вход (SSO), управление доступом, ограничение скорости, устойчивость, безопасность и многое другое. Вы можете ускорить доставку API с помощью современных собственных схем работы в облаке и любого языка программирования, выбранного для разработки API.

Spring Cloud Gateway включает следующие функции:

  • Динамическая конфигурация маршрутизации, независимо от отдельных приложений, которые могут применяться и изменяться без повторной компиляции.
  • Фильтры маршрутов коммерческого API для переноса авторизованных утверждений веб-маркера JSON (JWT) в службы приложений.
  • Авторизация сертификата клиента.
  • Подходы к ограничению скорости.
  • Конфигурация разбиения цепи.
  • Поддержка доступа к службам приложений с помощью учетных данных проверки подлинности HTTP Basic.

Чтобы интегрироваться с порталом API для VMware Tanzu, VMware Spring Cloud Gateway автоматически создает документацию OpenAPI версии 3 после любых добавлений или изменений конфигурации маршрута.

Необходимые компоненты

Настройка маршрутов

В этом разделе описывается, как добавлять, обновлять и управлять маршрутами API для приложений, использующих Шлюз Spring Cloud.

Определение конфигурации маршрута включает следующие части:

  • URI OpenAPI: этот URI ссылается на спецификацию OpenAPI. Вы можете использовать общедоступную конечную точку URI, https://petstore3.swagger.io/api/v3/openapi.json например или созданный URI, например http://<app-name>/{relative-path-to-OpenAPI-spec}, имя <app-name> приложения в Azure Spring Apps, включающее определение API. Поддерживаются спецификации OpenAPI 2.0 и OpenAPI 3.0. Спецификация отображается на портале API, если она включена.
  • маршруты: список правил маршрутизации для направления трафика в приложения и применения фильтров.
  • протокол: внутренний протокол приложения, в который Spring Cloud шлюз направляет трафик. Поддерживаемые значения протокола имеют HTTP или HTTPSимеют значение по умолчанию HTTP. Чтобы защитить трафик из Spring Cloud Gateway в приложение с поддержкой HTTPS, необходимо задать протокол HTTPS в конфигурации маршрута.
  • Маршруты уровня приложения. Существует три свойства маршрута, которые можно настроить на уровне приложения, чтобы избежать повторения во всех или большинстве маршрутов в конфигурации маршрута. Конкретное правило маршрутизации переопределяет правило маршрутизации на уровне приложения для того же свойства. Вы можете определить следующие свойства на уровне приложения: predicates, filtersи ssoEnabled. Если вы используете функцию для определения маршрутов, единственным свойством OpenAPI URI маршрутизации на уровне приложения является поддержка filters.

Чтобы создать конфигурацию маршрута, используйте следующую команду. Значение --app-name должно быть именем приложения, размещенного в Azure Spring Apps, к которому направляется запрос.

az spring gateway route-config create \
    --name <route-config-name> \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --app-name <app-name> \
    --routes-file <routes-file.json>

В следующем примере показан JSON-файл, переданный --routes-file параметру в команде create:

{
   "predicates": [
      "<app-level-predicate-of-route>",
   ],
   "ssoEnabled": false,
   "filters": [
      "<app-level-filter-of-route>",
   ],
   "openApi": {
      "uri": "<OpenAPI-URI>"
   },
   "protocol": "<protocol-of-routed-app>",
   "routes": [
      {
         "title": "<title-of-route>",
         "description": "<description-of-route>",
         "predicates": [
            "<predicate-of-route>",
         ],
         "ssoEnabled": true,
         "filters": [
            "<filter-of-route>",
         ],
         "tags": [
            "<tag-of-route>"
         ],
         "order": 0
      }
   ]
}

В следующей таблице перечислены определения маршрутов. Все свойства являются необязательными.

Свойство Описание
title Заголовок, применяемый к методам в созданной документации OpenAPI.
description Описание, применяемое к методам в созданной документации OpenAPI.
uri Полный универсальный код ресурса (URI), который переопределяет имя приложения, к которому направляется запрос.
ssoEnabled Значение, указывающее, следует ли включить проверку единого входа. См. раздел "Настройка единого входа".
tokenRelay Передает маркер удостоверения пользователя, прошедшего проверку подлинности, в приложение.
Предикаты Список предикатов. См . доступные предикаты.
фильтры Список фильтров. См . доступные фильтры.
заказ Порядок обработки маршрута. Более низкий порядок обрабатывается с более высоким приоритетом, как в Spring Cloud Gateway.
tags Теги классификации, применяемые к методам в созданной документации OpenAPI.

Примечание.

Из-за соображений безопасности или совместимости в Azure Spring Apps поддерживаются не все фильтры и предикаты. Следующие возможности не поддерживаются:

  • BasicAuth
  • JWTKey

Использование маршрутов для Шлюза Spring Cloud

Выполните следующие действия, чтобы создать пример приложения с помощью Spring Cloud Gateway.

  1. Используйте следующую команду, чтобы создать тестовое приложение с именем test-app в Azure Spring Apps:

    az spring app create \
        name test-app \
        resource-group <resource-group-name> \
        service <Azure-Spring-Apps-instance-name>
    
  2. Назначьте шлюзу общедоступную конечную точку, через которую вы будете к нему обращаться.

    Чтобы просмотреть состояние выполнения и ресурсы, предоставленные Шлюзу Spring Cloud, откройте экземпляр Azure Spring Apps в портал Azure, выберите раздел Spring Cloud Gateway, а затем нажмите кнопку "Обзор".

    Чтобы назначить общедоступную конечную точку, нажмите кнопку "Да" рядом с назначением конечной точки. URL-адрес отображается через несколько минут. Сохраните URL-адрес для дальнейшего использования.

    Screenshot of Azure portal Azure Spring Apps overview page with 'Assign endpoint' highlighted.

    Вы также можете использовать Azure CLI для назначения конечной точки. Чтобы назначить конечную точку, используйте следующую команду.

    az spring gateway update \
        --resource-group <resource-group-name> \
        --service <Azure-Spring-Apps-instance-name> \
        --assign-endpoint true
    
  3. Создайте правило для доступа к конечной точке работоспособности проверка тестового приложения через Spring Cloud Gateway.

    Сохраните следующее содержимое в файл test-api.json . Эта конфигурация включает фильтр RateLimit, который позволяет 20 запросов каждые 10 секунд и фильтр RewritePath, который позволяет конечной точке запроса достичь стандартной конечной точки работоспособности Spring Boot проверка.

    {
      "protocol": "HTTP",
      "routes": [
        {
          "title": "Test API",
          "description": "Retrieve a health check from our application",
          "predicates": [
            "Path=/test/api/healthcheck",
            "Method=GET"
          ],
          "filters": [
            "RateLimit=20,10s",
            "RewritePath=/api/healthcheck,/actuator/health"
          ],
          "tags": [
            "test"
          ]
        }
      ]
    }
    

    Затем используйте следующую команду, чтобы применить правило к приложению test-app:

    az spring gateway route-config create \
        --name test-api-routes \
        --resource-group <resource-group-name> \
        --service <Azure-Spring-Apps-instance-name> \
        --app-name test-app \
        --routes-file test-api.json
    

    Вы также можете просмотреть маршруты на портале, как показано на следующем снимке экрана:

    Screenshot of Azure portal Azure Spring Apps Spring Cloud Gateway page showing 'Routing rules' pane.

  4. Используйте следующую команду, чтобы получить доступ к test health check API через конечную точку шлюза:

    curl https://<endpoint-url>/test/api/healthcheck
    
  5. Используйте следующие команды для запроса правил маршрутизации:

    az spring gateway route-config show \
        --name test-api-routes \
        --query '{appResourceId:properties.appResourceId, routes:properties.routes}'
    
    az spring gateway route-config list \
        --query '[].{name:name, appResourceId:properties.appResourceId, routes:properties.routes}'
    

Использование фильтров

Проект Шлюза Spring Cloud с открытым исходным кодом включает множество встроенных фильтров для использования в маршрутах шлюза. Spring Cloud Gateway предоставляет множество пользовательских фильтров в дополнение к фильтрам, включенным в проект OSS.

В следующем примере показано, как применить фильтр к маршруту AddRequestHeadersIfNotPresent :

[
  {
    "predicates": [
      "Path=/api/**",
      "Method=GET"
    ],
    "filters": [
      "AddRequestHeadersIfNotPresent=Content-Type:application/json,Connection:keep-alive"
    ]
  }
]

Затем примените определение маршрута с помощью следующей команды Azure CLI:

az spring gateway route-config create \
    --name <route-config-name> \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --app <app-name>
    --routes-file <json-file-with-routes>

Дополнительные сведения о доступных фильтрах маршрутов см. в статье "Использование фильтров маршрутов шлюза VMware Spring Cloud" с планом Azure Spring Apps Enterprise.

Следующие шаги