Поделиться через


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

Примечание.

Планы "Базовый", "Стандартный" и "Корпоративный" будут устарели начиная с середины марта 2025 г. с 3-летнего периода выхода на пенсию. Рекомендуется перейти в приложения контейнеров Azure. Дополнительные сведения см. в объявлении о выходе на пенсию в Azure Spring Apps.

Стандартный план потребления и выделенного плана будет устарел с 30 сентября 2024 г. с полным завершением работы после шести месяцев. Рекомендуется перейти в приложения контейнеров Azure. Дополнительные сведения см. в статье "Миграция потребления Azure Spring Apps Standard" и выделенного плана в приложения контейнеров Azure.

Эта статья относится к:❌ 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.
описание Описание, применяемое к методам в созданной документации 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-адрес для дальнейшего использования.

    Снимок экрана: страница обзора портал Azure Azure Spring Apps с выделенной вкладкой

    Вы также можете использовать 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
    

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

    Снимок экрана: страница портал Azure шлюза Azure Spring Apps Spring Cloud с областью

  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.

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