Адрес фактического проекта электронной коммерции SpringBoot (50k+star):GitHub.com/macro-positive/…
Резюме
Когда дело доходит до шлюзов API, наиболее знакомыми являются Gateway и Zuul в системе Spring Cloud, Этим шлюзам в основном необходимо изменять файлы конфигурации или разрабатывать свои собственные функции при их использовании. Сегодня я познакомлю вас с мощным API-шлюзомapisix
, со своей функцией визуального управления, аж 30 видов поддержки плагинов, надеюсь всем будет полезно!
Введение
apisix — это облачный шлюз API микросервисов, который обеспечивает максимальную производительность, безопасность, открытый исходный код и расширяемую платформу для API. apisix реализован на базе Nginx и др. По сравнению с традиционными API-шлюзами, apisix имеет динамическую маршрутизацию и горячую загрузку плагинов, что особенно подходит для управления API в микросервисных системах.
основная концепция
Давайте сначала разберемся с некоторыми основными понятиями apisix, которые будут очень полезны для нашего следующего использования!
- Восходящий поток: его можно понимать как виртуальный хост, который выполняет балансировку нагрузки для заданных нескольких целевых служб в соответствии с правилами конфигурации.
- Маршрут: сопоставьте запрос клиента, определив некоторые правила, затем выполните настроенный подключаемый модуль для соответствующего запроса и перенаправьте запрос указанному восходящему потоку.
- Потребитель: В качестве шлюза API иногда вам нужно знать, кто является потребителем API, что обычно можно использовать для аутентификации личности.
- Сервис: его можно понимать как абстракцию набора маршрутов. Обычно он имеет однозначное соответствие с восходящим потоком и отношение «многие к одному» между маршрутами и службами.
- Подключаемый модуль: улучшенные операции шлюза API для запросов, которые могут добавлять к запросам ряд функций, таких как текущее ограничение, аутентификация и занесение в черный список. Можно настроить для потребителей, сервисов и маршрутов.
Установить
Поскольку предоставляется официальное решение для развертывания Docker Compose, очень удобно устанавливать службы, связанные с apisix, с помощью всего одного скрипта.Здесь мы также используем это решение для развертывания.
- Скачать первым
apisix-docker
проект, на самом деле нам нужно только использоватьexample
Каталога достаточно, адрес загрузки:GitHub.com/Apache/API…
- Далее мы ставим
example
Загрузите каталог на сервер Linux, чтобы понять, что находится в этом каталоге;
drwxrwxrwx. 2 root root 25 Jun 19 10:12 apisix_conf # apisix配置文件目录
drwxrwxrwx. 2 root root 71 Jun 24 09:36 apisix_log # apisix日志文件目录
drwxrwxrwx. 2 root root 23 Jun 23 17:10 dashboard_conf # 可视化工具apisix-dashboard配置文件目录
-rwxrwxrwx. 1 root root 1304 Jun 19 10:12 docker-compose-alpine.yml # docker-compose 部署脚本(alpine)版本
-rwxrwxrwx. 1 root root 1453 Jun 19 10:12 docker-compose.yml # docker-compose 部署脚本
drwxrwxrwx. 2 root root 27 Jun 19 10:12 etcd_conf # ectd配置文件目录
drwxrwxrwx. 3 root root 31 Jun 23 17:06 etcd_data # ectd数据目录
drwxrwxrwx. 2 root root 107 Jun 19 10:12 mkcert
drwxrwxrwx. 2 root root 40 Jun 19 10:12 upstream # 两个测试用的Nginx服务配置
- от
docker-compose.yml
Мы можем обнаружить, что скрипт не только запускает три основные службы apisix, apisix-dashboard и т. д., но также запускает две службы Nginx для тестирования;
version: "3"
services:
# 可视化管理工具apisix-dashboard
apisix-dashboard:
image: apache/apisix-dashboard:2.7
restart: always
volumes:
- ./dashboard_conf/conf.yaml:/usr/local/apisix-dashboard/conf/conf.yaml
ports:
- "9000:9000"
networks:
apisix:
# 网关apisix
apisix:
image: apache/apisix:2.6-alpine
restart: always
volumes:
- ./apisix_log:/usr/local/apisix/logs
- ./apisix_conf/config.yaml:/usr/local/apisix/conf/config.yaml:ro
depends_on:
- etcd
##network_mode: host
ports:
- "9080:9080/tcp"
- "9443:9443/tcp"
networks:
apisix:
# apisix配置数据存储etcd
etcd:
image: bitnami/etcd:3.4.15
user: root
restart: always
volumes:
- ./etcd_data:/bitnami/etcd
environment:
ETCD_ENABLE_V2: "true"
ALLOW_NONE_AUTHENTICATION: "yes"
ETCD_ADVERTISE_CLIENT_URLS: "http://0.0.0.0:2379"
ETCD_LISTEN_CLIENT_URLS: "http://0.0.0.0:2379"
ports:
- "2379:2379/tcp"
networks:
apisix:
# 测试用nginx服务web1,调用返回 hello web1
web1:
image: nginx:1.19.0-alpine
restart: always
volumes:
- ./upstream/web1.conf:/etc/nginx/nginx.conf
ports:
- "9081:80/tcp"
environment:
- NGINX_PORT=80
networks:
apisix:
# 测试用nginx服务web2,调用返回 hello web2
web2:
image: nginx:1.19.0-alpine
restart: always
volumes:
- ./upstream/web2.conf:/etc/nginx/nginx.conf
ports:
- "9082:80/tcp"
environment:
- NGINX_PORT=80
networks:
apisix:
networks:
apisix:
driver: bridge
- существует
docker-compose.yml
В каталоге, где находится файл, используйте следующую команду, чтобы запустить все службы одновременно;
docker-compose -p apisix-docker up -d
- После успешного запуска используйте следующие команды для просмотра рабочего состояния всех служб;
docker-compose -p apisix-docker ps
Name Command State Ports
--------------------------------------------------------------------------------------------------------------------------
apisix-docker_apisix-dashboard_1 /usr/local/apisix-dashboar ... Up 0.0.0.0:9000->9000/tcp
apisix-docker_apisix_1 sh -c /usr/bin/apisix init ... Up 0.0.0.0:9080->9080/tcp, 0.0.0.0:9443->9443/tcp
apisix-docker_etcd_1 /opt/bitnami/scripts/etcd/ ... Up 0.0.0.0:2379->2379/tcp, 2380/tcp
apisix-docker_web1_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:9081->80/tcp
apisix-docker_web2_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:9082->80/tcp
- Далее вы можете управлять apisix с помощью визуальных инструментов.Пароль учетной записи для входа
admin:admin
,адрес:http://192.168.5.78:9000/
- После авторизации посмотрите на интерфейс, он довольно красивый, аписикс очень прост в сборке, ям в принципе нет;
- Также есть два тестовых сервиса,
web1
адрес:http://192.168.5.78:9081/
- еще один тестовый сервис
web2
адрес:http://192.168.5.78:9082/
использовать
Будучи шлюзом нового поколения, apisix не только поддерживает основные функции маршрутизации, но также предоставляет множество очень мощных подключаемых модулей.
основное использование
Давайте сначала испытаем основные функции apisix.До этого были запущены два тестовых сервиса Nginx.
web1
иweb2
, а затем мы получим к ним доступ через функцию маршрутизации apisix.
- Во-первых, нам нужно создать восходящий поток (Upstream), что эквивалентно концепции виртуальных хостов, которые могут предоставлять функции балансировки нагрузки для реальных сервисов;
- Создайте
web1
вверх по течению, установите имя, алгоритм балансировки нагрузки и информацию о целевом узле;
- Затем создайте его, как указано выше.
web2
Список восходящих потоков, после завершения создания, список восходящих потоков отображается следующим образом;
- воссоздать
web1
Маршрут (Route), маршрут можно использовать для сопоставления запроса клиента, а затем перенаправить его в восходящий поток;
- Затем выберите восходящий маршрут как
web1
;
- Далее выбираем плагины, которые нужно применить к роутингу.Существует целых 30 видов плагинов apisix.В качестве базового использования пока не будем выбирать плагины;
- воссоздать
web2
После завершения создания список маршрутов отображается следующим образом:
- Далее мы получаем к нему доступ через шлюз apisix
web1
Служить:http://192.168.5.78:9080/web1/
- Далее мы получаем к нему доступ через шлюз apisix
web2
Служить:http://192.168.5.78:9080/web2/
Расширенное использование
apisix может реализовать ряд богатых функций, включив плагины Давайте представим несколько практических функций.
Аутентификация
Использование JWT для аутентификации — очень популярный способ, этот способ также поддерживается в apisix, его можно включить, включив
jwt-auth
плагин для реализации.
- Сначала нам нужно создать объект-потребитель (Consumer);
- Затем включите в конфигурации плагина
jwt-auth
плагин;
- Плагин настраивается, когда плагин включен
key
иsecret
;
- После успешного создания списка потребителей отображается следующее:
- Затем создайте маршрут, и путь доступа к маршруту совпадает
/auth/*
, просто включитеjwt-auth
плагин;
- Чтобы получить доступ к интерфейсу для получения сгенерированного токена JWT, необходимо добавить два параметра.
key
Для ключа, настроенного в плагине JWT,payload
Для пользовательских данных полезной нагрузки, хранящихся в JWT, токен JWT генерирует адрес:http://192.168.5.78:9080/apisix/plugin/jwt/sign
- Если JWT Token не добавлен для доступа к интерфейсу маршрутизации, будет возвращено 401, а адрес интерфейса:http://192.168.5.78:9080/auth/
- в заголовке запроса
Authorization
После добавления токена JWT в файл вы можете получить к нему обычный доступ;
- Разумеется, аутентификация, поддерживаемая apisix, не только эта, но и следующая.
Функция ограничения тока
Иногда нам нужно ограничить поток шлюза, например, каждый IP-адрес клиента может получить доступ к интерфейсу только дважды в течение 30 секунд, что можно включить, включив
limit-count
плагин для реализации.
- Когда мы создаем маршрут, мы можем настроить
limit-count
плагин;
- тогда правильно
limit-count
Плагин настроен в соответствии сremote_addr
ограничение тока;
- Когда мы вызываем интерфейс в третий раз в течение 30 секунд, apisix вернет 503, чтобы ограничить наш вызов.
Междоменная поддержка
Если вы хотите, чтобы шлюз поддерживал междоменный доступ, вы можете включить
cors
плагин для реализации.
- Когда мы создаем маршрут, мы можем настроить
cors
плагин;
- тогда правильно
cors
Настройка плагина, настройка политики междоменного доступа;
- Вызов теста интерфейса может обнаружить, что интерфейс вернул заголовки запроса, связанные с CORS.
Суммировать
После знакомства с шлюзом API нового поколения, apisix, шлюз с визуальным управлением стал действительно другим, простым в использовании и мощным! Если ваш микросервис является облачным, попробуйте использовать его в качестве шлюза.
На самом деле apisix не является нишевым фреймворком, его используют многие отечественные и зарубежные производители, если вы хотите узнать, какие компании его используют, вы можете перейти по ссылке ниже.
использованная литература
Официальная документация apisix очень дружелюбна и поддерживает китайский язык, который является совестью отрасли! Изучив официальную документацию, вы в принципе можете освоить apisix.
Официальная документация:api отрывается от.apache.org/this/docs/api…
Адрес исходного кода проекта
Эта статьяGitHubGitHub.com/macro-positive/…Записано, приветствую всех на Star!