From b695cee9873b04364abb826415709bb06599d48f Mon Sep 17 00:00:00 2001 From: Story Crater Bot <19826264+Riotpiaole@users.noreply.github.com> Date: Thu, 13 Aug 2026 07:55:21 -0700 Subject: [PATCH] =?UTF-8?q?fix(api):=20label=20Kong=20pods=20llm-client=3D?= =?UTF-8?q?true=20so=20llm-serving=20NetworkPolicy=20admits=20them=20?= =?UTF-8?q?=E2=80=94=20chat/embeddings/rerank/score=20routes=20silently=20?= =?UTF-8?q?hung=20until=20the=20client=20timeout=20because=20Cilium=20drop?= =?UTF-8?q?ped=20Kong's=20packets?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit llm-serving-default-deny admits port 8080 only from pods carrying llm-client=true. Kong lacked it, so every route that actually contacts an upstream timed out. /v1/models masked the problem: request-termination answers inside Kong and never touches an upstream, so it returned 200 throughout. Opting in via podLabels rather than relaxing the policy — it is a compensating control, not hygiene, since vLLM v0.11.0 is frozen on Volta and will not receive patches for several remote/unauthenticated advisories. podLabels land only in the pod template, not spec.selector.matchLabels, so this is not an immutable-field change. --- k8s/apps/api/kong-values.yaml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/k8s/apps/api/kong-values.yaml b/k8s/apps/api/kong-values.yaml index 117285e..ac69f34 100644 --- a/k8s/apps/api/kong-values.yaml +++ b/k8s/apps/api/kong-values.yaml @@ -29,6 +29,18 @@ fullnameOverride: kong # stateless in DB-less mode, so replicas are pure redundancy. replicaCount: 2 +# Opt in to the `llm-serving-default-deny` NetworkPolicy, which admits port 8080 +# only from pods carrying this label. That policy is a compensating control, not +# hygiene: vLLM v0.11.0 is frozen on Volta and will never receive patches for +# several remote/unauthenticated advisories, so it must not be broadly reachable. +# +# Without this label Cilium DROPS the packets rather than refusing them, so the +# symptom is a request that hangs until the client's timeout — not a connection +# error. /v1/models still worked while this was missing, because +# request-termination answers inside Kong and never touches an upstream. +podLabels: + llm-client: "true" + env: # DB-less. Config comes from Kubernetes objects via the ingress controller, so # git stays the source of truth. A Postgres-backed Kong would put live routing