Weighted Load Balancing#
You can configure weighted load balancing to service instances. For Consul source, weight for a service instance is gathered from its' tag (you can specify tag format in configuration).
The traffic to a given service will be balanced proportionally to its' instances weights. For example, if instance A has weight 50 and instance B has weight 100, then instance B will receive approximately 2x more traffic than A.
You can configure default weight for instances, which don't provide an explicit weight.
This feature is disabled by default. To enable and configure it check appropriate configuration options.
Canary instances#
Envoy-Control supports feature called "Canary instances". If you enable it, every request with canary header will be routed only to canary instances of given service.
For Consul source canary status of an instance is determined by particular instance tag (you can specify tag format in configuration).
If no canary instance is present for a given service, the request will be routed to any instance as a fallback.
Canary instances are also a part of default instances set. That means a request without the canary header may be routed to a canary instance.
Configuring Canary support with dynamic listeners#
When using listeners configured via EC (envoy-control.envoy.snapshot.dynamicListeners.enabled
set to true
)
a default working config will be provided.
Configuring Canary support static listeners#
For this feature to work correctly, appropriate static Envoy config is required.
Example#
Given that you decided the canary header is x-canary: 1
, you should
add envoy.filters.http.header_to_metadata
http filter to your
egress http connection manager in Envoy static config:
listeners:
- name: egress_listener
filter_chains:
filters:
- name: envoy.http_connection_manager
config:
rds:
route_config_name: default_routes
config_source:
ads: {}
http_filters:
- name: envoy.filters.http.header_to_metadata
config:
request_rules:
- header: x-canary
on_header_present:
metadata_namespace: envoy.lb
key: canary
type: STRING
remove: false
- name: envoy.filters.http.router
The envoy.filters.http.header_to_metadata
should be added before
router
filter.
You should also:
- set
metadata-key
configuration option to the same value as thekey
in config above, in this case it will becanary
- set
header-value
configuration option to your chosen header value, in this case it should be1
This feature is disabled by default. To enable and configure it check appropriate configuration options.