Використання agentgateway
agentgateway — це проксі панелі даних, який можна використовувати як альтернативу Envoy. Він спеціально створений для трафіку AI-агентів і Model Context Protocol (MCP), а також підтримує маршрутизацію загального призначення на рівні 7. Коли agentgateway увімкнено, Istio може програмувати його замість Envoy для двох ролей в ambient мережі:
- як вхідний шлюз, що обробляє трафік північ–південь, який входить у мережу, та
- як проксі waypoint, що обробляє трафік рівня 7 у напрямку схід-захід для набору робочих навантажень.
Цей посібник пояснює, як працює інтеграція, які API підтримуються та як встановити Istio і налаштувати agentgateway для кожної ролі.
Як працює інтеграція
Istiod налаштовує agentgateway виключно через ресурси Kubernetes Gateway API, які він постачає проксі через xDS. Проксі є окремою реалізацією панелі даних від Envoy: коли Gateway вибирає GatewayClass agentgateway, Istiod створює та керує Deployment і Service agentgateway для нього, так само, як він керує шлюзами Istio на основі Envoy.
Увімкнення agentgateway реєструє два ресурси GatewayClass:
GatewayClass | Контролер | Роль |
|---|---|---|
istio-agentgateway | istio.io/agentgateway-controller | Вхідний шлюз |
istio-agentgateway-waypoint | istio.io/agentgateway-waypoint-controller | Проксі waypoint |
Оскільки панель даних вибирається для кожного Gateway через поле gatewayClassName, agentgateway і типові шлюзи та waypoint Istio на основі Envoy можуть співіснувати в одному кластері. Ви обираєте agentgateway для конкретного шлюзу або waypoint, просто посилаючись на один із класів вище.
Підтримувана та непідтримувана конфігурація
Istio підтримує наступні ресурси Gateway API для agentgateway:
Gateway(з використанням класуistio-agentgatewayабоistio-agentgateway-waypoint)HTTPRoute,GRPCRoute,TCPRouteіTLSRouteInferencePoolз розширення Gateway API для інференсу для маршрутизації до робочих навантажень AI-інференсу
Перед початком
Зверніть увагу, що CRD Kubernetes Gateway API стандартно не встановлені в більшості кластерів Kubernetes, тому переконайтеся, що вони встановлені перед використанням Gateway API:
$ kubectl get crd gateways.gateway.networking.k8s.io &> /dev/null || \
kubectl apply --server-side -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.6.1/experimental-install.yamlВстановлення Istio з увімкненим agentgateway
Підтримка agentgateway вмикається за прапорцем функції PILOT_ENABLE_AGENTGATEWAY на istiod і є стандартно вимкненою. Встановіть Istio з використанням профілю ambient з увімкненим прапорцем. Профіль ambient є обовʼязковим, щоб GatewayClass waypoint також був зареєстрований:
$ istioctl install --set profile=ambient --set values.pilot.env.PILOT_ENABLE_AGENTGATEWAY=true -yПідтвердьте, що обидва ресурси GatewayClass agentgateway зареєстровані:
$ kubectl get gatewayclass istio-agentgateway istio-agentgateway-waypoint
NAME CONTROLLER ACCEPTED AGE
istio-agentgateway istio.io/agentgateway-controller True 30s
istio-agentgateway-waypoint istio.io/agentgateway-waypoint-controller True 30sРозгортання прикладу застосунку
Розгорніть приклад застосунку Bookinfo, який використовується в цьому посібнику:
$ kubectl apply -f @samples/bookinfo/platform/kube/bookinfo.yaml@Налаштування agentgateway як вхідного шлюзу
Щоб використовувати agentgateway як вхідний шлюз, створіть Gateway, який посилається на клас istio-agentgateway. Istiod автоматично створює та керує відповідним розгортанням agentgateway.
$ kubectl apply -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: bookinfo-gateway
annotations:
networking.istio.io/service-type: ClusterIP
spec:
gatewayClassName: istio-agentgateway
listeners:
- name: http
port: 80
protocol: HTTP
allowedRoutes:
namespaces:
from: Same
EOFПоле gatewayClassName: istio-agentgateway — це те, що вибирає панель даних agentgateway замість Envoy. Стандартно Istio створює сервіс LoadBalancer для шлюзу; анотація networking.istio.io/service-type: ClusterIP натомість запитує сервіс ClusterIP, щоб до шлюзу можна було отримати доступ за допомогою kubectl port-forward у цьому посібнику.
Прикріпіть HTTPRoute, щоб відкрити сервіс productpage через шлюз:
$ kubectl apply -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: bookinfo
spec:
parentRefs:
- name: bookinfo-gateway
rules:
- matches:
- path:
type: Exact
value: /productpage
- path:
type: PathPrefix
value: /static
- path:
type: Exact
value: /login
- path:
type: PathPrefix
value: /api/v1/products
backendRefs:
- name: productpage
port: 9080
EOFПідтвердьте, що шлюз створено та запрограмовано. Стовпець CLASS показує клас agentgateway:
$ kubectl get gateway bookinfo-gateway
NAME CLASS ADDRESS PROGRAMMED AGE
bookinfo-gateway istio-agentgateway bookinfo-gateway.default.svc.cluster.local True 30sТепер ви можете отримати доступ до застосунку через вхідний шлюз agentgateway. Перенаправте локальний порт на сервіс шлюзу та відкрийте http://localhost:8080/productpage у своєму браузері:
$ kubectl port-forward svc/bookinfo-gateway 8080:80Налаштування agentgateway як waypoint
Проксі waypoint додає обробку рівня 7 для набору робочих навантажень в ambient мережі. Щоб використовувати agentgateway для цієї ролі, розгорніть Gateway, який посилається на клас istio-agentgateway-waypoint.
Спочатку підтвердьте, що простір імен залучено до ambient панелі даних:
$ kubectl label namespace default istio.io/dataplane-mode=ambient
namespace/default labeledРозгорніть waypoint. Як і всі waypoint, він має визначати єдиного слухача з іменем mesh на порту 15008 з використанням протоколу HBONE; єдина відмінність від waypoint Envoy — це gatewayClassName:
$ kubectl apply -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: agentgateway-waypoint
labels:
istio.io/waypoint-for: service
spec:
gatewayClassName: istio-agentgateway-waypoint
listeners:
- name: mesh
port: 15008
protocol: HBONE
EOFПідтвердьте, що waypoint запрограмовано:
$ kubectl get gateway agentgateway-waypoint
NAME CLASS ADDRESS PROGRAMMED AGE
agentgateway-waypoint istio-agentgateway-waypoint 10.96.15.112 True 30sЗалучіть сервіс до використання waypoint, додавши мітку istio.io/use-waypoint з іменем waypoint. Наприклад, щоб надсилати трафік, призначений для сервісу reviews, через waypoint agentgateway:
$ kubectl label service reviews istio.io/use-waypoint=agentgateway-waypoint
service/reviews labeledЗапити від робочих навантажень в ambient мережі до сервісу reviews тепер маршрутизуються через waypoint agentgateway для обробки рівня 7. Щоб дізнатися більше про залучення просторів імен, сервісів і podʼів, а також про те, як waypoint обробляють різні типи трафіку, дивіться Налаштування проксі waypoint.
Щоб застосувати політику маршрутизації рівня 7 на waypoint, прикріпіть маршрут Gateway API до Service за допомогою parentRef, чий kind дорівнює Service. Наприклад, наступний HTTPRoute надсилає 90% трафіку для сервісу reviews до reviews-v1 і 10% до reviews-v2:
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: reviews
spec:
parentRefs:
- group: ""
kind: Service
name: reviews
port: 9080
rules:
- backendRefs:
- name: reviews-v1
port: 9080
weight: 90
- name: reviews-v2
port: 9080
weight: 10Очищення
Видаліть вхідний шлюз і його маршрут:
$ kubectl delete httproute bookinfo
$ kubectl delete gateway bookinfo-gatewayВидаліть waypoint і відкличте залучення сервісу reviews:
$ kubectl label service reviews istio.io/use-waypoint-
$ kubectl delete gateway agentgateway-waypointВидаліть приклад застосунку та мітку ambient:
$ kubectl delete -f @samples/bookinfo/platform/kube/bookinfo.yaml@
$ kubectl label namespace default istio.io/dataplane-mode-Видаліть Istio:
$ istioctl uninstall --purge -y
$ kubectl delete namespace istio-systemВилучіть CRD Kubernetes Gateway API:
$ kubectl delete -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.6.1/experimental-install.yaml