ce7cb702218693d08ea6d83464d2457c9250027c

This commit is contained in:
ms2k 2026-11-12 20:46:28 +09:00
commit 34c5f8963c
6 changed files with 145336 additions and 0 deletions

View file

@ -0,0 +1,38 @@
apiVersion: agentgateway.dev/v1alpha1
kind: AgentgatewayBackend
metadata:
name: vertex-ai
namespace: agentgateway-system
spec:
ai:
provider:
vertexai:
projectId: ms2k-personal
region: global
policies:
auth:
gcp:
type: AccessToken
secretRef:
name: agentgateway-vertex-ai
---
apiVersion: agentgateway.dev/v1alpha1
kind: AgentgatewayBackend
metadata:
name: novita
namespace: agentgateway-system
spec:
ai:
provider:
custom:
formats:
- type: Completions
path: /openai/v1/chat/completions
host: api.novita.ai
port: 443
policies:
auth:
secretRef:
name: agentgateway-novita
tls:
sni: api.novita.ai

View file

@ -0,0 +1,85 @@
apiVersion: agentgateway.dev/v1alpha1
kind: AgentgatewayParameters
metadata:
name: agentgateway-proxy
namespace: agentgateway-system
spec:
logging:
format: json
level: info
modelCatalog:
sources:
- configMap:
name: agentgateway-model-costs
key: catalog.json
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
memory: 512Mi
podDisruptionBudget:
spec:
minAvailable: 1
service:
spec:
type: ClusterIP
deployment:
metadata:
labels:
app.kubernetes.io/part-of: agentgateway
spec:
replicas: 2
template:
metadata:
labels:
app.kubernetes.io/part-of: agentgateway
spec:
securityContext:
runAsNonRoot: true
seccompProfile:
type: RuntimeDefault
topologySpreadConstraints:
- maxSkew: 1
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
gateway.networking.k8s.io/gateway-name: agentgateway-proxy
---
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: agentgateway-proxy
namespace: agentgateway-system
spec:
gatewayClassName: agentgateway
infrastructure:
parametersRef:
group: agentgateway.dev
kind: AgentgatewayParameters
name: agentgateway-proxy
listeners:
- name: http
protocol: HTTP
port: 80
allowedRoutes:
namespaces:
from: Same
---
apiVersion: v1
kind: Service
metadata:
name: agentgateway-proxy-metrics
namespace: agentgateway-system
labels:
app.kubernetes.io/name: agentgateway-proxy
app.kubernetes.io/component: metrics
spec:
selector:
gateway.networking.k8s.io/gateway-name: agentgateway-proxy
ports:
- name: metrics
port: 15020
targetPort: 15020
protocol: TCP

View file

@ -0,0 +1,8 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- gateway.yaml
- backends.yaml
- routes.yaml
- network-policies.yaml
- model-list.yaml

View file

@ -0,0 +1,21 @@
apiVersion: agentgateway.dev/v1alpha1
kind: AgentgatewayPolicy
metadata:
name: tier-models
namespace: agentgateway-system
spec:
targetRefs:
- group: gateway.networking.k8s.io
kind: HTTPRoute
name: model-catalog
traffic:
transformation:
response:
body: >-
toJson(json(response.body).merge({"data":
json(response.body).data +
json(response.body).data.filter(m, m.id.startsWith("vertex_ai/")).map(m,
m.merge({"id": "vertex_ai_flex/" + m.id.stripPrefix("vertex_ai/")})) +
json(response.body).data.filter(m, m.id.startsWith("vertex_ai/")).map(m,
m.merge({"id": "vertex_ai_batch/" + m.id.stripPrefix("vertex_ai/")}))
}))

View file

@ -0,0 +1,83 @@
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
name: agentgateway-proxy
namespace: agentgateway-system
spec:
endpointSelector:
matchLabels:
gateway.networking.k8s.io/gateway-name: agentgateway-proxy
ingress:
- fromEntities:
- host
toPorts:
- ports:
- port: "15020"
protocol: TCP
- port: "15021"
protocol: TCP
- fromEndpoints:
- matchLabels:
k8s:io.kubernetes.pod.namespace: victoriametrics
app.kubernetes.io/name: vmagent
app.kubernetes.io/instance: main
toPorts:
- ports:
- port: "15020"
protocol: TCP
egress:
- toEndpoints:
- matchLabels:
k8s:io.kubernetes.pod.namespace: agentgateway-system
app.kubernetes.io/name: agentgateway
app.kubernetes.io/instance: agentgateway
toPorts:
- ports:
- port: "9978"
protocol: TCP
- toEndpoints:
- matchLabels:
k8s:io.kubernetes.pod.namespace: agentgateway-system
app.kubernetes.io/name: model-catalog
toPorts:
- ports:
- port: "8080"
protocol: TCP
- toEndpoints:
- matchLabels:
k8s:io.kubernetes.pod.namespace: kube-system
k8s-app: kube-dns
toPorts:
- ports:
- port: "53"
protocol: UDP
- port: "53"
protocol: TCP
- toEntities:
- world
toPorts:
- serverNames:
- api.novita.ai
- oauth2.googleapis.com
- "*.googleapis.com"
ports:
- port: "443"
protocol: TCP
---
apiVersion: cilium.io/v2
kind: CiliumClusterwideNetworkPolicy
metadata:
name: host-egress-agentgateway-proxy
spec:
nodeSelector: {}
egress:
- toEndpoints:
- matchLabels:
k8s:io.kubernetes.pod.namespace: agentgateway-system
gateway.networking.k8s.io/gateway-name: agentgateway-proxy
toPorts:
- ports:
- port: "15020"
protocol: TCP
- port: "15021"
protocol: TCP

111
vendor/platform/agentgateway/routes.yaml vendored Normal file
View file

@ -0,0 +1,111 @@
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: model-catalog
namespace: agentgateway-system
spec:
parentRefs:
- name: agentgateway-proxy
rules:
- matches:
- method: GET
path:
type: Exact
value: /v1/models
backendRefs:
- name: model-catalog
port: 8080
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: models
namespace: agentgateway-system
spec:
parentRefs:
- name: agentgateway-proxy
rules:
- matches:
- method: POST
path:
type: Exact
value: /v1/chat/completions
headers:
- name: x-model
type: RegularExpression
value: ^vertex_ai_flex/.+
filters:
- type: RequestHeaderModifier
requestHeaderModifier:
set:
- name: X-Vertex-AI-LLM-Request-Type
value: shared
- name: X-Vertex-AI-LLM-Shared-Request-Type
value: flex
backendRefs:
- group: agentgateway.dev
kind: AgentgatewayBackend
name: vertex-ai
- matches:
- method: POST
path:
type: PathPrefix
value: /v1
headers:
- name: x-model
type: RegularExpression
value: ^vertex_ai/.+
backendRefs:
- group: agentgateway.dev
kind: AgentgatewayBackend
name: vertex-ai
- matches:
- method: POST
path:
type: PathPrefix
value: /v1
headers:
- name: x-model
type: RegularExpression
value: ^novita/.+
backendRefs:
- group: agentgateway.dev
kind: AgentgatewayBackend
name: novita
---
apiVersion: agentgateway.dev/v1alpha1
kind: AgentgatewayPolicy
metadata:
name: extract-model
namespace: agentgateway-system
spec:
targetRefs:
- group: gateway.networking.k8s.io
kind: Gateway
name: agentgateway-proxy
traffic:
phase: PreRouting
transformation:
conditional:
- condition: request.method == "POST"
policy:
request:
set:
- name: x-model
value: json(request.body).model
---
apiVersion: agentgateway.dev/v1alpha1
kind: AgentgatewayPolicy
metadata:
name: strip-provider-prefix
namespace: agentgateway-system
spec:
targetRefs:
- group: gateway.networking.k8s.io
kind: HTTPRoute
name: models
backend:
ai:
transformations:
- field: model
expression: llmRequest.model.stripPrefix("vertex_ai_flex/").stripPrefix("vertex_ai/").stripPrefix("novita/")