Використання 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-agentgatewayistio.io/agentgateway-controllerВхідний шлюз
istio-agentgateway-waypointistio.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 і TLSRoute
  • InferencePool з розширення 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, який використовується в цьому посібнику:

Zip
$ 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:

Zip
$ 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
Чи була ця інформація корисною?
Чи є у вас пропозиції щодо покращення?

Дякуємо за ваш відгук!