Arch

See alos: https://github.com/DavadDi/envoy_discovery
Start SDS/EDS server
| 12
 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
| 12
 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
| 12
 
 | $ cd upstream/$ python server.py -p 8082
 
 | 
Register upstream server info to SDS/EDS Server, named  “myservice” 
| 12
 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
| 12
 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:
| 12
 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
| 12
 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:
| 12
 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’