Envoy xDS Server with Consul
Envoy Pilot or Envoy xDS is a control plane implementation for Envoy written in Golang and uses Consul for persistence by default. It can also run without Consul by loading configuration from file.
This is an extension of go-control-plane
Currently Supports
Note: Some infrequent configurations might not be mapped. Feel free to PR
Checkout Envoy XDS PROTOCOL Overview for more detail
Also Checkout Sample Project
Checkout the above example to load config from file
xDS Server will be exposed on port 7777
Run Envoy Proxy with the following configurations or use --service-node
&& --service-cluster
node:
id: ride-service-replica-2
cluster: ride-service
Every *DS requires two keys to be set in consul
And the key template is xDS/app-cluster/ride-service/CDS/(config|version)
For CDS add KV pairs
xDS/app-cluster/ride-service/CDS/version
=> "1.0"xDS/app-cluster/ride-service/CDS/config
=> "[{ { "name": "app1", "connect_timeout": "0.250s", "type": "STRICT_DNS", "lb_policy": "RANDOM", "hosts": [{ "socket_address": { "address": "127.0.0.2", "port_value": 1234 } }] } }]"
Pushing new configuration
xDS/app-cluster/ride-service/(CDS|LDS|RDS|EDS)/version
then new config xDS/app-cluster/ride-service/(CDS|LDS|RDS|EDS)/config
will be pushed to subscriber envoy.From root directory
docker network create envoy-pilot_xds-demo
docker-compose -f docker-compose.consul.yaml up
docker-compose -f docker-compose.server.yaml up --build
cd test/integration
docker-compose up --build
cd test/rspec
DEVMODE=true rspec basic_spec.rb --order defined --format documentation
Consul url need to be set in .env
env_values.txt
CONSUL_PATH="http://consul-server:8500"
CONSUL_PREFIX=""xDS"
Docker run
docker run -v $(pwd)/env_values.txt:/.env -p 7777:7777 -p 9090:9090 tak2siva/envoy-pilot:latest
Install using the Helm Chart for Envoy-Pilot.
localhost:9090/dump/KEY_TEMPLATE
will give a json dump of proto mapping
Ex:
http://localhost:9090/dump/xDS/app-cluster/ride-service/(CDS|LDS|RDS|EDS)/config
localhost:9090/dump/subscribers/
Prometheus is running on localhost:8081/metrics
and the following stats are available