-
Notifications
You must be signed in to change notification settings - Fork 5.3k
Added VHDS protobuf message and updated RouteConfig to include it. #6418
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
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -9,6 +9,7 @@ option java_package = "io.envoyproxy.envoy.api.v2"; | |||||
| option java_generic_services = true; | ||||||
|
|
||||||
| import "envoy/api/v2/core/base.proto"; | ||||||
| import "envoy/api/v2/core/config_source.proto"; | ||||||
| import "envoy/api/v2/discovery.proto"; | ||||||
| import "envoy/api/v2/route/route.proto"; | ||||||
|
|
||||||
|
|
@@ -44,7 +45,23 @@ service RouteDiscoveryService { | |||||
| } | ||||||
| } | ||||||
|
|
||||||
| // [#comment:next free field: 9] | ||||||
| // Virtual Host Discovery Service (VHDS) is used to dynamically update the list of virtual hosts for | ||||||
| // a given RouteConfiguration. If VHDS is configured a virtual host list update will be triggerred | ||||||
| // during the processing of an HTTP request if a route for the request cannot be resolved. The | ||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @mattklein123 how would this work as an HTTP filter? Don't we need an initial route/cluster pick before we start down the HTTP filter chain? I think we were thinking of augmenting HCM to handle this.
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. No, we still iterate all filters even if there is no route, so we can have an optional filter which pauses and fetches a new VHDS entry if users want that functionality vs. just standard eventually consistent VHDS. I would argue this is a cleaner design.
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @mattklein123 yeah, it is arguably much cleaner. What to do about things that are done by HCM in envoy/source/common/http/conn_manager_impl.cc Line 701 in 1cf59d4
RouteConfiguration.
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I don't have all the answers right now, but I think this code should be moved into the route refresh code anyway, since arguably the timeout should be changed if the route changes. This would then "just work" on the on-demand VHDS filter. I'm pretty sure we can make this work cleanly as a filter.
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. That sounds good. So, there will need to be some HCM changes, but we'll push most of the logic into a filter. @dmitri-d WDYT?
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. That's pretty close to the WIP implementation (see https://github.com/envoyproxy/envoy/pull/6406/files#diff-be24bc0fe90bba5c4e871fb56928e085R12). An (the main?) issue with moving code into envoy/source/common/http/conn_manager_impl.cc Line 686 in 1cf59d4
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. cc @alyssawilk for comment. I think we might be able to handle this via an internal redirect from the filter if we can't figure out a more elegant solution during route cache reload. |
||||||
| // :ref:`resource_names_subscribe <envoy_api_msg_DeltaDiscoveryRequest.resource_names_subscribe>` | ||||||
| // field contains a list of virtual host names or aliases to track. The contents of an alias would | ||||||
| // be the contents of a *host* or *authority* header used to make an http request. An xDS server | ||||||
| // will match an alias to a virtual host based on the content of :ref:`domains' | ||||||
| // <envoy_api_msg_route.VirtualHost.domains>` field. The *resource_names_unsubscribe* field contains | ||||||
| // a list of virtual host names that have been `unsubscribed | ||||||
| // <https://github.com/envoyproxy/envoy/blob/master/api/XDS_PROTOCOL.md#unsubscribing-from-resources>`_ | ||||||
| // from the routing table associated with the RouteConfiguration. | ||||||
| service VirtualHostDiscoveryService { | ||||||
| rpc DeltaVirtualHosts(stream DeltaDiscoveryRequest) returns (stream DeltaDiscoveryResponse) { | ||||||
| } | ||||||
| } | ||||||
|
|
||||||
| // [#comment:next free field: 10] | ||||||
| message RouteConfiguration { | ||||||
| // The name of the route configuration. For example, it might match | ||||||
| // :ref:`route_config_name | ||||||
|
|
@@ -55,6 +72,15 @@ message RouteConfiguration { | |||||
| // An array of virtual hosts that make up the route table. | ||||||
| repeated route.VirtualHost virtual_hosts = 2 [(gogoproto.nullable) = false]; | ||||||
|
|
||||||
| // An array of virtual hosts will be dynamically loaded via the VHDS API. | ||||||
htuch marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||||||
| // Both *virtual_hosts* and *vhds* fields will be used when present. *virtual_hosts* can be used | ||||||
| // for a base routing table or for infrequently changing virtual hosts. *vhds* is used for | ||||||
| // on-demand discovery of virtual hosts. The contents of these two fields will be merged to | ||||||
| // generate a routing table for a given RouteConfiguration, with *vhds* derived configuration | ||||||
| // taking precedence. | ||||||
| // [#not-implemented-hide:] | ||||||
|
||||||
| Vhds vhds = 9; | ||||||
htuch marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||||||
|
|
||||||
| // Optionally specifies a list of HTTP headers that the connection manager | ||||||
| // will consider to be internal only. If they are found on external requests they will be cleaned | ||||||
| // prior to filter invocation. See :ref:`config_http_conn_man_headers_x-envoy-internal` for more | ||||||
|
|
@@ -102,3 +128,10 @@ message RouteConfiguration { | |||||
| // using CDS with a static route table). | ||||||
| google.protobuf.BoolValue validate_clusters = 7; | ||||||
| } | ||||||
|
|
||||||
| // [#not-implemented-hide:] | ||||||
| message Vhds { | ||||||
|
||||||
| // Configuration source specifier for VHDS. | ||||||
| envoy.api.v2.core.ConfigSource config_source = 1 | ||||||
| [(validate.rules).message.required = true, (gogoproto.nullable) = false]; | ||||||
| } | ||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -254,6 +254,7 @@ UTF | |
| UUID | ||
| UUIDs | ||
| VH | ||
| VHDS | ||
| VLOG | ||
| WKT | ||
| WRR | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You need to fix the Bazel target deps to include config_source to fix the build.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed.