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.

  1. node:
  2. cluster: test-cluster
  3. id: test-id
  4. dynamic_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.

  1. id: test-id
  2. dynamic_resources:
  3. ads_config:
  4. api_type: GRPC
  5. transport_api_version: V3
  6. grpc_services:
  7. - envoy_grpc:
  8. cluster_name: xds_cluster
  9. cds_config:
  10. resource_api_version: V3
  11. ads: {}
  12. lds_config:
  13. resource_api_version: V3
  14. ads: {}
  15. static_resources:

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 .

  1. ads: {}
  2. static_resources:
  3. clusters:
  4. - type: STRICT_DNS
  5. typed_extension_protocol_options:
  6. envoy.extensions.upstreams.http.v3.HttpProtocolOptions:
  7. "@type": type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions
  8. explicit_http_config:
  9. http2_protocol_options: {}
  10. name: xds_cluster
  11. load_assignment:
  12. cluster_name: xds_cluster
  13. endpoints:
  14. - lb_endpoints:
  15. - endpoint:
  16. address:
  17. socket_address:
  18. address: my-control-plane
  19. port_value: 18000
  20. admin: