Add timeout to HttpRoute CRD and bindings#10969
Merged
Conversation
Signed-off-by: Alex Leong <[email protected]>
Signed-off-by: Alex Leong <[email protected]>
Signed-off-by: Alex Leong <[email protected]>
hawkw
approved these changes
Jun 1, 2023
Contributor
hawkw
left a comment
There was a problem hiding this comment.
Looks good to me! Once this has merged, I'll rebase my branch that adds the controller side implementation on top of it.
Contributor
|
Rebased my branch #10975 onto this. |
hawkw
added a commit
to linkerd/linkerd2-proxy-api
that referenced
this pull request
Jun 1, 2023
This branch adds fields to the `OutboundPolicies` API messages for configuring request timeouts. The `HttpRoute.Rule` and `GrpcRoute.Rule` messages now contain a `requestTimeout` field, which contains a `Duration` for a request timeout for that rule. In addition, the `RouteBackend` messages also contain a `requestTimeout` field, which configures a duration for requests dispatched to that specific backend. All new fields have comments describing their intended semantics. These fields are primarily intended to support the new timeout fields added to the HTTPRoute CRD in GEP-1742 (see linkerd/linkerd2#10969). The HTTPRoute timeout configuration are an additional field on the `rule` fields in a route that contains optional `request` and `backendRequest` timeouts. This means that a single request timeout and backend request timeout is set for all backends on an individual route rule. The proxy API additions in this PR are somewhat more flexible than the current HTTPRoute CRD, as each `RouteBackend` has its *own* field for the `backendRequest` timeout. This means that in theory, independent `backendRequest` timeout values could be configured for each individual backend. HTTPRoute doesn't currently support this, but it felt like a good idea to add this flexibility in the proxy API regardless, to support future use cases.
olix0r
approved these changes
Jun 1, 2023
hawkw
added a commit
that referenced
this pull request
Jun 2, 2023
PR #10969 adds support for the GEP-1742 `timeouts` field to the HTTPRoute CRD. This branch implements actual support for these fields in the policy controller. The timeout fields are now read and used to set the timeout fields added to the proxy-api in linkerd/linkerd2-proxy-api#243. In addition, I've added code to ensure that the timeout fields are parsed correctly when a JSON manifest is deserialized. The current implementation represents timeouts in the bindings as a Rust `std::time::Duration` type. `Duration` does implement `serde::Deserialize` and `serde::Serialize`, but its serialization implementation attempts to (de)serialize it as a struct consisting of a number of seconds and a number of subsecond nanoseconds. The timeout fields are instead supposed to be represented as strings in the Go standard library's `time.ParseDuration` format. Therefore, I've added a newtype which wraps the Rust `std::time::Duration` and implements the same parsing logic as Go. Eventually, I'd like to upstream the implementation of this to `kube-rs`; see kube-rs/kube#1222 for details. Depends on #10969 Depends on linkerd/linkerd2-proxy-api#243 Signed-off-by: Eliza Weisman <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Add a new version to the HttpRoute CRD:
v1beta3. This version adds a newtimeoutsstruct to the http route rule. This mirrors a corresponding new field in the Gateway API, as described in GEP-1742. This field is currently unused, but will eventually be read by the policy controller and used to configure timeouts enforced by the proxy.The diff between v1beta2 and v1beta3 is:
We update the
storageversion of HttpRoute to be v1beta3 but continue to serve all versions. Since this new field is optional, the Kubernetes API will be able to automatically convert between versions.