Стратегия использования Kong API

Я хочу использовать Kong в качестве API-шлюза для всех моих вышестоящих сервисов. И я хочу использовать API-ключи, чтобы мои клиенты могли использовать их для использования некоторых API-интерфейсов, которые им разрешено использовать.

Существует плагин для управления ключами API: https://docs.konghq.com/hub/kong-inc/key-auth/

Но мне интересно, могу ли я добавить свойства к некоторому ключу API или связать его с какой-то конфигурацией.

Позвольте мне объяснить на примере:

У меня 3 apis

  • API 1
  • API 2
  • API 3

На Kong API Gateway я хочу использовать ограничение скорости. Поэтому я хочу сгенерировать ключи API для 2 клиентов с некоторыми свойствами

  • customer X: базовая подписка с ограничением скорости 10 запросов в минуту для API 1 и 20 запросов в минуту для API 2
  • customer Y: премиум-подписка на API 2 с ограничением скорости 5000 запросов в минуту и ​​1000 запросов в минуту для API 3

Поэтому в Конге я создаю 3 сервиса для этих 3 API и добавляю к этому плагин ограничения скорости. Есть ли способ сообщить плагину ограничения скорости (основываясь на ключе API, отправляемом в запросе), какой лимит он должен использовать для только что введенного запроса?

Мне кажется, что мне нужно каждый раз создавать новые сервисы для одних и тех же API с определенным ограничением скорости и определенным значением. Это кажется немного неуправляемым, когда имеешь дело с большим количеством клиентов и API.

Можно ли получить значение ограничения скорости на основе ключа API, который был передан?

Или есть какое-то решение для этого? Или это фактическое поведение, которое мы хотим в шлюзе API, если да, то почему?

0 ответов

Kong Enterprise Edition имеет плагин под названием " Ограничение скорости", который решает эту проблему. Он позволяет вам указать "идентификатор" для каждого плагина ограничения скорости, а для этого конкретного случая вы будете использовать "идентификатор: потребитель". Если вы хотите два разных ограничения скорости для одного и того же API и разных потребителей, например,

  • API2: потребитель X имеет 20 об / мин
  • API2: потребительский имеет 5000 оборотов в минуту

тогда вы должны настроить ограничение скорости на потребителя, а не на API. Кроме того, в своем вопросе вы имеете в виду apis; FYI api начиная с версии v0.13.0, объекты устарели, и вам следует перейти к route/service объекты.

Вы также можете настраивать плагины на уровне потребителя. Это эффективно применяет правильную ограниченную скорость для каждого потребителя (ключ api).

Пример кода из документации:

$ curl -X POST http://kong:8001/consumers/{consumer}/plugins \
    --data "name=rate-limiting" \
     \
    --data "config.second=5" \
    --data "config.hour=10000"

Документация: https://docs.konghq.com/hub/kong-inc/rate-limiting/

Другие вопросы по тегам