envoyproxy / envoy

Cloud-native high-performance edge/middle/service proxy
https://www.envoyproxy.io
Apache License 2.0
24.97k stars 4.81k forks source link

Dynamically replace the ADS (xDS) server #35956

Closed adisuissa closed 3 weeks ago

adisuissa commented 2 months ago

Dynamically replace the ADS (xDS) server

Description: In a given deployment there may be a need to dynamically modify and change the ADS (xDS) server that Envoy connects to. This is useful, for example, in cases where the xDS management server needs to go offline due to some maintainence. Currently, it is impossible to dynamically modify the server, as the configuration is only provided in the bootstrap config, and only read once.

We suggest adding a setAdsConfigSource(const envoy::config::core::v3::ApiConfigSource& config_source) method to the Envoy's instance, that allows to dynamically set the ADS configuration to be used. If the config is valid, Envoy will disconnect from the current ADS server, and create a connection as described in the given config-source. The rest of the xDS-protocol will work just as if Envoy was resuming its connection to the originally configured server after disconnecting from it.

As a first step, this will only support changing to an xDS-server of the same type (i.e., keeping the mode to either SotW or Delta-xDS). In the future this can be relaxed.

ramaraochavali commented 2 months ago

We suggest adding a setAdsConfigSource(const envoy::config::core::v3::ApiConfigSource& config_source) method to the Envoy's instance, that allows to dynamically set the ADS configuration to be used.

Curious, what is the workflow to call this method when there is a desire to switch?

adisuissa commented 2 months ago

Curious, what is the workflow to call this method when there is a desire to switch?

The current design requires access to the Envoy's Server-Instance. It will be somewhat similar to the way the xDS-context can be updated. It can be invoked in cases where Envoy is used as a library in a process.

github-actions[bot] commented 1 month ago

This issue has been automatically marked as stale because it has not had activity in the last 30 days. It will be closed in the next 7 days unless it is tagged "help wanted" or "no stalebot" or other activity occurs. Thank you for your contributions.

github-actions[bot] commented 3 weeks ago

This issue has been automatically closed because it has not had activity in the last 37 days. If this issue is still valid, please ping a maintainer and ask them to label it as "help wanted" or "no stalebot". Thank you for your contributions.