Usar agentgateway
agentgateway es un proxy de data plane que se puede usar como alternativa a Envoy. Está diseñado específicamente para el tráfico de agentes de IA y Model Context Protocol (MCP), a la vez que admite enrutamiento de propósito general en la capa 7 (L7). Cuando agentgateway está habilitado, Istio puede programarlo en lugar de Envoy para dos roles en una mesh ambient:
- como un ingress gateway, que maneja el tráfico norte-sur que entra a la mesh, y
- como un proxy waypoint, que maneja el procesamiento de capa 7 (L7) este-oeste para un conjunto de workloads.
Esta guía explica cómo funciona la integración, qué APIs son compatibles y cómo instalar Istio y configurar agentgateway para cada rol.
Cómo funciona la integración
Istiod configura agentgateway exclusivamente a través de recursos de la Gateway API de Kubernetes, que
entrega al proxy mediante xDS. El proxy es una implementación de data plane
distinta de Envoy: cuando un Gateway selecciona una
GatewayClass de agentgateway, Istiod aprovisiona y
gestiona un Deployment y un Service de agentgateway para él, de la misma manera que gestiona los gateways de Istio
basados en Envoy.
Al habilitar agentgateway se registran dos recursos GatewayClass:
GatewayClass | Controlador | Rol |
|---|---|---|
istio-agentgateway | istio.io/agentgateway-controller | Ingress gateway |
istio-agentgateway-waypoint | istio.io/agentgateway-waypoint-controller | Proxy waypoint |
Debido a que el data plane se selecciona por Gateway mediante el campo gatewayClassName, agentgateway
y los gateways y waypoints basados en Envoy de Istio pueden coexistir en el mismo clúster. Eliges
agentgateway para un gateway o waypoint específico simplemente haciendo referencia a una de las clases anteriores.
Configuración compatible y no compatible
Istio admite los siguientes recursos de Gateway API para agentgateway:
Gateway(usando la claseistio-agentgatewayoistio-agentgateway-waypoint)HTTPRoute,GRPCRoute,TCPRouteyTLSRouteInferencePool, de la Gateway API Inference Extension, para enrutar hacia workloads de inferencia de IA
Antes de empezar
Ten en cuenta que las CRD de la API de Gateway de Kubernetes no vienen instaladas por defecto en la mayoría de los clusteres de Kubernetes, así que asegúrate de que estén instaladas antes de usar la API de Gateway:
$ kubectl get crd gateways.gateway.networking.k8s.io &> /dev/null || \
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.6.1/standard-install.yamlInstalar Istio con agentgateway habilitado
El soporte de agentgateway está controlado por la feature flag PILOT_ENABLE_AGENTGATEWAY en istiod, y está
deshabilitado de forma predeterminada. Instala Istio usando el perfil ambient con la flag habilitada. El perfil
ambient es necesario para que la GatewayClass de waypoint también se registre:
$ istioctl install --set profile=ambient --set values.pilot.env.PILOT_ENABLE_AGENTGATEWAY=true -yConfirma que ambos recursos GatewayClass de agentgateway están registrados:
$ 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 30sDesplegar una aplicación de ejemplo
Despliega la aplicación de ejemplo Bookinfo, que se usa en los ejemplos de esta guía:
$ kubectl apply -f @samples/bookinfo/platform/kube/bookinfo.yaml@Configurar agentgateway como un ingress gateway
Para usar agentgateway como un ingress gateway, crea un Gateway que haga referencia a la
clase istio-agentgateway. Istiod aprovisiona y gestiona automáticamente el despliegue de agentgateway
correspondiente.
$ 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
EOFEl campo gatewayClassName: istio-agentgateway es lo que selecciona el data plane de agentgateway en lugar
de Envoy. De forma predeterminada, Istio crea un servicio LoadBalancer para un gateway; la
anotación networking.istio.io/service-type: ClusterIP solicita en su lugar un servicio ClusterIP para
que el gateway se pueda alcanzar con kubectl port-forward en esta guía.
Adjunta un HTTPRoute para exponer el servicio productpage a través del gateway:
$ 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
EOFConfirma que el gateway se ha aprovisionado y está programado. La columna CLASS muestra la
clase de agentgateway:
$ kubectl get gateway bookinfo-gateway
NAME CLASS ADDRESS PROGRAMMED AGE
bookinfo-gateway istio-agentgateway bookinfo-gateway.default.svc.cluster.local True 30sAhora puedes acceder a la aplicación a través del ingress gateway de agentgateway. Reenvía un puerto local al
servicio del gateway y abre http://localhost:8080/productpage en tu navegador:
$ kubectl port-forward svc/bookinfo-gateway 8080:80Configurar agentgateway como un waypoint
Un proxy waypoint agrega procesamiento de capa 7 (L7) a un conjunto de workloads en una mesh ambient. Para usar
agentgateway en este rol, despliega un Gateway que haga referencia a la clase
istio-agentgateway-waypoint.
Primero, confirma que el namespace está inscrito en el data plane ambient:
$ kubectl label namespace default istio.io/dataplane-mode=ambient
namespace/default labeledDespliega el waypoint. Como todos los waypoints, debe definir un único listener llamado mesh en el puerto
15008 usando el protocolo HBONE; la única diferencia con un waypoint de Envoy es el
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
EOFConfirma que el waypoint está programado:
$ kubectl get gateway agentgateway-waypoint
NAME CLASS ADDRESS PROGRAMMED AGE
agentgateway-waypoint istio-agentgateway-waypoint 10.96.15.112 True 30sInscribe un servicio para usar el waypoint agregando la etiqueta istio.io/use-waypoint con el nombre
del waypoint. Por ejemplo, para enviar el tráfico destinado al servicio reviews a través del
waypoint de agentgateway:
$ kubectl label service reviews istio.io/use-waypoint=agentgateway-waypoint
service/reviews labeledLas solicitudes de los workloads en la mesh ambient hacia el servicio reviews ahora se enrutan a través del
waypoint de agentgateway para el procesamiento de capa 7 (L7). Para obtener más información sobre cómo inscribir namespaces, servicios y
pods, y cómo los waypoints manejan los diferentes tipos de tráfico, consulta
Configurar proxies waypoint.
Para aplicar una política de enrutamiento de capa 7 (L7) en el waypoint, adjunta una ruta de la Gateway API al Service usando una
parentRef cuyo kind sea Service. Por ejemplo, el siguiente HTTPRoute envía el 90% del tráfico
del servicio reviews a reviews-v1 y el 10% a 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: 10Limpieza
Elimina el ingress gateway y su ruta:
$ kubectl delete httproute bookinfo
$ kubectl delete gateway bookinfo-gatewayElimina el waypoint y desinscribe el servicio reviews:
$ kubectl label service reviews istio.io/use-waypoint-
$ kubectl delete gateway agentgateway-waypointElimina la aplicación de ejemplo y la etiqueta ambient:
$ kubectl delete -f @samples/bookinfo/platform/kube/bookinfo.yaml@
$ kubectl label namespace default istio.io/dataplane-mode-Desinstala Istio:
$ istioctl uninstall --purge -y
$ kubectl delete namespace istio-systemElimina las CRD de la API de Gateway de Kubernetes:
$ kubectl delete -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.6.1/standard-install.yaml