-
Notifications
You must be signed in to change notification settings - Fork 4.8k
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
deprecate config using the One True ADS Server(tm) #13951
Comments
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. |
I agree with this directionally, suggest waiting until we have minor versioning working to execute. |
@markdroth @htuch is anyone working on this? i can help out |
I think @adisuissa was going to look at this, but I don't know if he's started yet. |
In addition to the problem with non-aggregated listeners described in the first comment, I think there are other use-cases that may not fit with the proposal. Specifically,
A proposal for named config-source that gets around this issue, and suggests a path forward on future xDSTP features, can be found here. |
@adisuissa I think both of those use-cases are actually already handled by the approach described in this issue. I don't see how the proposal for named ConfigSources actually helps with any of this. Note that there is no requirement here to use "self" ConfigSources for ADS. The "self" option is useful in that it prevents the need for control planes to embed their own name in their resources, but that option really has nothing to do with ADS specifically. The intention here is that a ConfigSource can specify any server it wants and can request the use of ADS by setting the |
My concern is the need to rewrite the same config source in many places, and then the need to identify the same source by comparing the protos (it can be hashed, but not ideal). Making the names explicit has the benefit of defining it once and referencing it from multiple places. |
If the goal is to avoid the repetition, then using xdstp names gives you that, where the name is the authority. Why do we need a second mechanism to do the same thing? |
I agree that xdstp naming gives that, but requires changes on the server side. |
The named ConfigSource approach also requires server-side changes, so I don't see how that's a benefit here. The whole point of the authority in the xdstp names is to indicate what server to get the resource from. There's no value in having the same authority for two resources that you want to fetch from different servers. I don't see what this approach gives us that we don't already have. I think we should implement the thing we've already designed rather than add a second way to do the same thing. |
I was under the impression that the server side changes for the new xdstp-naming scheme is non-trivial, but I may be wrong. |
xdstp:// changes aren't really the huge IMHO. You can even start by using them as opaque identifiers in server or client. |
Motivation: This pull request adds support for SELF config source types. This feature allows the control plane to delegate the decision of which protocol to use to the client. Reference: https://github.com/envoyproxy/envoy/blob/bd18d0fa7790a7e5fe1a95f6ae271ca02614e36c/api/envoy/config/core/v3/config_source.proto#L239 Note that this implementation may not have been completed from envoy side, so we should use this option with caution. ref: envoyproxy/envoy#13951 Modifications: - The dependency relationship between `ResourceNode` and `ConfigSource` has changed. This can be a problem because the configSource specified in `ResourceNode#ConfigSource` can be different from the actual `ConfigSource` used for subscribing. Modified so that `ConfigSource` is computed before creating a `ResourceNode`. - Renamed `BootstrapApiConfigs` to `ConfigSourceMapper` since it better represents the functionality of the class. - Added `parentConfigSource` to the logic of computing a new configSource. - Modified so that subscribed `ResourceNode#configSource` is always non-null. The only case where this is `null` is for static clusters (bootstrap clusters) Result: - SELF type configSource is now supported <!-- Visit this URL to learn more about how to write a pull request description: https://armeria.dev/community/developer-guide#how-to-write-pull-request-description -->
Today, the way ADS is configured is as follows:
ads_config
field indicating the One True ADS Server(tm).lds_resource_locator
andcds_resources_locator
fields set to aConfigSource
with theads
field set.ConfigSource
protos use the sameads
field.This approach seems incompatible with the new xDS naming scheme, which was designed to support federation. As part of the new naming scheme, the
ApiConfigSource.ApiType
enum now hasAGGREGATED_GRPC
andAGGREGATED_DELTA_GRPC
values, which allows configuring anyConfigSource
to use a single ADS stream instead of using a separate stream for each resource type. This way of configuring ADS seems much more in-line with the direction we're heading in and will make it easier to transition to the new federated world.Therefore, I propose replacing this notion of the One True ADS Server(tm) with use of this new
AGGREGATED_GRPC
enum value. The typical ADS configuration described above would instead be represented as follows:ads_config
field.lds_resource_locator
andcds_resources_locator
fields both set to the same server, withApiType
set toAGGREGATED_GRPC
orAGGREGATED_DELTA_GRPC
. (Envoy will internally de-dup these by hashing theConfigSource
s, so the result will be a single ADS stream, not two separate ADS streams.)ConfigSource
protos will use theself
field.This will require the following changes:
self
field. (This field was added in xds: Add self config source type. #8201 but is not currently implemented in Envoy.)AGGREGATED_GRPC
andAGGREGATED_DELTA_GRPC
values in theApiType
enum. (I'm not sure how much of this works right now.)ads_config
field.ads
field.The only configuration that would be broken by this change would be if someone was (e.g.) using non-aggregated LDS to get a
Listener
resource that contained aConfigSource
telling the client to get theRouteConfiguration
via the One True ADS Server(tm). However, it seems exceedingly unlikely that anyone is actually doing that, and there are work-arounds: they can either have their management server send the exactConfigSource
containing the ADS server they want to talk to, or better yet, they can start using the new xDS naming scheme, where they can select the xDS server via an authority in the resource name itself.CC @mattklein123 @htuch
The text was updated successfully, but these errors were encountered: