Arch
See alos: https://github.com/DavadDi/envoy_discovery
Start SDS/EDS server
1 2 3 4 5 6 7 8 9 10
| $ cd eds_server/
$ virtualenv env --python=python2.7 $ source env/bin/activate $ pip install -r requirements.txt
$ python main.py
|
Start upstream server
Start server 01
1 2 3 4 5 6 7
| $ cd upstream/
$ virtualenv env --python=python2.7 $ source env/bin/activate $ pip install -r requirements.txt
$ python server.py -p 8081
|
Start server 02
1 2
| $ cd upstream/ $ python server.py -p 8082
|
Register upstream server info to SDS/EDS Server, named “myservice”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| # PUT AND Post share the same format $ curl -XPOST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{ "hosts": [ { "ip_address": "127.0.0.1", "port": 8081, "tags": { "server01": "8081", "canary": false, "load_balancing_weight": 50 } }, { "ip_address": "127.0.0.1", "port": 8082, "tags": { "server01": "8082", "canary": false, "load_balancing_weight": 50 } } ] }' http://localhost:8080/edsservice/myservice
# list info $ curl -XGET http://localhost:8080/edsservice/myservice
|
Start Envoy
1 2 3 4 5 6 7 8
| $ envoy -c envoy_config.yaml --v2-config-only -l debug
$ docker run --rm -v `pwd`/envoy_config.yaml:/etc/envoy_config.yaml lyft/envoy:latest /usr/local/bin/envoy --config-path /etc/envoy_config.yaml -l debug
|
envoy_config.yaml
likes this:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| admin: access_log_path: /dev/null address: socket_address: address: 127.0.0.1 port_value: 9000
node: cluster: mycluster id: test-id
static_resources: listeners: - name: listener_0
address: socket_address: { address: 0.0.0.0, port_value: 10000 }
filter_chains: - filters: - name: envoy.http_connection_manager config: stat_prefix: ingress_http codec_type: AUTO route_config: name: local_route virtual_hosts: - name: local_service domains: ["*"] routes: - match: { prefix: "/" } route: { cluster: service_backend } http_filters: - name: envoy.router
clusters: - name: service_backend type: EDS connect_timeout: 0.25s eds_cluster_config: service_name: myservice eds_config: api_config_source: api_type: REST cluster_names: [eds_cluster] refresh_delay: 5s - name: eds_cluster type: STATIC connect_timeout: 0.25s hosts: [{ socket_address: { address: 127.0.0.1, port_value: 8080 }}]
|
Test
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| $ curl -v http://127.0.0.1:10000/ curl -v http://127.0.0.1:10000/ * Trying 127.0.0.1... * TCP_NODELAY set * Connected to 127.0.0.1 (127.0.0.1) port 10000 ( > GET / HTTP/1.1 > Host: 127.0.0.1:10000 > User-Agent: curl/7.54.0 > Accept: */* > < HTTP/1.1 200 OK < content-type: text/html; charset=utf-8 < content-length: 36 < server: envoy < date: Thu, 28 Jun 2018 03:50:48 GMT < x-envoy-upstream-service-time: 1 < * Connection bc8d7c3f-575b-43fb-beff-dd711d9f0b93
|
All upstream servers are unavailable,errors like this:
1 2 3 4 5 6 7 8 9 10
| $ curl -v http://localhost:10000/ ... < HTTP/1.1 503 Service Unavailable < content-length: 19 < content-type: text/plain < date: Mon, 30 Apr 2018 06:06:20 GMT < server: envoy < * Connection no healthy upstreams
|
See
- envoy-discovery-hello-world
- Envoy control plane ‘hello world’