Skip to content

Commit 1200523

Browse files
committed
feat(llm-request-router): route LLM workers through backend router
Route worker gRPC registration by HTTP/2 authority and reverse QUIC by SNI through a highly available backend router. Wire it into the LLM addon, expose the required Gateway routes, harden PKI and render validation, and make local self-managed testing use the same path.
1 parent e7ce169 commit 1200523

40 files changed

Lines changed: 1848 additions & 43 deletions

deploy/helm/gateway-routes/Makefile

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,15 @@
1414
# limitations under the License.
1515

1616

17-
.PHONY: test test-render-routes test-vanity-gateway-route
17+
.PHONY: test test-render-routes test-vanity-gateway-route check-llm-worker-routes
1818

19-
test: test-render-routes test-vanity-gateway-route
19+
test: test-render-routes test-vanity-gateway-route check-llm-worker-routes
2020

2121
test-render-routes:
2222
@sh ./scripts/test-render-routes.sh
2323

2424
test-vanity-gateway-route:
2525
@sh ./scripts/test-vanity-gateway-route.sh
26+
27+
check-llm-worker-routes:
28+
@sh ./scripts/check-llm-worker-routes.sh

deploy/helm/gateway-routes/README.md

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,26 @@ This repository contains the Helm chart for deploying NVCF ingress routes via th
44

55
## Overview
66

7-
The chart deploys `HTTPRoute`, `TCPRoute`, and `ReferenceGrant` resources that attach to an existing Gateway provisioned separately by the cluster operator (e.g. Envoy Gateway, Istio, Traefik, Kong). It also includes optional `PodMonitor` resources for scraping Envoy Gateway proxy metrics with Prometheus.
8-
9-
The chart deploys routing configuration only. It does not include any container images. Backend services referenced by the routes (`api`, `nvct-api`, `api-keys`, `invocation`, `llm-api-gateway`, `vanity-gateway`, `reval`, `sis`, `grpc`, `nats`) must already be deployed separately.
7+
The chart deploys `HTTPRoute`, `GRPCRoute`, `TCPRoute`, `UDPRoute`, and
8+
`ReferenceGrant` resources that attach to an existing Gateway provisioned
9+
separately by the cluster operator, such as Envoy Gateway, Istio, Traefik, or
10+
Kong. It also includes optional `PodMonitor` resources for scraping Envoy
11+
Gateway proxy metrics with Prometheus.
12+
13+
The chart deploys routing configuration only. It does not include any
14+
container images. Backend services referenced by the routes (`api`,
15+
`nvct-api`, `api-keys`, `invocation`, `llm-api-gateway`,
16+
`llm-request-router-backend-router`, `vanity-gateway`, `reval`, `sis`, `grpc`,
17+
`nats`) must already be deployed separately.
1018

1119
## Prerequisites
1220

1321
- Kubernetes cluster
1422
- Helm 3.x
1523
- `kubectl`
1624
- A Gateway API compatible controller installed in the cluster
17-
- An existing `Gateway` resource with an HTTP listener (and TCP listeners if the gRPC or NATS routes are enabled)
25+
- Existing `Gateway` resources with the listeners required by each enabled route
26+
- A Gateway controller with `UDPRoute` support when LLM worker routing is enabled
1827
- The backend services that the routes target, deployed in their respective namespaces
1928

2029
## Getting Started
@@ -57,6 +66,8 @@ Important settings to review before deployment:
5766
- `nvcfGatewayRoutes.gateways.shared.*` for the HTTP Gateway name, namespace, and listener
5867
- `nvcfGatewayRoutes.gateways.grpc.*` for the TCP Gateway name, namespace, and listener
5968
- `nvcfGatewayRoutes.gateways.nats.*` for the NATS TCP Gateway name, namespace, and listener
69+
- `nvcfGatewayRoutes.gateways.llmGrpc.*` for the LLM worker gRPC TCP listener
70+
- `nvcfGatewayRoutes.gateways.llmQuic.*` for the LLM reverse-tunnel UDP listener
6071
- `nvcfGatewayRoutes.routes.<route>.enabled` to toggle individual routes
6172
- `nvcfGatewayRoutes.routes.nvcfApi.grpc.enabled` and
6273
`nvcfGatewayRoutes.routes.nvctApi.grpc.enabled` to expose API gRPC routes
@@ -87,6 +98,7 @@ Enabled `HTTPRoute` entries must not share a resolved hostname because each `HTT
8798
| `grpc` | TCPRoute | Not rendered | `grpc.nvcf:10081` |
8899
| `grpcWorker` | TCPRoute (disabled by default) | Not rendered | `grpc.nvcf:10086` |
89100
| `nats` | TCPRoute (disabled by default) | Not rendered | `nats.nats-system:4222` |
101+
| `llmWorker` | TCPRoute and UDPRoute (disabled by default) | Not rendered | `llm-request-router-backend-router.<backend namespace>:50071/TCP,50072/UDP` |
90102

91103
Cross-namespace routing is supported via `ReferenceGrant` resources rendered into each backend namespace.
92104

@@ -97,3 +109,12 @@ Cross-namespace routing is supported via `ReferenceGrant` resources rendered int
97109
- The `grpc` TCPRoute does not enforce HTTP hostname matching at the Gateway layer. Configure DNS or TCP load balancer routing outside this chart.
98110
- The `grpcWorker` TCPRoute is beta support for split or multi-cluster gRPC worker callbacks. It carries HTTP/1 CONNECT callback traffic only. Enable it only when the control-plane grpc-proxy runs one replica with HPA disabled. Multi-replica grpc-proxy requires pod-specific callback routing and is not supported by this shared TCPRoute.
99111
- Enabling the `nats` route requires a reachable TCP listener for NATS on the referenced Gateway. The HTTP Gateway address does not imply NATS reachability unless that same Gateway also has the NATS TCP listener configured.
112+
- The `llmWorker` routes target Stargate's authority/SNI-aware backend router.
113+
Set `nvcfGatewayRoutes.routes.llmWorker.backend.namespace` to the effective
114+
namespace of the `llm-request-router` release. The gateway chart cannot
115+
derive the namespace of a separate Helm release.
116+
Use `nvcfGatewayRoutes.routes.llmWorker.backend.grpcPort` for registration
117+
traffic and `nvcfGatewayRoutes.routes.llmWorker.backend.quicPort` for reverse
118+
tunnels; this route does not use the generic `backend.port` setting.
119+
Keep the TCP and UDP Gateways separate when the infrastructure requires
120+
separate load balancers for each protocol.

deploy/helm/gateway-routes/chart/templates/_helpers.tpl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,10 @@ app.kubernetes.io/name: {{ include "nvcf-gateway.name" . }}
5353
app.kubernetes.io/instance: {{ .Release.Name }}
5454
{{- end }}
5555

56+
{{- define "nvcf-gateway.llmWorkerBackendNamespace" -}}
57+
{{- required "nvcfGatewayRoutes.routes.llmWorker.backend.namespace is required when llmWorker.enabled is true" .Values.nvcfGatewayRoutes.routes.llmWorker.backend.namespace -}}
58+
{{- end }}
59+
5660
{{/*
5761
Validate that enabled HTTPRoutes do not compete for the same hostname and
5862
root PathPrefix match on the shared Gateway. All HTTPRoute templates in this
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
{{- if and .Values.nvcfGatewayRoutes.enabled .Values.nvcfGatewayRoutes.routes.llmWorker.enabled }}
5+
{{- $backendNamespace := include "nvcf-gateway.llmWorkerBackendNamespace" . }}
6+
apiVersion: gateway.networking.k8s.io/v1beta1
7+
kind: ReferenceGrant
8+
metadata:
9+
name: allow-llm-worker-routes
10+
namespace: {{ $backendNamespace }}
11+
labels:
12+
{{- include "nvcf-gateway.labels" . | nindent 4 }}
13+
spec:
14+
from:
15+
- group: gateway.networking.k8s.io
16+
kind: TCPRoute
17+
namespace: {{ .Values.nvcfGatewayRoutes.gateways.llmGrpc.namespace }}
18+
- group: gateway.networking.k8s.io
19+
kind: UDPRoute
20+
namespace: {{ .Values.nvcfGatewayRoutes.gateways.llmQuic.namespace }}
21+
to:
22+
- group: ""
23+
kind: Service
24+
name: {{ .Values.nvcfGatewayRoutes.routes.llmWorker.backend.name }}
25+
{{- end }}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
{{- if and .Values.nvcfGatewayRoutes.enabled .Values.nvcfGatewayRoutes.routes.llmWorker.enabled }}
5+
{{- $backendNamespace := include "nvcf-gateway.llmWorkerBackendNamespace" . }}
6+
apiVersion: gateway.networking.k8s.io/v1alpha2
7+
kind: TCPRoute
8+
metadata:
9+
name: {{ .Values.nvcfGatewayRoutes.routes.llmWorker.name }}-grpc
10+
namespace: {{ .Values.nvcfGatewayRoutes.gateways.llmGrpc.namespace }}
11+
labels:
12+
{{- include "nvcf-gateway.labels" . | nindent 4 }}
13+
app.kubernetes.io/component: llm-worker-grpc-route
14+
{{- with .Values.nvcfGatewayRoutes.routes.llmWorker.routeAnnotations }}
15+
annotations:
16+
{{- toYaml . | nindent 4 }}
17+
{{- end }}
18+
spec:
19+
parentRefs:
20+
- name: {{ .Values.nvcfGatewayRoutes.gateways.llmGrpc.name }}
21+
namespace: {{ .Values.nvcfGatewayRoutes.gateways.llmGrpc.namespace }}
22+
sectionName: {{ .Values.nvcfGatewayRoutes.gateways.llmGrpc.listenerName }}
23+
rules:
24+
- backendRefs:
25+
- name: {{ .Values.nvcfGatewayRoutes.routes.llmWorker.backend.name }}
26+
namespace: {{ $backendNamespace }}
27+
port: {{ .Values.nvcfGatewayRoutes.routes.llmWorker.backend.grpcPort }}
28+
{{- end }}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
{{- if and .Values.nvcfGatewayRoutes.enabled .Values.nvcfGatewayRoutes.routes.llmWorker.enabled }}
5+
{{- $backendNamespace := include "nvcf-gateway.llmWorkerBackendNamespace" . }}
6+
apiVersion: gateway.networking.k8s.io/v1alpha2
7+
kind: UDPRoute
8+
metadata:
9+
name: {{ .Values.nvcfGatewayRoutes.routes.llmWorker.name }}-quic
10+
namespace: {{ .Values.nvcfGatewayRoutes.gateways.llmQuic.namespace }}
11+
labels:
12+
{{- include "nvcf-gateway.labels" . | nindent 4 }}
13+
app.kubernetes.io/component: llm-worker-quic-route
14+
{{- with .Values.nvcfGatewayRoutes.routes.llmWorker.routeAnnotations }}
15+
annotations:
16+
{{- toYaml . | nindent 4 }}
17+
{{- end }}
18+
spec:
19+
parentRefs:
20+
- name: {{ .Values.nvcfGatewayRoutes.gateways.llmQuic.name }}
21+
namespace: {{ .Values.nvcfGatewayRoutes.gateways.llmQuic.namespace }}
22+
sectionName: {{ .Values.nvcfGatewayRoutes.gateways.llmQuic.listenerName }}
23+
rules:
24+
- backendRefs:
25+
- name: {{ .Values.nvcfGatewayRoutes.routes.llmWorker.backend.name }}
26+
namespace: {{ $backendNamespace }}
27+
port: {{ .Values.nvcfGatewayRoutes.routes.llmWorker.backend.quicPort }}
28+
{{- end }}

deploy/helm/gateway-routes/chart/values.yaml

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,17 @@ nvcfGatewayRoutes:
5151
namespace: gateway
5252
# Listener (sectionName) on the Gateway to attach the route to
5353
listenerName: nats
54+
# TCP Gateway for LLM worker registration and Stargate watches.
55+
llmGrpc:
56+
name: llm-grpc-gateway
57+
namespace: gateway
58+
listenerName: llm-grpc
59+
# UDP Gateway for LLM reverse tunnels. This may be a separate load
60+
# balancer from the TCP Gateway.
61+
llmQuic:
62+
name: llm-quic-gateway
63+
namespace: gateway
64+
listenerName: llm-quic
5465

5566
# HTTPRoute configurations
5667
routes:
@@ -239,6 +250,21 @@ nvcfGatewayRoutes:
239250
namespace: nats-system
240251
port: 4222
241252
routeAnnotations: {}
253+
254+
# Backend-facing LLM registration/watch and reverse-tunnel routes.
255+
# The backend router selects the correct Stargate pod by gRPC authority
256+
# and QUIC SNI, so this route supports multi-replica request routers.
257+
llmWorker:
258+
enabled: false
259+
name: llm-worker
260+
backend:
261+
name: llm-request-router-backend-router
262+
# Required when llmWorker is enabled. Set this to the effective
263+
# llm-request-router namespace.
264+
namespace: ""
265+
grpcPort: 50071
266+
quicPort: 50072
267+
routeAnnotations: {}
242268

243269
# NVCF Worker Container needs to be able to fetch secrets for function pods
244270
# In split/multi cluster planes, ess resides in control-plane and requires
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
#!/usr/bin/env bash
2+
# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
3+
# SPDX-License-Identifier: Apache-2.0
4+
5+
set -euo pipefail
6+
7+
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
8+
chart_dir="${script_dir}/../chart"
9+
rendered="$(mktemp)"
10+
disabled="$(mktemp)"
11+
invalid_backend_namespace_error="$(mktemp)"
12+
trap 'rm -f "$rendered" "$disabled" "$invalid_backend_namespace_error"' EXIT
13+
14+
helm template nvcf-gateway-routes "$chart_dir" \
15+
--namespace gateway \
16+
--set nvcfGatewayRoutes.routes.llmWorker.enabled=true \
17+
--set nvcfGatewayRoutes.gateways.llmGrpc.name=llm-grpc-gateway \
18+
--set nvcfGatewayRoutes.gateways.llmGrpc.namespace=gateway \
19+
--set nvcfGatewayRoutes.gateways.llmQuic.name=llm-quic-gateway \
20+
--set nvcfGatewayRoutes.gateways.llmQuic.namespace=gateway \
21+
--set nvcfGatewayRoutes.routes.llmWorker.backend.namespace=router-system \
22+
>"$rendered"
23+
24+
assert_contains() {
25+
local pattern="$1"
26+
local message="$2"
27+
if ! grep -Fq -- "$pattern" "$rendered"; then
28+
echo "FAIL: ${message}" >&2
29+
exit 1
30+
fi
31+
}
32+
33+
assert_contains "kind: TCPRoute" \
34+
"LLM worker routing must expose gRPC registration over TCP"
35+
assert_contains "kind: UDPRoute" \
36+
"LLM worker routing must expose reverse tunnels over UDP"
37+
assert_contains "name: llm-request-router-backend-router" \
38+
"LLM worker routes must target the authority/SNI-aware backend router"
39+
assert_contains "name: allow-llm-worker-routes" \
40+
"ReferenceGrant must permit cross-namespace LLM worker routes"
41+
assert_contains "sectionName: llm-grpc" \
42+
"TCPRoute must attach to the configured LLM gRPC listener"
43+
assert_contains "sectionName: llm-quic" \
44+
"UDPRoute must attach to the configured LLM QUIC listener"
45+
46+
reference_grant_service_name="$(awk '
47+
$0 == "kind: ReferenceGrant" { in_grant = 1; target_grant = 0; in_to = 0 }
48+
in_grant && !target_grant && $1 == "name:" && $2 == "allow-llm-worker-routes" { target_grant = 1 }
49+
target_grant && $0 == " to:" { in_to = 1 }
50+
target_grant && in_to && $1 == "name:" { print $2; exit }
51+
' "$rendered")"
52+
if [[ "$reference_grant_service_name" != "llm-request-router-backend-router" ]]; then
53+
echo "FAIL: LLM worker ReferenceGrant must stay scoped to the configured backend Service" >&2
54+
exit 1
55+
fi
56+
57+
backend_namespace_references="$(grep -Fc -- "namespace: router-system" "$rendered" || true)"
58+
if [[ "$backend_namespace_references" != "3" ]]; then
59+
echo "FAIL: LLM worker routes and ReferenceGrant must use the configured backend namespace" >&2
60+
exit 1
61+
fi
62+
63+
if helm template nvcf-gateway-routes "$chart_dir" \
64+
--namespace gateway \
65+
--set nvcfGatewayRoutes.routes.llmWorker.enabled=true \
66+
--set-string nvcfGatewayRoutes.routes.llmWorker.backend.namespace= \
67+
>/dev/null 2>"$invalid_backend_namespace_error"; then
68+
echo "FAIL: enabled LLM worker routing must require an explicit backend namespace" >&2
69+
exit 1
70+
fi
71+
if ! grep -Fq -- "nvcfGatewayRoutes.routes.llmWorker.backend.namespace is required when llmWorker.enabled is true" "$invalid_backend_namespace_error"; then
72+
echo "FAIL: missing LLM worker backend namespace must return the expected validation error" >&2
73+
exit 1
74+
fi
75+
76+
helm template nvcf-gateway-routes "$chart_dir" \
77+
--namespace gateway \
78+
--set nvcfGatewayRoutes.routes.llmWorker.enabled=false \
79+
>"$disabled"
80+
81+
if grep -Eq '^ name: (llm-worker-(grpc|quic)|allow-llm-worker-routes)$' "$disabled"; then
82+
echo "FAIL: disabled LLM worker routing must not render route resources" >&2
83+
exit 1
84+
fi
85+
86+
echo "PASS: LLM worker Gateway routes render correctly"

deploy/helm/gateway-routes/scripts/test-render-routes.sh

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,9 @@ assert_resource_count "$default_render" GRPCRoute nvcf-api-grpc gateway 0
164164
assert_resource_count "$default_render" GRPCRoute nvct-api-grpc gateway 0
165165
assert_resource_count "$default_render" TCPRoute grpc-worker gateway 0
166166
assert_resource_count "$default_render" TCPRoute nats gateway 0
167+
assert_resource_count "$default_render" TCPRoute llm-worker-grpc gateway 0
168+
assert_resource_count "$default_render" UDPRoute llm-worker-quic gateway 0
169+
assert_resource_count "$default_render" ReferenceGrant allow-llm-worker-routes nvcf 0
167170
assert_resource_count "$default_render" ReferenceGrant allow-tcproute-to-nats nats-system 0
168171

169172
helm template nvcf-gateway-routes "$repo_root/chart" \
@@ -172,6 +175,8 @@ helm template nvcf-gateway-routes "$repo_root/chart" \
172175
--set nvcfGatewayRoutes.routes.nvctApi.grpc.enabled=true \
173176
--set nvcfGatewayRoutes.routes.grpcWorker.enabled=true \
174177
--set nvcfGatewayRoutes.routes.nats.enabled=true \
178+
--set nvcfGatewayRoutes.routes.llmWorker.enabled=true \
179+
--set nvcfGatewayRoutes.routes.llmWorker.backend.namespace=nvcf \
175180
--set nvcfGatewayRoutes.gateways.nats.name=nats-gateway \
176181
--set nvcfGatewayRoutes.gateways.nats.namespace=gateway \
177182
--set nvcfGatewayRoutes.gateways.nats.listenerName=nats \
@@ -225,6 +230,32 @@ assert_resource_field "$enabled_render" TCPRoute nats gateway '.spec.rules[0].ba
225230
assert_resource_field "$enabled_render" TCPRoute nats gateway '.spec.hostnames' null
226231
assert_resource_field "$enabled_render" TCPRoute nats gateway '.metadata.annotations' null
227232

233+
assert_resource_count "$enabled_render" TCPRoute llm-worker-grpc gateway 1
234+
assert_resource_field "$enabled_render" TCPRoute llm-worker-grpc gateway '.metadata.labels."app.kubernetes.io/component"' llm-worker-grpc-route
235+
assert_resource_field "$enabled_render" TCPRoute llm-worker-grpc gateway '.spec.parentRefs[0].name' llm-grpc-gateway
236+
assert_resource_field "$enabled_render" TCPRoute llm-worker-grpc gateway '.spec.parentRefs[0].namespace' gateway
237+
assert_resource_field "$enabled_render" TCPRoute llm-worker-grpc gateway '.spec.parentRefs[0].sectionName' llm-grpc
238+
assert_resource_field "$enabled_render" TCPRoute llm-worker-grpc gateway '.spec.rules[0].backendRefs[0].name' llm-request-router-backend-router
239+
assert_resource_field "$enabled_render" TCPRoute llm-worker-grpc gateway '.spec.rules[0].backendRefs[0].namespace' nvcf
240+
assert_resource_field "$enabled_render" TCPRoute llm-worker-grpc gateway '.spec.rules[0].backendRefs[0].port' 50071
241+
242+
assert_resource_count "$enabled_render" UDPRoute llm-worker-quic gateway 1
243+
assert_resource_field "$enabled_render" UDPRoute llm-worker-quic gateway '.metadata.labels."app.kubernetes.io/component"' llm-worker-quic-route
244+
assert_resource_field "$enabled_render" UDPRoute llm-worker-quic gateway '.spec.parentRefs[0].name' llm-quic-gateway
245+
assert_resource_field "$enabled_render" UDPRoute llm-worker-quic gateway '.spec.parentRefs[0].namespace' gateway
246+
assert_resource_field "$enabled_render" UDPRoute llm-worker-quic gateway '.spec.parentRefs[0].sectionName' llm-quic
247+
assert_resource_field "$enabled_render" UDPRoute llm-worker-quic gateway '.spec.rules[0].backendRefs[0].name' llm-request-router-backend-router
248+
assert_resource_field "$enabled_render" UDPRoute llm-worker-quic gateway '.spec.rules[0].backendRefs[0].namespace' nvcf
249+
assert_resource_field "$enabled_render" UDPRoute llm-worker-quic gateway '.spec.rules[0].backendRefs[0].port' 50072
250+
251+
assert_resource_count "$enabled_render" ReferenceGrant allow-llm-worker-routes nvcf 1
252+
assert_resource_field "$enabled_render" ReferenceGrant allow-llm-worker-routes nvcf '.spec.from[0].kind' TCPRoute
253+
assert_resource_field "$enabled_render" ReferenceGrant allow-llm-worker-routes nvcf '.spec.from[0].namespace' gateway
254+
assert_resource_field "$enabled_render" ReferenceGrant allow-llm-worker-routes nvcf '.spec.from[1].kind' UDPRoute
255+
assert_resource_field "$enabled_render" ReferenceGrant allow-llm-worker-routes nvcf '.spec.from[1].namespace' gateway
256+
assert_resource_field "$enabled_render" ReferenceGrant allow-llm-worker-routes nvcf '.spec.to[0].kind' Service
257+
assert_resource_field "$enabled_render" ReferenceGrant allow-llm-worker-routes nvcf '.spec.to[0].name' llm-request-router-backend-router
258+
228259
assert_resource_count "$enabled_render" ReferenceGrant allow-tcproute-to-nats nats-system 1
229260
assert_resource_field "$enabled_render" ReferenceGrant allow-tcproute-to-nats nats-system '.spec.from[0].kind' TCPRoute
230261
assert_resource_field "$enabled_render" ReferenceGrant allow-tcproute-to-nats nats-system '.spec.from[0].namespace' gateway

deploy/helm/llm-request-router/Makefile

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ OCI_REGISTRY_NAMESPACE ?= <your-org>
2727
CHART_NAME := $(shell yq -r .name $(helm_dir)/Chart.yaml)
2828
CHART_VERSION := $(shell yq -r .version $(helm_dir)/Chart.yaml)
2929

30-
.PHONY: install uninstall status lint template validate clean package push-oci test check-pki-render check-multi-replica-render
30+
.PHONY: install uninstall status lint template validate clean package push-oci test check-pki-render check-multi-replica-render check-backend-router-render
3131

3232
install:
3333
ifndef values
@@ -65,14 +65,17 @@ template:
6565
validate: template
6666
kubeconform -strict -summary -output pretty -kubernetes-version 1.31.5 bin/manifest.yaml
6767

68-
test: check-pki-render check-multi-replica-render
68+
test: check-pki-render check-multi-replica-render check-backend-router-render
6969

7070
check-pki-render:
7171
sh ./scripts/check-pki-render.sh
7272

7373
check-multi-replica-render:
7474
sh ./scripts/check-multi-replica-render.sh
7575

76+
check-backend-router-render:
77+
sh ./scripts/check-backend-router-render.sh
78+
7679
clean:
7780
rm -rf ./packaged-charts bin
7881

0 commit comments

Comments
 (0)