Connect to an agent BETA
With Solo Enterprise for agentgateway, you can route to agent-to-agent (A2A) servers and expose their tools securely.
Before you begin
Install Gloo Gateway and enable the Solo Enterprise for agentgateway integration.
Verify that the Solo Enterprise for agentgateway integration is enabled.
helm get values gloo-gateway -n gloo-system -o yamlExample output:
agentgateway: enabled: true
Step 1: Deploy an A2A server
Deploy an A2A server that you want Solo Enterprise for agentgateway to proxy traffic to. Notice that the Service uses the appProtocol: kgateway.dev/a2a setting. This way, Gloo Gateway configures the Solo Enterprise for agentgateway proxy to use the A2A protocol.
kubectl apply -f- <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: a2a-agent
labels:
app: a2a-agent
spec:
selector:
matchLabels:
app: a2a-agent
template:
metadata:
labels:
app: a2a-agent
spec:
containers:
- name: a2a-agent
image: gcr.io/solo-public/docs/test-a2a-agent:latest
ports:
- containerPort: 9090
---
apiVersion: v1
kind: Service
metadata:
name: a2a-agent
spec:
selector:
app: a2a-agent
type: ClusterIP
ports:
- protocol: TCP
port: 9090
targetPort: 9090
appProtocol: kgateway.dev/a2a
EOF
Step 2: Route with agentgateway
Route to the A2A server with Solo Enterprise for agentgateway.
Create a Gateway resource that uses the
agentgateway-enterpriseGatewayClass. Kgateway automatically creates an Solo Enterprise for agentgateway proxy for you.kubectl apply -f- <<EOF apiVersion: gateway.networking.k8s.io/v1 kind: Gateway metadata: name: agentgateway spec: gatewayClassName: agentgateway-enterprise listeners: - protocol: HTTP port: 8080 name: http EOFVerify that the Gateway is created successfully. You can also review the external address that is assigned to the Gateway. Note that depending on your environment it might take a few minutes for the load balancer service to be assigned an external address. If you are using a local Kind cluster without a load balancer such as
metallb, you might not have an external address.kubectl get gateway agentgatewayExample output:
NAME CLASS ADDRESS PROGRAMMED AGE agentgateway agentgateway 1234567890.us-east-2.elb.amazonaws.com True 93sCreate an HTTPRoute resource that routes incoming traffic to the A2A server.
kubectl apply -f- <<EOF apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: a2a spec: parentRefs: - name: agentgateway namespace: default rules: - backendRefs: - name: a2a-agent port: 9090 EOF
Step 3: Verify the connection
Get the agentgateway address.
As a user, send a request to the A2A server. As an assistant, the agent echoes back the message that you sent.
Example output:
{ "jsonrpc": "2.0", "id": "1", "result": { "id": "1", "message": { "role": "assistant", "parts": [ { "type": "text", "text": "hello gateway!" } ] } } }
Cleanup
You can remove the resources that you created in this guide.
kubectl delete Deployment a2a-agent
kubectl delete Service a2a-agent
kubectl delete Gateway agentgateway
kubectl delete HTTPRoute a2a