В микросервисной архитектуре для реализации регистрации и обнаружения служб мы обычно вводим компонент центра регистрации. АПИСИКС Он обеспечивает функцию получения экземпляров сервисов из центра регистрации, что позволяет обеспечить эффективное обнаружение сервисов и динамическую балансировку нагрузки, тем самым повышая гибкость и надежность системы. В настоящее время механизмы обнаружения сервисов, поддерживаемые APISIX, включают Consul, Nacos, Eureka, Etcd и т. д.
01. Фон
В микросервисной архитектуре стека технологий Java многие компании выбирают Nacos в качестве центра обнаружения и настройки сервисов, а Spring Cloud Gateway — в качестве шлюза API микросервисов. Однако поскольку требования предприятий к производительности и гибкости шлюза API продолжают расти, все больше и больше предприятий начинают рассматривать Apache APISIX в качестве альтернативы. В этой статье будет показано, как использовать Apache APISIX для замены Spring Cloud Gateway в качестве шлюза API микросервисов в стеке технологий Java.
02. План
APISIX + Nacos может централизовать в каждом микросервисном узле различные элементы управления, не имеющие никакого отношения к бизнесу в APISIX, для унифицированного управления, то есть возможности реализовать прокси и маршрутизацию интерфейсных сервисов через APISIX. После регистрации каждого микросервиса в Nacos APISIX может получить список сервисов с помощью функции обнаружения сервисов Nacos и найти соответствующий адрес сервиса для реализации динамического проксирования.
Цель
Заменить пружину Cloud Gateway, а затем выполните маршрутизацию в APISIX и, наконец, сможете передать /api/<Служитьимя> Доступ к микросервисам, зарегистрированным в Nacos
Подготовительные условия
Kubernetes (APISIX и Nacos созданы в среде k8s)
APISIX
APISIX-Ingress
04. Практическое занятие
1. Измените файл config.yaml конфигурации APISIX и добавьте следующее содержимое в конфигурацию верхнего уровня, которая используется для обнаружения микросервисов, зарегистрированных в Nacos. После внесения изменений необходимо периодически перезапускать модули APISIX.
discovery:
nacos:
host:
- "http://nacos.test:8848" # Служить адрес Накоса
prefix: "/nacos/v1/"
fetch_interval: 30 # необязательный, Получить временной интервал списка экземпляров Служить, По умолчанию 30 секунд.
weight: 100 # необязательный, Значение веса по умолчанию полученного экземпляра Служить, По умолчанию 100
2. Создайте маршрут и восходящий поток. Мы используем API администратора для его реализации. Конечно, его также можно создать прямо на панели управления. Если вам интересно, вы можете войти в панель управления после создания, чтобы увидеть конкретную конфигурацию. Вы также можете настроить его позже через белый экран.
curl http://<apisix-admin>:9180/apisix/admin/routes \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' \
-X POST -i -d '
{
"uri": "/api/*", # правила маршрутизации
"host": "test.example.com",
"name": "my-test-route",
"upstream": {
"service_name": "my-service",# микро Служитьимясказать "type": "roundrobin",
"discovery_type": "nacos",
"discovery_args": {
"namespace_id": "public" # Micro Служить существование пространства имен Nacos
}
}
}'
После успешного создания содержимое возвращается. Код состояния — 201, статус — Создано, а идентификатор — это идентификатор правила маршрутизации, который является уникальным.
HTTP/1.1 201 Created
Date: Sat, 4 May 2024 8:11:25 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Connection: keep-alive
Server: APISIX/3.9.1
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Access-Control-Expose-Headers: *
Access-Control-Max-Age: 3600
X-API-VERSION: v3
{"key":"/apisix/routes/00000000000000000483","value":{"host":"test.example.com","update_time":1714784004,"upstream":{"type":"roundrobin","service_name":"my-service","scheme":"http","hash_on":"vars","discovery_type":"nacos","pass_host":"pass","discovery_args":{"namespace_id":"public"}},"priority":0,"status":1,"create_time":1714784004,"name":"my-test-route","uri":"/api/*","id":"00000000000000000483"}}
3. Мы можем запросить конкретную информацию о маршрутизации через идентификатор правила маршрутизации.
curl http://<apisix-admin>:9180/apisix/admin/routes/00000000000000000483 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1'
Возврат содержимого:
{
"value": {
"name": "my-test-route",
"update_time": 1714784004,
"upstream": {
"scheme": "http",
"service_name": "my-service",
"type": "roundrobin",
"hash_on": "vars",
"discovery_type": "nacos",
"pass_host": "pass",
"discovery_args": {
"namespace_id": "public"
}
},
"host": "test.example.com",
"id": "00000000000000000483",
"create_time": 1714784004,
"status": 1,
"uri": "/api/*",
"priority": 0
},
"createdIndex": 484,
"modifiedIndex": 484,
"key": "/apisix/routes/00000000000000000483"
}
4. После настройки мы можем получить доступ к микросервисам, зарегистрированным в Nacos, через APISIX-Ingress.
05. Расширение знаний
Если это служба обратного прокси-сервера k8s, вы можете обратиться к следующему случаю.
apiVersion: apisix.apache.org/v2
kind: ApisixRoute
metadata:
name: nginx-route
namespace: gray # Заполните пространство имён вашего микро Служить здесь
spec:
http:
- name: nginx-route
match:
hosts:
- "test.example.com" # Введите здесь свое доменное имя
paths:
- "/api/*"
backends:
- serviceName: nginx-v1 # Введите сюда название вашего микро Служить
servicePort: 80 # Введите здесь порт Служить вашего микро-Служить.
06. Резюме
Конфигурация маршрутизации APISIX проще и может быть настроена через API администратора или панель управления. Общее ощущение более дружелюбное, чем управление конфигурацией Spring Cloud Gateway. Конечно, на этом общий доступ не является проблемой. Если у вас есть какие-либо вопросы, пожалуйста, оставьте сообщение для обсуждения, спасибо!
Справочная документация:
https://nacos.io/zh-cn/blog/apisix/
https://apisix.apache.org/zh/docs/apisix/discovery/nacos/