Шлюз API нового поколения с визуальным управлением и удобной документацией!

Java задняя часть GitHub
Шлюз API нового поколения с визуальным управлением и удобной документацией!

Адрес фактического проекта электронной коммерции 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/

  • После авторизации посмотрите на интерфейс, он довольно красивый, аписикс очень прост в сборке, ям в принципе нет;

использовать

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

основное использование

Давайте сначала испытаем основные функции apisix.До этого были запущены два тестовых сервиса Nginx.web1иweb2, а затем мы получим к ним доступ через функцию маршрутизации apisix.

  • Во-первых, нам нужно создать восходящий поток (Upstream), что эквивалентно концепции виртуальных хостов, которые могут предоставлять функции балансировки нагрузки для реальных сервисов;

  • Создайтеweb1вверх по течению, установите имя, алгоритм балансировки нагрузки и информацию о целевом узле;

  • Затем создайте его, как указано выше.web2Список восходящих потоков, после завершения создания, список восходящих потоков отображается следующим образом;

  • воссоздатьweb1Маршрут (Route), маршрут можно использовать для сопоставления запроса клиента, а затем перенаправить его в восходящий поток;

  • Затем выберите восходящий маршрут какweb1;

  • Далее выбираем плагины, которые нужно применить к роутингу.Существует целых 30 видов плагинов apisix.В качестве базового использования пока не будем выбирать плагины;

  • воссоздать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 не является нишевым фреймворком, его используют многие отечественные и зарубежные производители, если вы хотите узнать, какие компании его используют, вы можете перейти по ссылке ниже.

GitHub.com/Apache/API…

использованная литература

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

Официальная документация:api отрывается от.apache.org/this/docs/api…

Адрес исходного кода проекта

GitHub.com/Apache/API…

Эта статьяGitHubGitHub.com/macro-positive/…Записано, приветствую всех на Star!