Запуск Apache APISIX на контейнерном инстансе Microsoft Azure


Введение

Apache APISIX – это шлюз API микросервисов с открытым исходным кодом и платформа, предназначенная для управления запросами микросервисов с высокой доступностью, отказоустойчивостью и распределенной системой. Вы можете установить Apache APISIX различными методами (Docker, Helm или RPM) и запустить его в различных публичных облачных провайдерах благодаря его облачно-нативному поведению. В этом посте вы узнаете, как легко запустить шлюз API Apache APISIX в Azure Container Instances с несколькими контейнерами (Apisix и etcd) прямо из Docker CLI.

☝️Альтернативно, есть куча вариантов, с помощью которых вы также можете развернуть APISIX в Azure:

Azure Kubernetes Service, если вам нужно комплексное решение для оркестровки и если вам нужно управлять развертыванием и инфраструктурой.
Azure Service Fabric для оркестровки контейнеров и сервисов.
Azure Compute для создания собственного решения.

В этом руководстве вы узнаете следующее.

✔️ Создадите группу ресурсов Azure.
✔️ Настроите экземпляры контейнеров Azure.
✔️ Создадите контекст Azure для Docker, чтобы разгрузить выполнение контейнеров Apisix и etcd в ACI.
✔️ Получите исходный код примера Apache APISIX для Docker с GitHub.
✔️ Измените файл Docker compose в нем.
✔️ Настройте тома в Azure Storage Account с Azure File Share.
✔️ Добавьте файлы конфигурации APISIX на Azure File Share.
✔️ Поднимите APISIX в Azure Container Instances.
✔️ Проверьте работу APISIX.
✔️ Выполните очистку после завершения работы.

Предварительные условия

➡️ Подписка Azure – перед началом работы создайте бесплатную учетную запись.
➡️ Azure CLI – у вас должен быть установлен Azure CLI на локальном компьютере, так как мы будем использовать Azure CLI для взаимодействия со всеми ресурсами Azure. Смотрите раздел Установка Azure CLI, как настроить.
➡️ Docker Desktop – для выполнения этого руководства вам также понадобится локально установленный Docker desktop. Он доступен для Windows или macOS. Или установите Docker ACI Integration CLI для Linux.

Мы используем Docker Compose для определения и развертывания двух контейнеров для Apisix и etcd в качестве контейнерной группы в Azure Container Instances.

APISIX использует etcd для сохранения и синхронизации конфигурации. Перед установкой APISIX необходимо установить etcd на вашу машину. Он будет установлен автоматически, если вы выберете Docker compose, поэтому он идеально подходит для этого примера.

💁 Запуск контейнеров в Azure Container Instances по требованию, когда вы разрабатываете облачно-нативные приложения, такие как APISIX, с помощью Docker и хотите плавно перейти от локальной разработки к развертыванию в облаке. Эта превосходная возможность обеспечивается благодаря интеграции между Docker и Azure.

Создайте группу ресурсов

Прежде чем создавать и управлять экземпляром контейнера APISIX, необходимо создать группу ресурсов для его развертывания. Группа ресурсов – это логический набор, в который развертываются и управляются все ресурсы Azure.

Создайте группу ресурсов с помощью команды az group create. В следующем примере группа ресурсов с именем apisix создана в регионе centralus:

az group create --name apisix --location centralus
Вход в полноэкранный режим Выход из полноэкранного режима

Настройка контейнерных экземпляров Azure

Теперь вы можете запускать Azure CLI с помощью команды az из любого интерфейса командной строки.

Обратите внимание, что я использовал Windows OS с установленным на моей машине Docker desktop для этой демонстрации и запускал команды az либо из Windows Command Prompt, либо из PowerShell.

Мы используем команды Docker для запуска контейнеров в Azure Container Instances, поэтому первым делом нам нужно войти в Azure, выполнив следующую команду:

docker login azure
Войти в полноэкранный режим Выйти из полноэкранного режима

Вы также можете войти в систему с помощью Service Principal (SP). Укажите идентификатор и пароль SP с помощью аргументов –client-id и –client-secret при вызове команды docker login azure.

Создание контекста Azure

После входа в систему вы создадите контекст ACI, выполнив команду docker context create aci. Контекст отвечает за привязку запросов, выданных Docker CLI, к узлам или кластерам в ACI. Например, для создания контекста под названием apisixacicontext вы можете использовать:

docker context create aci apisixacicontext
Войти в полноэкранный режим Выйти из полноэкранного режима

docker context create – это интерактивная команда. Она проведет вас через процесс настройки нового контекста Docker для нашей существующей группы ресурсов Azure.

Выполните команду docker context ls, чтобы подтвердить, что вы добавили контекст ACI в контексты Docker:

docker context ls
Войдите в полноэкранный режим Выход из полноэкранного режима

Выход:

Далее перейдите в контекст ACI. Последующие команды Docker будут выполняться в этом контексте.

docker context use apisixacicontext
Войти в полноэкранный режим Выйти из полноэкранного режима

Получение Apache APISIX с GitHub

В этой демонстрации мы используем докер-репо Apache APISIX, которое содержит пример файла docker-compose.yaml и другие конфигурационные файлы, показывающие, как запустить APISIX с помощью docker compose. Попробуем воспользоваться этим примером:

Используйте git для клонирования репозитория и cd в папку example.

git clone 'https://github.com/apache/apisix-docker'
cd apisix-docker/example
Вход в полноэкранный режим Выход из полноэкранного режима

Изменить файл Docker compose

Затем откройте файл docker-compose.yaml в текстовом редакторе. В примере файла docker compose определено несколько сервисов: apisix-dashboard, apisix, etcd, web1, web2, prometheus и grafana:

Для простоты мы будем использовать и запускать только сервисы APISIX и etcd в этом демо. Мы можем просто выполнить следующие изменения, удалив другие службы и определив тома etcd-data и apisix-data. На следующем шаге мы используем файловый ресурс Azure в качестве тома.

version: "3"

services:
  apisix:
    image: apache/apisix:2.13.1-alpine
    restart: always
    volumes:
      - apisix-data:/apisix/conf/
    depends_on:
      - etcd
    ports:
      - "9080:9080/tcp"
      - "9091:9091/tcp"
      - "9443:9443/tcp"
      - "9092:9092/tcp"
    networks:
      apisix:

  etcd:
    image: bitnami/etcd:3.4.15
    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:

networks:
  apisix:
    driver: bridge

volumes:
  etcd-data:
    driver: azure_file
    driver_opts:
      share_name: etcdshare
      storage_account_name: apisixstorage
  apisix-data:
    driver: azure_file
    driver_opts:
      share_name: apisixshare
      storage_account_name: apisixstorage
Вход в полноэкранный режим Выход из полноэкранного режима

Настройка томов с помощью файлового ресурса Azure

Apache APISIX должен сохранять состояние etcd и монтировать внешние конфигурационные файлы, такие как /apisix_conf/conf.yaml (определяет конфигурации для apisix) в папке repo в контейнеры. Вы можете хранить постоянные данные вне контейнерной файловой системы в ACI, используя файловый ресурс Azure, поскольку Azure Container Instances не имеют статических данных. Если контейнер перезапускается, разбивается или останавливается, все его состояние теряется.

ℹ️ Подробнее о том, как монтировать файловый ресурс Azure в Azure Container Instances.

Как вы можете заметить, мы объявили два тома в файле docker-compose.yaml и установили драйвер на azure_file. Прежде чем использовать файловый ресурс Azure с Azure Container Instances, необходимо создать новую учетную запись Azure Storage для размещения файлового ресурса и добавить к ней файловый ресурс. Чтобы создать хранилище Azure с именем, например, apisixstorage :

az storage account create --resource-group apisix --name apisixstorage --location centralus --sku Standard_LRS
Войдите в полноэкранный режим Выйдите из полноэкранного режима

Выполните следующие две команды для создания двух файловых ресурсов Azure, объединенных с требуемой учетной записью хранилища Azure соответственно, используя docker volume create.

Для первого тома apisixshare:

docker volume create apisixshare --storage-account apisixstorage
Войдите в полноэкранный режим Выйдите из полноэкранного режима

Для второго тома etcdshare:

docker volume create etcdshare --storage-account apisixstorage
Войти в полноэкранный режим Выйдите из полноэкранного режима

Вы можете увидеть созданное хранилище с двумя файловыми ресурсами и на портале Azure.

Установив том, мы можем запустить stateful APISIX в ACI, как показано в следующем разделе.

Добавление файлов конфигурации APISIX на файловый ресурс Azure

Теперь нам нужно вручную загрузить файлы конфигурации Apache APISIX на Azure File Share. Для этого можно просто использовать портал Azure. Или вы всегда можете использовать команду az storage file upload Azure CLI.

  1. Найдите File shares на панели навигации хранилища apisixstorage, которое мы создали в предыдущем шаге, и выберите apisixshare file-share, чтобы открыть. Откроется панель файлового ресурса.

  1. В меню в верхней части выберите Upload. Откроется панель Upload files. Загрузите и добавьте все файлы, включая каталоги, из папки Apache APISIX conf. Окончательный список файлов конфигурации в файловом хранилище apisixshare должен соответствовать папке Apache APISIX conf. Как показано ниже:

Еще один момент: какие бы файлы вы ни добавляли/обновляли в файловом ресурсе, они будут добавлены/обновлены и в контейнере после того, как вы смонтируете файловый ресурс как том в контейнере. Однако здесь есть некоторые ограничения, например, вы можете монтировать только весь ресурс, а не вложенные папки или отдельные файлы внутри него, поэтому мы определяем путь монтирования /apisix/conf в свойстве volume файла docker-compose.yaml. Подробнее о других ограничениях.

...
volumes:
 - apisix-data:/apisix/conf/
...
Вход в полноэкранный режим Выход из полноэкранного режима

За сценой ACI копирует все вышеперечисленные файлы конфигурации с файлового ресурса apisixshare в папку /apisix/conf/ в контейнере Linux APISIX.

Развернуть APISIX в ACI

Наконец, теперь мы можем развернуть APISIX с etcd в Azure Container Instances. Выполните docker compose up, чтобы создать группу контейнеров в Azure Container Instances.

docker compose up
Войдите в полноэкранный режим Выйдите из полноэкранного режима

Подождите, пока группа контейнеров не будет развернута. Затем можно также проверить, что экземпляры контейнеров созданы на портале Azure.

Вы также можете присвоить значение apisixaci свойству domainname в службе apisix в файле docker-compose.yaml, что приведет к созданию пользовательского DNS-имени в ACI. Другими словами, вы указываете Azure связать поддомен azurecontainer.io с публичным IP-адресом открытого контейнера. FQDN (полное доменное имя) следует схеме и будет экспонировать экземпляр APISIX на apisixaci.centralus.azurecontainer.io, обслуживающий прокси на порту 9080. Однако с текущей конфигурацией мы можем получить доступ к нашему APISIX с его публичного IP-адреса.

Далее запускаем docker ps, чтобы увидеть запущенные контейнеры и IP-адрес, назначенный группе контейнеров.

Чтобы просмотреть журналы APISIX, выполните команду docker logs. Например:

docker logs example_apisix
Вход в полноэкранный режим Выход из полноэкранного режима

Пример вывода:

...
2022/06/11 19:02:45 [warn] 211#211: *4 [lua] plugin.lua:223: load_stream(): new plugins: {"limit-conn":true,"ip-restriction":true,"mqtt-proxy":true}, context: 
...
Вход в полноэкранный режим Выход из полноэкранного режима

Убедитесь, что Apache APISIX запущен

Чтобы проверить, работает ли Apache APISIX в облаке, выполним приведенную ниже команду curl и проверим ответ от REST Admin API APISIX. Вам нужно заменить ACI_PUBLIC_IP_ADDRESS на публичный IP-адрес или FQDN вашей группы экземпляров контейнера.

curl "http://{ACI_PUBLIC_IP_ADDRESS}:9080/apisix/admin/services/" -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1'
Вход в полноэкранный режим Выход из полноэкранного режима

Ответ показывает, что APISIX запущен успешно:

{
  "count":0,
  "action":"get",
  "node":{
    "key":"/apisix/services",
    "nodes":[],
    "dir":true
  }
}
Вход в полноэкранный режим Выход из полноэкранного режима

Ну вот, Apache APISIX запущен в группе Azure Container Instance и отвечает на ваши запросы 👏💪.

Устранение неполадок😕

Когда вы запрашиваете Apache APISIX Admin API, вы можете получить 403 Forbidden ошибку статуса HTTP. Причина в том, что IP-адрес вашего клиента может быть не внесен в белый список в конфигурационном файле APISIX. REST Admin API для управления Apache APISIX, который по умолчанию разрешает доступ только 127.0.0.1, вы можете изменить поле allow_admin в conf/config.yaml, чтобы указать список IP-адресов, которым разрешено вызывать Admin API. Также обратите внимание, что Admin API использует key auth для проверки личности вызывающего. Поле admin_key в conf/config.yaml должно быть изменено перед развертыванием для обеспечения безопасности.

  allow_admin:                  # http://nginx.org/en/docs/http/ngx_http_access_module.html#allow
    - 0.0.0.0/0  # We need to restrict ip access rules for security. 0.0.0.0/0 is for test.
    - YOUR_IP_ADDRESS

  admin_key:
    - name: "admin"
      key: YOUR_ADMIN_API_KEY
      role: admin                 # admin: manage all configuration data
Вход в полноэкранный режим Выход из полноэкранного режима

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

Когда вы закончите опробовать приложение, остановите приложение и контейнеры с помощью docker compose down внутри папки apisix-docker/compose.

docker compose down
Вход в полноэкранный режим Выйти из полноэкранного режима

Эта команда удаляет все контейнеры apisix и etcd в Azure Container Instances.

Вы также можете удалить контекст Docker, созданный во время этого демо, используйте команду docker context rm apisixacicontext после переключения обратно на контекст по умолчанию:

docker context use default
Вход в полноэкранный режим Выйти из полноэкранного режима

Затем выполните

docker context rm apisixacicontext
Войти в полноэкранный режим Выйти из полноэкранного режима

Заключение

До сих пор мы узнали, как развернуть Apache APISIX в Azure Cloud с помощью Docker Compose, чтобы перейти от локального запуска многоконтейнерного APISIX к запуску в Azure Container Instances. На этом этапе вы можете создать маршрут, восходящий поток и управлять трафиком к вашим внутренним сервисам с помощью доступных встроенных плагинов, если вы хотите использовать больше возможностей APISIX. С помощью APISIX Docker compose можно предоставлять и другие сервисы, такие как prometheus, grafana.

Рекомендуемый контент

➔ Смотреть видеоурок Начало работы с Apache APISIX

➔ Прочитать статью в блоге Обзор плагинов шлюза API Apache APISIX

➔ Читайте запись в блоге Централизованная аутентификация с помощью плагинов Apache APISIX

➔ Читайте запись в блоге Безопасность API с OIDC с помощью Apache APISIX и Microsoft Azure AD

Сообщество⤵️

🙋 Присоединяйтесь к сообществу Apache APISIX
🐦 Следите за нами в Twitter
📝 Найдите нас в Slack
📧 Пишите нам со своими вопросами

Оцените статью
Procodings.ru
Добавить комментарий