Describe the bug
HeadlessDnsDiscovery assumes SRV records contain stable pod hostnames suitable for use as Stargate identities and HTTP/2 authorities. With a Deployment-backed request router, Kubernetes can return both a real pod hostname and a dashed-IP target for the same physical pod.
Pylon creates registration tasks for both identities. stargate-k8s-router can route the real pod identity, but rejects the dashed-IP identity because it does not match a ready Stargate target. Once HTTPS registration works, the invalid registration stream retries indefinitely and obscures the healthy stream.
Steps or code to reproduce bug
- Run the request-router workload as a Deployment behind its headless discovery Service.
- Query
WatchStargates and inspect the returned Stargate identities.
- Observe the same pod advertised once with its real pod name and once with a dashed-IP identity.
- Register using each authority. The real pod identity forwards; the dashed-IP identity is rejected as not ready.
Keep this reproduction separate from HTTPS client tests so transport and discovery failures are not conflated.
Expected behavior
llm-request-router discovery and backend routing support both StatefulSet and Deployment
workloads as first-class configurations. Requiring a migration from one workload kind to the
other is not an acceptable fix.
- Discovery emits only stable identities that
stargate-k8s-router can resolve to ready targets.
- One physical Stargate pod does not produce duplicate logical registration targets.
- StatefulSets retain their stable pod-DNS identity contract.
- Deployments derive a canonical, router-addressable identity from Kubernetes pod/EndpointSlice
metadata instead of treating a dashed-IP SRV target as a separate Stargate.
- Preserve the separation between external TLS dial hostname and internal routing authority.
- EndpointSlice updates, pod replacement, and scale events do not leave stale or duplicate identities.
Acceptance criteria
- A focused discovery test reproduces the dashed-IP plus pod-name result before the fix.
- The fixed result contains only router-addressable identities.
- Registration through the backend router succeeds for every advertised target.
- Deployment rollout and scaling tests do not create duplicate or permanently retrying registration streams.
- StatefulSet rollout and scaling tests retain stable discovery and successful registration.
- A shared conformance matrix proves both workload kinds produce exactly one logical identity per
ready pod and route that identity to the correct current pod IP and ports.
- Chart or runtime configuration can select either workload kind without changing Pylon's
registration contract.
- A dedicated integration case runs after, and independently from, the HTTPS registration test.
Additional context
Tracked by #1292.
By submitting this issue, you agree to follow the project code of conduct and contributing guidelines.
Describe the bug
HeadlessDnsDiscoveryassumes SRV records contain stable pod hostnames suitable for use as Stargate identities and HTTP/2 authorities. With a Deployment-backed request router, Kubernetes can return both a real pod hostname and a dashed-IP target for the same physical pod.Pylon creates registration tasks for both identities.
stargate-k8s-routercan route the real pod identity, but rejects the dashed-IP identity because it does not match a ready Stargate target. Once HTTPS registration works, the invalid registration stream retries indefinitely and obscures the healthy stream.Steps or code to reproduce bug
WatchStargatesand inspect the returned Stargate identities.Keep this reproduction separate from HTTPS client tests so transport and discovery failures are not conflated.
Expected behavior
llm-request-routerdiscovery and backend routing support both StatefulSet and Deploymentworkloads as first-class configurations. Requiring a migration from one workload kind to the
other is not an acceptable fix.
stargate-k8s-routercan resolve to ready targets.metadata instead of treating a dashed-IP SRV target as a separate Stargate.
Acceptance criteria
ready pod and route that identity to the correct current pod IP and ports.
registration contract.
Additional context
Tracked by #1292.
By submitting this issue, you agree to follow the project code of conduct and contributing guidelines.