Skip to content

fix(stargate): support StatefulSet and Deployment discovery identities #1295

Description

@mikeyrcamp

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

  1. Run the request-router workload as a Deployment behind its headless discovery Service.
  2. Query WatchStargates and inspect the returned Stargate identities.
  3. Observe the same pod advertised once with its real pod name and once with a dashed-IP identity.
  4. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions