Configuration: Dynamic from control plane

These instructions are slightly more complex as you must also set up a control plane to provide Envoy with its configuration.

There are a number of control planes compatible with Envoy’s API such as Gloo or Istio.

You may also wish to explore implementing your own control plane, in which case the Go Control Plane provides a reference implementation that is a good place to start.

At a minimum, you will need to start Envoy configured with the following sections:

  • node to uniquely identify the proxy node.

  • dynamic_resources to tell Envoy which configurations should be updated dynamically

  • static_resources to specify where Envoy should retrieve its configuration from.

You can also add an admin section if you wish to monitor Envoy or retrieve stats or configuration information.

The following sections walk through the dynamic configuration provided in the demo dynamic control plane configuration file.

node

The node should specify cluster and id.

1node:
2  cluster: test-cluster
3  id: test-id
4
5dynamic_resources:

dynamic_resources

The dynamic_resources specify the configuration to load dynamically, and the cluster to connect for dynamic configuration updates.

In this example, the configuration is provided by the xds_cluster configured below.

 3  id: test-id
 4
 5dynamic_resources:
 6  ads_config:
 7    api_type: GRPC
 8    grpc_services:
 9    - envoy_grpc:
10        cluster_name: xds_cluster
11  cds_config:
12    ads: {}
13  lds_config:
14    ads: {}
15
16static_resources:
17  clusters:
18  - type: STRICT_DNS
19    typed_extension_protocol_options:

static_resources

Here we specify the static_resources to retrieve dynamic configuration from.

The xds_cluster is configured to query a control plane at http://my-control-plane:18000 .

17  clusters:
18  - type: STRICT_DNS
19    typed_extension_protocol_options:
20      envoy.extensions.upstreams.http.v3.HttpProtocolOptions:
21        "@type": type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions
22        explicit_http_config:
23          http2_protocol_options: {}
24    name: xds_cluster
25    load_assignment:
26      cluster_name: xds_cluster
27      endpoints:
28      - lb_endpoints:
29        - endpoint:
30            address:
31              socket_address:
32                address: my-control-plane
33                port_value: 18000
34
35admin:
36  address:
37    socket_address:
38      address: 0.0.0.0