Тык предлагает различные продукты для управления API и сервисами. Ядром его продуктовой палитры является API Gateway с открытым исходным кодом. Он полностью разработан на Go и может служить прокси для REST, GraphQL и других сервисов. В этом руководстве описывается, как запустить API Gateway с Docker.

Что вам понадобится

  • Докер
  • Клиент REST - в примерах я буду использовать HTTPie, но работает любой клиент.

Запустите Tyk Gateway с помощью Docker

Для запуска Tyk Gateway необходимо запустить Redis и, конечно же, сам Tyk Gateway. Следуйте приведенным ниже инструкциям, чтобы все заработало.

1. Настроить сеть

$ docker network create tyk

2. Вытяните и запустите Redis
Я использую Redis 5.0.10 вместо последней версии, потому что это последняя поддерживаемая версия согласно Tyk docs. Обратите внимание, что запуск Redis подобным образом не является предпочтительным для производственной среды. Redis должен быть высокодоступным и развернутым как кластер.

$ docker pull redis:5.0.10
$ docker run -itd --rm --name redis --network tyk -p 6379:6379 redis:5.0.10

3. Создать конфигурацию Tyk

Создайте новый каталог, в котором будут храниться ваша конфигурация и определения API. Кроме того, создайте новый файл, содержащий следующий JSON. Я бы предложил tyk.conf в качестве имени для этого файла. Поскольку мы используем Tyk API Gateway без каких-либо других (корпоративных) продуктов, эта конфигурация основана на tyk.standalone.conf в этом репозитории. Я удалил некоторые атрибуты, которые пока не важны. Самым важным изменением, которое я сделал, является удаление secret, поскольку мы установим его через переменную среды, чтобы не отображать его в конфигурации.

Большинство значений говорят сами за себя. Перейдите в Документацию Tyk, чтобы узнать о них больше.

4. Вытяните и запустите Tyk Gateway

Пришло время запустить API Gateway. Выполните указанные ниже команды, чтобы получить образ Docker для шлюза API и запустить его.

$ docker pull tykio/tyk-gateway:latest
$ docker run -d \
  --name tyk_gateway \
  --network tyk \
  -p 8080:8080 \
  -e TYK_GW_SECRET=[YOUR-SECRET] \
  -v $(pwd)/tyk.conf:/opt/tyk-gateway/tyk.conf \
  -v $(pwd)/apps:/opt/tyk-gateway/apps \
  tykio/tyk-gateway:latest

Ниже объясняются аргументы команды run:

  • --name tyk_gateway: Устанавливает имя контейнера.
  • --network tyk: подключает контейнер к сети tyk.
  • -p 8080:8080: открывает порт 8080 контейнера для порта 8080 вашей системы.
  • -e TYK_GW_SECRET=[YOUR-SECRET]: устанавливает переменную среды, в которой хранится ваш секрет.
  • -v $(pwd)/tyk.conf:/opt/tyk-gateway/tyk.conf: Bind монтирует конфигурацию, которую мы создали на предыдущем шаге, в файл конфигурации внутри контейнера.
  • -v $(pwd)/apps:/opt/tyk-gateway/apps: Bind монтирует каталог приложения в нашей текущей папке в каталог opt/tyk-gateway/apps внутри контейнера.

5. Убедитесь, что все настроено правильно

Чтобы убедиться, что API Gateway запущен и работает, вы можете просто отправить GET запрос на /hello. Ответ должен быть похож на напечатанный ниже JSON.

Изменить конфигурацию Tyk

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

ПРИМЕЧАНИЕ: Vim не сохраняет файл напрямую, а создает новый файл и копирует его на место. Таким образом, индексный дескриптор файла изменяется, и сохранение файла прерывает монтирование привязки. Чтобы этого избежать, вам нужно установить set backupcopy=yes в vim. Если вы хотите сделать этот параметр постоянным, вам нужно добавить его в файл ~/.vimrc. Если этого файла не существует, вы можете просто создать его, и vim заметит это.

Теперь все, что осталось сделать, это перезагрузить API Gateway. Этого можно добиться с помощью GET вызова /tyk/reload.

Добавить API

Теперь, когда API Gateway запущен и работает, пора добавить к нему API. Вы можете добавить API, сделав запрос к REST API шлюза API или добавив определение API в папку /opt/tyk-gateway/apps, которую мы смонтировали в каталог ./apps ранее. Я воспользуюсь вторым вариантом в этом руководстве, так как предпочитаю иметь настраиваемые файлы. Если вы выберете первый вариант, вы можете просто отправить POST запрос на /tyk/apis, который содержит определение API в своем теле. Не забудьте указать в этом запросе заголовок x-tyk-authorization.

Мы добавим API, доступный по адресу /httpbin, и будем передавать запросы к https://httpbin.org. Минимальную конфигурацию этого API можно найти в приведенном ниже списке. Опять же, описание всех атрибутов можно найти в документации Tyk.

Перейдите в ./apps каталог, созданный Docker для вас, и создайте новый файл httpbin.json, содержащий показанный выше JSON.

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

$ http :8080/tyk/reload 'x-tyk-authorization:[YOUR-SECRET]'

Вот и все. Как вы можете видеть в Сводке ниже, запросы к localhost:8080/httpbin теперь проксируются на httpbin.org.

Аутентификация с Tyk

Есть несколько способов реализовать аутентификацию для API. Tyk поддерживает следующие методы аутентификации. Начиная с Tyk версии 2.3, также можно связать промежуточное ПО для аутентификации.

  • Обычная проверка подлинности
  • Жетон на предъявителя
  • Подпись запроса HMAC
  • Веб-токен JSON
  • OpenID Connect

Tyk также обеспечивает поддержку OAuth 2.0 и даже может служить поставщиком токенов авторизации и доступа.

Поскольку это руководство направлено на то, чтобы вы начали работу с Tyk, этот раздел не охватывает все методы аутентификации и авторизации. Чтобы дать общее представление о том, как работает аутентификация, в следующих подразделах объясняются токены носителя и базовая аутентификация.

Жетон на предъявителя

Аутентификация токена на предъявителя - это способ защиты API с помощью Tyk по умолчанию. В определении API, который мы добавили ранее, мы устанавливаем атрибут use_keyless на true, чтобы предоставить API без аутентификации. Ниже вы можете увидеть определение API с аутентификацией Bearer Token. Это очень похоже на определение, которое мы использовали выше. Значения для name, listen_path и id изменены, а use_keyless удален.

Если вы перезагрузите свой API-шлюз, запросы к /httpbin по-прежнему будут работать, как и раньше, потому что они принадлежат ранее созданному API. Если вы сделаете запрос к /httpbin/bearer, API-шлюз вернет 401 Unauthorized с ошибкой Authorization field missing. После установки любого значения заголовка Authorization (мы выдадим токен через секунду) шлюз вернет 403 Forbidden - Access to this API has been disallowed.

Теперь API готов, поэтому нам нужно выпустить токен для доступа к нему. Для этого нам нужно определить объект сеанса. Ниже показано минимальное определение. Он предоставляет доступ к API с ID 2 (тот, который мы только что создали) в организации 1. С помощью объекта сеанса, подобного приведенному ниже, вы можете настроить множество вещей. Ознакомьтесь с официальной документацией, чтобы узнать об этом больше.

Теперь отправьте объект сеанса с запросом POST на /tyk/keys для выдачи токена аутентификации.

Ваш токен содержится в поле key ответа. Его нужно отправлять в заголовке Authorization всех запросов к /httpbin/bearer.

Обычная проверка подлинности

Чтобы настроить базовую аутентификацию, мы создадим новый API. Определение похоже на то, что вы уже знаете, но name, id и listen_path изменились. Самым важным изменением является то, что поле use_basic_auth добавлено и установлено на true. Это говорит Tyk защитить эту конечную точку с помощью базовой аутентификации вместо токенов-носителей. Вам не нужно ничего настраивать, так как Tyk знает, как работать со стандартом Basic Auth.

После перезагрузки API-шлюза запросы к httpbin/basic завершатся ошибкой, если пользователь не будет передан или будет указан недопустимый пользователь. Чтобы создать нового пользователя, нам нужно создать токен сеанса. Вы можете увидеть конфигурацию этого токена во фрагменте ниже. Опять же, определение очень похоже на то, которое мы использовали для выпуска токена на предъявителя. Конечно, name и id API изменились, так как сейчас мы хотим создать пользователя для API 3. Далее пароль пользователя был добавлен в basic_auth_data.

Теперь все готово для публикации пользователя в API Gateway с помощью POST-запроса на /tyk/keys/[USERNAME]. В следующем фрагменте показано, как создать нового пользователя с именем a-user.

Теперь вы можете делать запросы с вновь созданными учетными данными.

Заключение

В рамках этого введения мы рассмотрели, как настроить Tyk API Gateway и запустить его с помощью Docker, а также как определить базовые API и простые механизмы аутентификации.

Вот и все. Большое спасибо за прочтение этой статьи! Надеюсь, это поможет вам войти в Tyk API Gateway.

Ресурсы

Tyk API Gateway

HTTPie

Образы Docker для Redis и Tyk Gateway

Тык документация.