Как использовать API7 Enterprise для проксирования gRPC-сервисов?

January 2, 2024

Products

В современном быстро развивающемся технологическом ландшафте gRPC (Google Remote Procedure Call) стал неотъемлемым компонентом многих приложений. Однако, чтобы полностью раскрыть потенциал gRPC, надежный API-шлюз необходим для эффективного управления gRPC-сервисами, предоставляя такие важные функции, как преобразование протоколов, балансировка нагрузки, аутентификация и авторизация.

Независимо от того, знакомы ли вы с gRPC или нет, быстрый 5-минутный просмотр этой статьи даст вам знания о том, как использовать API7 Enterprise для проксирования gRPC-сервисов.

API7 Enterprise и gRPC

Предварительные требования

  1. Установите API7 Enterprise.

  2. Установите grpcurl для имитации взаимодействия клиента gRPC с вашим gRPC-сервером.

  3. Запустите gRPC-сервис для тестирования:

    • API7.ai предоставляет пример gRPC-сервиса для тестирования. Вы также можете запустить его с помощью следующей команды docker:
    docker run -d --name grpc-service -p 50051:50051 --restart always api7/grpc-server-example:1.0.0
    • После запуска используйте grpcurl для просмотра доступного списка gRPC-сервисов и методов:
    $ grpcurl -plaintext 127.0.0.1:50051 list grpc.reflection.v1alpha.ServerReflection helloworld.Greeter helloworld.TestImport $ grpcurl -plaintext 127.0.0.1:50051 list helloworld.Greeter helloworld.Greeter.GetErrResp helloworld.Greeter.Plus helloworld.Greeter.SayHello helloworld.Greeter.SayHelloAfterDelay helloworld.Greeter.SayHelloBidirectionalStream helloworld.Greeter.SayHelloClientStream helloworld.Greeter.SayHelloServerStream

Использование API7 Enterprise для проксирования gRPC-сервисов

Обновление конфигурации экземпляра шлюза

По умолчанию экземпляры API7 Enterprise поддерживают только TLS-зашифрованный HTTP/2 на порту 9443. Для удобства тестирования измените конфигурационный файл экземпляра шлюза в разделе node_listen, добавив порт 9081 для поддержки незашифрованного HTTP/2.

apisix: node_listen: - port: 9080 enable_http2: false - port: 9081 enable_http2: true

После внесения изменений перезапустите docker-compose up -d в каталоге api7-ee, где установлен API7 Enterprise.

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

Далее на панели управления API7 Enterprise настройте соответствующие ресурсы для проксирования подготовленного gRPC-сервиса.

  1. Добавьте сервис с именем grpc-example и выберите gRPC в качестве схемы вышестоящего сервера.

Использование API7 для проксирования gRPC-1

  1. Добавьте маршрут в сервис grpc-example

    • Формат пути маршрута: /{service}/{method}
    • Например, на основе ранее запрошенного списка gRPC-сервисов и методов настройте путь как /helloworld.Greeter/SayHello.

Использование API7 для проксирования gRPC-2

Публикация сервисов для тестирования

После создания сервиса и маршрута опубликуйте сервис в группе шлюзов, чтобы он стал активным.

  1. Нажмите на "Опубликовать сервис", выберите указанную группу шлюзов и выберите сервис для публикации.

  2. Добавьте узел gRPC-сервиса (IP + порт), затем нажмите "Опубликовать".

  3. Протестируйте gRPC-сервис с помощью grpcurl:

    • Используйте файл helloworld.proto, чтобы убедиться, что grpcurl согласует формат запроса и ответа с определением gRPC-сервиса. Файл .proto для этого примера можно найти здесь.
    • Выполните следующую команду, чтобы увидеть успешное проксирование gRPC-сервиса с использованием API7 Enterprise.
    $ grpcurl -plaintext -proto helloworld.proto -d '{"name":"apisix"}' 127.0.0.1:9081 helloworld.Greeter.SayHello { "message": "Hello apisix" }

Заключение

API7 Enterprise обладает более чем 100 встроенными плагинами, охватывающими широкий спектр функций, таких как аутентификация, авторизация, ограничение скорости, логирование и мониторинг. Использование API7 Enterprise для проксирования gRPC-сервисов значительно повышает гибкость, безопасность, производительность и управляемость системы, предоставляя разработчикам и операционным командам мощные инструменты и механизмы управления. Сделайте шаг, чтобы попробовать API7 Enterprise и усилить ваше gRPC-приложение!

Tags: