xdsclient/xdsresource: add AutoHostRewrite and Endpoint Hostname support#8728
xdsclient/xdsresource: add AutoHostRewrite and Endpoint Hostname support#8728Pranjali-2501 merged 3 commits intogrpc:masterfrom
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #8728 +/- ##
==========================================
- Coverage 83.21% 83.19% -0.02%
==========================================
Files 419 419
Lines 32443 32454 +11
==========================================
+ Hits 26997 27001 +4
- Misses 4056 4064 +8
+ Partials 1390 1389 -1
🚀 New features to boost your workflow:
|
easwars
left a comment
There was a problem hiding this comment.
The PR description says:
- This string value is included as a per-endpoint resolver attribute (hostname) in the parsed resource struct.
But the PR only stores it as a string, and not as a resolver attribute. The per-endpoint resolver attribute is defined here:
Line 191 in 69769dc
This means that the parsed Endpoint struct defined here:
resolver.Endpoint instead of a slice of address strings, and the newly added HostName field and some of the other existing things like Weight and HashKey also need to move into the endpoint attributes. This is probably big enough to be made as a separate PR though. Let's discuss this offline.
But for now, maybe the PR description need to be modified though to state that we are only storing it as a string for now and that in a follow-up PR we will change it to be an endpoint attribute.
|
|
||
| tests := []struct { | ||
| name string | ||
| isTrusted bool // Corresponds to ServerConfig |
There was a problem hiding this comment.
Nit: Can we make this field be of type xdsclient.ServerFeature instead?
| got := update.VirtualHosts[0].Routes[0].AutoHostRewrite | ||
| if got != test.wantResult { |
There was a problem hiding this comment.
Nit: The assignment and the conditional can be on the same line.
…icy (gRFC A81) (#8779) This PR implements the xDS :authority header rewriting feature as specified in [gRFC A81](https://github.com/grpc/proposal/blob/master/A81-xds-authority-rewriting.md) ### Key Changes: * xds_cluster_impl LB Policy: * Updated the Picker to check for the auto_host_rewrite flag (passed via ConfigSelector). * If enabled, the picker retrieves the hostname attribute from the subchannel . * The picker populates the Metadata field in PickResult with the new :authority value. * changes in stream.go: * Updated stream.go to inspect the PickResult metadata. If an :authority override is present and the user has not explicitly set an authority via CallOption, the `callHdr.Authority` is updated with hostname. * PR relies on the following changes already merged: * Bootstrap config change (#8692): Added the trusted_xds_server server feature to the bootstrap configuration. * xDS resource validation (#8728): Implemented validation and extraction of the auto_host_rewrite field from RDS resources and the hostname field from EDS resources. * Endpoint Structure (#8750): Refactored xdsresource.Endpoint to use resolver.Endpoint, ensuring that attributes (like the endpoint's hostname) are correctly stored and accessible to the picker. * xDS ConfigSelector changes (#8740): Updated the xDS resolver to propagate the auto_host_rewrite flag from the Route Configuration to the Load Balancer via the ConfigSelector. RELEASE NOTES: * xDS: Added support for the :authority rewriting (gRFC A81). When `autoHostRewrite` is enabled in the xDS RouteConfiguration, the client will rewrite the HTTP/2 :authority header to the value of the selected endpoint's hostname.
This PR implements the validation logic and extracting per endpoint Hostname attributes from xDS resources for gRFC A81
Key Changes:
RDS Resource Validation :
RouteAction.auto_host_rewriteis extracted from the RDS resource and stored in route structtruein the parsed route struct if thetrusted_xds_serveroption is present in theServerConfigand the global environment variable for authority overriding is enabled.EDS Resource Validation:
Endpoint.hostnamefield is extracted from the EDS resource and will be stored as ahostnamestring in parsed endpoint struct. It will be changed to be an per-endpoint resolver attribute in a follow-up PR.RELEASE NOTES: None