APISIX — это облачный шлюз API на основе Nginx и OpenResty, поддерживаемый сообществом Apache APISIX. Он обеспечивает масштабируемое, высокопроизводительное решение шлюза API с малой задержкой, поддерживает общие функции управления API, такие как управление потоком, аутентификация, переадресация, ограничение скорости, кэширование, ведение журнала и т. д., а также предоставляет гибкий механизм подключаемых модулей. Может поддерживать разработку и интеграцию пользовательских плагинов.
APISIX предоставляет множество функций, включая, помимо прочего, следующие:
Кроме того, APISIX также предоставляет различные плагины, включая часто используемые плагины, такие как автоматический выключатель, повтор, междоменный, черный и белый списки IP-адресов, а также разработку и интеграцию пользовательских плагинов.
По сравнению с другими распространенными шлюзами API APISIX имеет следующие преимущества:
Вот краткое введение о том, как развернуть APISIX от 0 до 1.
APISIX работает в системе Linux, поэтому вам необходимо подготовить хост Linux в качестве операционной среды APISIX. Рекомендуется использовать основные дистрибутивы Linux, такие как CentOS и Ubuntu.
APISIX использует OpenResty и Nginx, и это программное обеспечение необходимо установить в первую очередь. Его можно установить с помощью менеджера пакетов или компиляции исходного кода.
APISIX предоставляет различные методы установки, включая бинарную установку, образ Docker, Kubernetes Helm Chart и т. д. Вы можете выбрать соответствующий метод установки в соответствии с фактическими потребностями.
Например, чтобы установить APISIX с помощью образа Docker, вы можете выполнить следующую команду:
docker run -d --name apisix \
-v /usr/local/apisix/conf:/usr/local/apisix/conf \
-v /usr/local/apisix/logs:/usr/local/apisix/logs \
-p 9080:9080 -p 9443:9443 \
apache/apisix:2.10-alpine
Эта команда извлечет образ APISIX из Docker Hub и запустит его, одновременно монтируя локальные файлы конфигурации и файлы журналов в контейнер.
Файл конфигурации APISIX имеет формат YAML, и шлюз API можно настроить, изменив файл конфигурации. Путь к файлу конфигурации указывается при установке, либо можно использовать путь по умолчанию.
Например, добавьте конфигурацию API в /usr/local/apisix/conf/config.yaml:
apisix:
upstream:
backend1:
nodes:
- host: backend1.example.com
port: 80
route:
- name: api1
uris: ['/api/v1']
methods: ['GET']
plugins:
- name: prometheus
- name: limit-count
config:
count: 1000
time_window: 60
- name: proxy-cache
config:
cache_key: "$remote_addr|$request_uri|$request_method"
cache_ttl: 60
upstream: backend1
Эта конфигурация определяет маршрут API, который будет перенаправлен на серверную службу backend1.example.com:80 при доступе к /api/v1 и будет выполнять управление потоком и ускорение кэширования.
Чтобы запустить APISIX, вы можете выполнить следующую команду:
/usr/local/apisix/bin/apisix start
Эта команда запустит APISIX, загрузит файл конфигурации и начнет прослушивать запросы API.
Использование APISIX можно разделить на следующие аспекты:
Вот несколько примеров использования APISIX:
Определите маршрут API в файле конфигурации APISIX, вы можете использовать формат YAML, например:
apisix:
upstream:
backend1:
nodes:
- host: backend1.example.com
port: 80
route:
- name: api1
uris: ['/api/v1']
methods: ['GET']
plugins:
- name: prometheus
- name: limit-count
config:
count: 1000
time_window: 60
- name: proxy-cache
config:
cache_key: "$remote_addr|$request_uri|$request_method"
cache_ttl: 60
upstream: backend1
Эта конфигурация определяет маршрут API, который будет перенаправлен на серверную службу backend1.example.com:80 при доступе к /api/v1 и будет выполнять управление потоком и ускорение кэширования.
APISIX предоставляет различные плагины, такие как ограничение тока, балансировка нагрузки, перенаправление, аутентификация безопасности и т. д. Вы можете выбрать и настроить соответствующие плагины в соответствии с фактическими потребностями.
Например, чтобы добавить в API подключаемый модуль аутентификации JWT, вы можете добавить в файл конфигурации следующий код:
apisix:
plugin:
jwt-auth:
enable: true
config:
secret: "my_secret"
header_name: "Authorization"
Эта конфигурация определяет подключаемый модуль аутентификации JWT. При поступлении запроса API APISIX выполняет проверку JWT в поле «Авторизация» в заголовке запроса.
APISIX предоставляет различные инструменты журналов мониторинга, такие как Prometheus, Elasticsearch и т. д., которые могут записывать информацию о запросах и ответах API для облегчения сбора статистики и анализа пользователей.
Например, чтобы использовать Prometheus для мониторинга производительности API, вы можете добавить в файл конфигурации следующий код:
apisix:
plugin:
prometheus:
enable: true
listen: 127.0.0.1:9090
Эта конфигурация определяет плагин Prometheus. Когда поступает запрос API, APISIX отправляет информацию о запросе и ответе в Prometheus, и пользователи могут использовать панель управления Prometheus для просмотра и анализа.
APISIX предоставляет различные механизмы защиты, такие как черный список IP-адресов, ограничение скорости запросов, шифрование SSL/TLS и т. д., для обеспечения безопасности API.
Например, чтобы добавить черный список IP-адресов в API, вы можете добавить в файл конфигурации следующий код:
yamlCopy codeapisix:
plugin:
ip-restriction:
enable: true
config:
reject_ips: ["192.168.1.1", "192.168.1.2"]
Эта конфигурация определяет плагин черного списка IP-адресов. При поступлении запроса API APISIX проверит, находится ли запрошенный IP-адрес в черном списке, и если да, напрямую откажет в доступе.
APISIX предоставляет гибкий механизм подключаемых модулей, и пользователи могут разрабатывать собственные подключаемые модули в соответствии с фактическими потребностями для реализации конкретных функций API.
Например, чтобы разработать собственный плагин, который возвращает определенный HTTP-заголовок при выполнении запроса API, вы можете написать следующий код:
luaCopy codefunction plugin:new()
local plugin = {
name = "my-plugin",
fields = {
header_name = {type = "string", default = "X-My-Header"}
}
}
return setmetatable(plugin, {__index = self})
end
function plugin:access(conf, request)
ngx.header[conf.header_name] = "my-header-value"
end
return plugin
Этот плагин добавляет HTTP-заголовок с именем X-My-Header к запросу API и устанавливает для него значение my-header-value.