Что такое Конг?

Kong — это шлюз API, основная цель которого — действовать как инструмент между клиентом и набором серверных сервисов.

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

Он может выполнять общие задачи, которые используются в API, такие как аутентификация пользователей, ограничение скорости и регулирование, что позволяет нам не разрабатывать одни и те же вещи снова и снова для разных сервисов.

Если вы хотите узнать больше о kong, посетите их веб-сайт. В нем много информации. 👉 Ворота Конга

Конг на Докере

Конг работает двумя разными способами:

  • Использование базы данных, в которой мы можем изменять конфигурации Kong во время выполнения.
  • Или используя декларативную конфигурацию файла при запуске.

Давайте посмотрим, как можно использовать Kong с базой данных через Docker…

Это файл docker-compose по умолчанию, который вы можете без особых усилий найти в Интернете. Он содержит экземпляр базы данных PostgreSQL, экземпляр Kong и еще один экземпляр Kong, предназначенный для запуска начальной загрузки базы данных, чтобы Kong мог должным образом функционировать. 👇

version: "3"
networks:
 kong-net:
services:
  kong-database:
    image: postgres:9.6
    restart: always
    networks:
      - kong-net
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: kong
    ports:
      - "5432:5432"
kong-migration:
    image: kong:latest
    command: "kong migrations bootstrap"
    networks:
      - kong-net
    restart: on-failure
    environment:
      KONG_PG_HOST: kong-database
      KONG_PG_USER: user
      KONG_PG_PASSWORD: password
    links:
      - kong-database
    depends_on:
      - kong-database
kong:
    image: kong:latest
    restart: always
    networks:
      - kong-net
    environment:
      KONG_PG_HOST: kong-database
      KONG_PG_USER: user
      KONG_PG_PASSWORD: password
      KONG_ADMIN_LISTEN: '0.0.0.0:8001, 0.0.0.0:8444 ssl'
    depends_on:
      - kong-migration
      - kong-database
    ports:
      - "8000:8000/tcp"
      - "8001:8001/tcp"
      - "8443:8443/tcp"
      - "8444:8444/tcp"

Обратите внимание, что для экземпляра Kong мы открываем много портов. Наиболее важными из них являются 8000 и 8001, и позвольте мне объяснить различия между ними. 8000 и 8443 — это порты к самому шлюзу API (HTTP и HTTPS соответственно), а 8001 и 8444 — это порты к Admin API, где мы можем настроить Kong (HTTP и HTTPS соответственно). Мы увидим, как мы будем использовать оба в дальнейшем.

Если вы впервые используете Docker или использовали его раньше и вам нужно что-то переучить, у самого Docker есть отличная документация здесь, так что идите и ознакомьтесь с ней.

После запуска нашего docker-compose у нас будет запущенный и работающий экземпляр Kong, ничего не настроенный, это просто оболочка, готовая к формированию в нашем распоряжении, так что давайте ее формируем.

Настройка Kong Gateway

Добавить услугу и маршрут

Прежде чем добавлять службу или маршрут, мы должны знать, что каждый из них означает в Kong Gateway.
Таким образом, служба — это имя, которое Kong использует для обозначения вышестоящих API и микрослужб, которыми он управляет. а Маршрут указывает, как (и если) запросы отправляются в Сервис после того, как они достигнут Kong. (У одного Сервиса может быть много Маршрутов.)

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

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

Я использую curl для отправки запросов на настройку Kong, но вы можете использовать что угодно, например Postman.

Чтобы создать сервис на Kong, нам нужно сделать следующий запрос:

curl -i -X POST "http://localhost:8001/services/" --data-urlencode "name=httpbin" --data-urlencode "url=http://httpbin.org"

Это сообщит Конгу, что служба под названием httpbin существует и может быть использована.

И чтобы создать маршрут на Kong, нам нужно сделать вот такой запрос:

curl -i -X POST “http://localhost:8001/services/httpbin/routes" --data-urlencode “name=httpbin" --data-urlencode “paths[]=/httpbin"

Это настраивает Kong так, чтобы все запросы по пути /httpbin отражались в службе httpbin.

Тестирование

Чтобы проверить, все ли было успешно добавлено, мы можем сделать этот запрос.

curl -i -X GET http://localhost:8000/httpbin/get

Это должно вернуть ответ 200 OK, а также увидеть, какие заголовки Kong отправляет вышестоящим API.

Улучшение вашего Конга

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

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

Добавить ограничение скорости

Чтобы глобально добавить ограничение скорости в Kong, нам просто нужно сделать запрос к Admin API со следующим:

curl -i -X POST “http://localhost:8001/plugins” --data-urlencode “name=rate-limiting" --data-urlencode “config.minute=5"

name определяет подключаемый модуль, а config.minute указывает, сколько запросов может обработать Kong, прежде чем он начнет отклонять запросы.
Это означает, что может быть только 5 запросов в минуту, но вы также можете настроить его для запросов по второй запрашивает по часам или даже по годам. Есть и другие переменные конфигурации, которые вы можете проверить здесь.

Тестирование

Ну, это также довольно легко проверить. Давайте воспользуемся единственным настроенным нами маршрутом и начнем делать запросы.

curl -i -X GET http://localhost:8000/httpbin/get

Мы можем сделать 5 запросов и убедиться, что 6-й не пройдет, или мы можем проверить заголовки, которые возвращает нам httpbin , например RateLimit-Limit, в котором будет указано, сколько запросов мы может сделать, и RateLimit-Remaining, указывающее, сколько запросов мы еще можем сделать.

Заворачивать

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

Надеюсь, вы уйдете отсюда с небольшим количеством знаний, и вы будете использовать их в будущем.👋