- Введение
- В этом руководстве вы узнаете следующее.
- Предварительные условия
- Создайте группу ресурсов
- Настройка контейнерных экземпляров Azure
- Создание контекста Azure
- Получение Apache APISIX с GitHub
- Изменить файл Docker compose
- Настройка томов с помощью файлового ресурса Azure
- Добавление файлов конфигурации APISIX на файловый ресурс Azure
- Развернуть APISIX в ACI
- Убедитесь, что Apache APISIX запущен
- Устранение неполадок😕
- Очистка после завершения работы
- Заключение
- Рекомендуемый контент
Введение
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.
- Найдите File shares на панели навигации хранилища apisixstorage, которое мы создали в предыдущем шаге, и выберите apisixshare file-share, чтобы открыть. Откроется панель файлового ресурса.
- В меню в верхней части выберите 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
📧 Пишите нам со своими вопросами