-
Notifications
You must be signed in to change notification settings - Fork 4.9k
Filter Chain DS support #39141
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
Here's some FCDS history that I'm aware of:
|
Thanks @adisuissa, my intention is indeed creating small gradual PRs in the direction of implementing this. The breakdown is described above in the issue description. If you feel there's some missing step please let me know. |
I think the high-level plan is ok, but will probably need to be broken down further to smaller chunks. |
Additional Description: Adding unimplemented FCDS API as a first step in roadmap to support this feature. See #39141 for feature description. Most of the specifications are described inline with the API changes but for extra clarity I will describe them here: - Current FCDS implementation is intended to discover a filter chain object (including its name) - It's meant to support both delta and SoTW APIs - A discovery request should include the containing context name. The containing context can either be customized per discovery in the config or derived by the listener's name. - A listener may contain both statically configured filter chains as well as runtime discovered filter chains. However, if a discovered filter chain matches any of another existing filter chain, its configuration is discarded (this will be later indicated by metrics and/or logs). - The model here is very similar to how EDS works. A cluster owns an EDS subscription. It uses a custom service name or the cluster name in the discovery request and the server responds with a list of endpoints. In this discovery service, the listener owns the FCDS subscription, mentioned by the listener name or custom configured name, and the server responds with list of filter chains. Example usage: ``` static_resources: listeners: - name: tcp_listener_1 stat_prefix: tcp_listener address: socket_address: protocol: TCP address: 0.0.0.0 port_value: 1111 filter_chains: - name: some_static_filter_chain filters: - filter_1 - filter_2 fcds_config: name: tcp_listener_1_dynamic_filter_chains config_source: api_config_source: api_type: GRPC transport_api_version: V3 grpc_services: - envoy_grpc: cluster_name: xds_cluster ``` Risk Level: low Testing: none Docs Changes: API Release Notes: none Platform Specific Features: none --------- Signed-off-by: Ohad Vano <ohadvano@gmail.com> Signed-off-by: ohadvano <49730675+ohadvano@users.noreply.github.com>
Additional Description: Adding unimplemented FCDS API as a first step in roadmap to support this feature. See envoyproxy#39141 for feature description. Most of the specifications are described inline with the API changes but for extra clarity I will describe them here: - Current FCDS implementation is intended to discover a filter chain object (including its name) - It's meant to support both delta and SoTW APIs - A discovery request should include the containing context name. The containing context can either be customized per discovery in the config or derived by the listener's name. - A listener may contain both statically configured filter chains as well as runtime discovered filter chains. However, if a discovered filter chain matches any of another existing filter chain, its configuration is discarded (this will be later indicated by metrics and/or logs). - The model here is very similar to how EDS works. A cluster owns an EDS subscription. It uses a custom service name or the cluster name in the discovery request and the server responds with a list of endpoints. In this discovery service, the listener owns the FCDS subscription, mentioned by the listener name or custom configured name, and the server responds with list of filter chains. Example usage: ``` static_resources: listeners: - name: tcp_listener_1 stat_prefix: tcp_listener address: socket_address: protocol: TCP address: 0.0.0.0 port_value: 1111 filter_chains: - name: some_static_filter_chain filters: - filter_1 - filter_2 fcds_config: name: tcp_listener_1_dynamic_filter_chains config_source: api_config_source: api_type: GRPC transport_api_version: V3 grpc_services: - envoy_grpc: cluster_name: xds_cluster ``` Risk Level: low Testing: none Docs Changes: API Release Notes: none Platform Specific Features: none --------- Signed-off-by: Ohad Vano <ohadvano@gmail.com> Signed-off-by: ohadvano <49730675+ohadvano@users.noreply.github.com> Signed-off-by: Jacob Lisi <jtlisi@google.com>
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. |
not stale |
Uh oh!
There was an error while loading. Please reload this page.
This is a feature tracking issue for adding filter chain discovery service support in Envoy.
Filter chain discovery can be looked at in two ways:
Although the goal is achieving both of the capabilities above, first step focuses on the 2nd capability of FCDS.
This feature was mentioned in the past in #4540.
There have been improvements to Envoy's listeners since then. For example, when Envoy receives an LDS update, it only adjusts the filter chains which have been modified, preventing the draining of connections of unaffected filter chains.
While this is useful for most cases, in some other cases this is still not robust enough. In a deployment where a filter chain represents a small scoped system object, a single listener may contain a high number of filter chains. A single change (add/remove/update) requires xDS server to send the entire listener object and Envoy to process that object. If the updates are frequent, this becomes an issue that causes high config update latencies as well as busier main-thread.
Having the ability to stream updates just for a specific filter chain change not only simplifies the deployments and control plane management but also improves how Envoy copes with this kind of use case.
The roadmap for this feature:
listener_impl
cc @envoyproxy/api-shepherds, @ggreenway
The text was updated successfully, but these errors were encountered: