Hi everyone,
I’m working on setting up Envoy with a custom REST XDS control plane in a Kubernetes environment, and I’m running into a persistent issue where Envoy fails to fetch clusters and listeners from the control plane.
Here’s the setup and what I’ve observed:
🧱 Deployment Context
Envoy and control plane are both deployed in the same namespace:
distributed-cache-tenant-dev
Control plane is a Spring Boot service exposing the following endpoints:
Envoy bootstrap configuration (simplified):
🧩 Observed Issue
Envoy container logs show continuous warnings like:
When I manually test from within the same namespace:
I get:
So it seems Envoy is calling /v3/discovery:clusters and /v3/discovery:listeners (note the colon), but the server was initially serving /v3/discovery/clusters and /v3/discovery/listeners.
I’ve updated the control plane to serve both:
However, I’m still seeing the same REST update failures in Envoy logs.
🔍 Questions
Does Envoy REST XDS strictly require colon-based paths (e.g. /v3/discovery:clusters)?
Are there specific response headers or structure required for REST XDS responses beyond standard JSON (e.g. Content-Type, type_url, version_info, etc.)?
Any example of a minimal working REST XDS control plane implementation that successfully satisfies Envoy?
Would really appreciate any insights, examples, or references from folks who’ve implemented custom REST-based control planes for Envoy before. 🙏
Thanks
Lakshmi