Что нового в ADC 0.11 и 0.12?
August 7, 2024
С момента выпуска ADC (API Declarative CLI) версии 0.10 два месяца назад мы неустанно работали над предоставлением двух крупных обновлений — версий 0.11 и 0.12, а также серии целевых патч-обновлений. Эти обновления в основном сосредоточены на поддержке Apache APISIX, улучшении существующих функций и исправлении ошибок.
Добавление поддержки Apache APISIX в качестве бэкенда
Начиная с ADC 0.11, была введена экспериментальная поддержка бэкенда Apache APISIX.
ADC теперь интегрирован с APISIX Admin API, что позволяет эффективно экспортировать и синхронизировать ресурсы. Мы продолжим улучшать его удобство использования. Опция apisix для бэкенда включена по умолчанию в ADC; пользователям нужно только настроить конечную точку Admin API и ключ API для подключения.
Различия между ADC и Admin API
Обратите внимание, что ADC не стремится полностью соответствовать всем функциональным возможностям APISIX, а скорее сосредотачивается на основном наборе функций и лучших практиках. Мы считаем, что инвестирование в функции, которые действительно нужны пользователям, а не слепое стремление к полному охвату, является путем развития ADC.
Хотя APISIX предлагает высокую степень гибкости конфигурации, эта свобода часто сопровождается сложностью долгосрочного обслуживания. Когда управление конфигурацией передается от одного сопровождающего к другому, новый сопровождающий обычно сталкивается с задачей понимания уникального подхода и стиля конфигурации предыдущего сопровождающего, вместо того чтобы напрямую принять набор зрелых и широко признанных правил лучших практик.
Например, на платформе APISIX пользователи могут настраивать маршруты, которые не привязаны напрямую к конкретным сервисам, а вместо этого указывают ресурсы апстрима непосредственно на уровне маршрута. Однако этот метод не поддерживается ADC нативно. Чтобы соответствовать логическим нормам и стандартизированным процедурам, рекомендуется включать маршруты в конкретный сервис и точно задавать адреса апстрима внутри этого сервиса.
Например, в сервисе продукта мы определяем сервис с именем Product Service и настраиваем апстрим, включаем плагины и задаем маршруты внутри него. В этой модели несколько маршрутов могут использовать одну и ту же конфигурацию апстрима и плагинов, что значительно упрощает процесс конфигурации.
services: - name: Product Service upstream: type: roundrobin nodes: - host: product.ecommerce.svc.cluster.local port: 443 weight: 100 scheme: https plugins: key-auth: {} routes: - name: List Products uris: - /products methods: ["GET"] - name: Get Product uris: - /product/* methods: ["GET"]
Приведенный выше пример представляет собой минимальный формат определения сервиса. Помимо этого, ADC также поддерживает расширенные функции, такие как обнаружение сервисов, настройки тайм-аутов, политики повторных попыток и приоритизация маршрутов, обеспечивая всестороннюю и гибкую конфигурацию.
Учитывая, что APISIX поддерживает более богатые методы конфигурации, ADC может столкнуться с несоответствиями при экспорте конфигураций по сравнению с отображением APISIX Admin API, например:
- Маршруты, не использующие сервисы, будут сгруппированы в сервис для соответствия иерархии сервис-маршрут.
- Апстримы, ссылающиеся на ID, будут встроены в точку использования.
- Ресурсы шаблонов плагинов будут заменены сервисами, содержащими маршруты.
Поэтому пользователям необходимо внимательно проверять файлы определений ADC, созданные в процессе экспорта, чтобы убедиться, что они по-прежнему соответствуют первоначальному замыслу.
Почему рекомендуется использовать ADC?
При использовании APISIX Dashboard пользователям часто приходится выполнять повторяющиеся операции в формах, что может быть утомительным и подверженным ошибкам. В отличие от этого, использование ADC для декларативной конфигурации предполагает простое написание YAML-файлов и выполнение операций синхронизации. ADC автоматически преобразует конфигурации в вызовы Admin API, что позволяет быстро развертывать и управлять конфигурациями.
Таким образом, ADC может помочь упростить процесс управления и развертывания, а также легко реализовать сценарии GitOps. Это предполагает управление YAML-файлами определений через репозиторий Git и использование рабочих процессов PR и инструментов CI для автоматического обновления конфигураций. Это значительно сокращает объем ручных операций, избегает проблем, присутствующих в APISIX Dashboard, и снижает сложность написания скриптов для вызова Admin API.
Для новых проектов мы настоятельно рекомендуем начинать построение конфигураций шлюза с ADC. Для существующих проектов можно постепенно перейти на управление ADC, экспортируя и умеренно изменяя конфигурации.
Оптимизация бэкенда API7 Enterprise
Включено в версии 0.11/0.12
В версиях 0.11 и 0.12 мы реализовали несколько оптимизаций для бэкенда API7, чтобы улучшить опыт разработчиков. ADC полностью совместим с этими улучшениями, что означает, что разработчикам нужно только поддерживать свою версию ADC в актуальном состоянии, чтобы воспользоваться этими улучшениями без каких-либо изменений в существующих файлах определений.
Оптимизация проверок определений ADC
Включено в версии 0.12
Мы всесторонне оптимизировали и исправили правила схемы для проверок определений ADC, чтобы помочь разработчикам заранее обнаруживать и эффективно избегать потенциальных проблем конфигурации.
JSON Schema
Кроме того, мы теперь поддерживаем экспорт правил валидации в виде JSON Schema для помощи редакторам, использующим IDE. Пользователи получат преимущества как подсказок по синтаксису, так и проверок в реальном времени в своих файлах, что значительно повысит эффективность и качество кодирования.
Для разработчиков, предпочитающих Visual Studio Code, включение плагина YAML и добавление следующего комментария в начале файла активирует эту функцию:
# yaml-language-server: $schema=https://raw.githubusercontent.com/api7/adc/main/schema.json
Заключение
Как упоминалось ранее в наших блогах, ADC в конечном итоге будет открыт для сообщества. После шести месяцев внутренней разработки и множества итераций ADC был полностью перестроен на базе TypeScript, полностью отказавшись от исходного кода на Go. Это делает его более легким для изучения и разработки.
С публичным выпуском ADC версии 0.12 мы приглашаем разработчиков со всего мира принять участие в его разработке и улучшении. Кодовая база теперь открыта на https://github.com/api7/adc, и мы с нетерпением ждем ваших вкладов.
