Skip to content
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

add api changes according to gep-3155 #3304

Merged
merged 1 commit into from
Aug 31, 2024

Conversation

LiorLieberman
Copy link
Member

@LiorLieberman LiorLieberman commented Aug 29, 2024

/kind feature
What this PR does / why we need it:
Update CRDs per gep-3155

Does this PR introduce a user-facing change?:

Enhance experimental support for backendmtls configuration

/cc @mkosieradzki

@k8s-ci-robot k8s-ci-robot added release-note Denotes a PR that will be considered when it comes time to generate release notes. kind/feature Categorizes issue or PR as related to a new feature. cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. labels Aug 29, 2024
@k8s-ci-robot k8s-ci-robot added the size/L Denotes a PR that changes 100-499 lines, ignoring generated files. label Aug 29, 2024
@k8s-ci-robot k8s-ci-robot added size/XL Denotes a PR that changes 500-999 lines, ignoring generated files. and removed size/L Denotes a PR that changes 100-499 lines, ignoring generated files. labels Aug 29, 2024
@k8s-ci-robot k8s-ci-robot added size/L Denotes a PR that changes 100-499 lines, ignoring generated files. and removed size/XL Denotes a PR that changes 500-999 lines, ignoring generated files. labels Aug 29, 2024
@k8s-ci-robot k8s-ci-robot added the do-not-merge/invalid-commit-message Indicates that a PR should not merge because it has an invalid commit message. label Aug 29, 2024
@LiorLieberman LiorLieberman force-pushed the gep-3155-impl branch 3 times, most recently from c131972 to 0877cf2 Compare August 29, 2024 09:47
@k8s-ci-robot k8s-ci-robot removed the do-not-merge/invalid-commit-message Indicates that a PR should not merge because it has an invalid commit message. label Aug 29, 2024
@LiorLieberman
Copy link
Member Author

/retest

Comment on lines +538 to +544
// AbsoluteURI represents a Uniform Resource Identifier (URI) as defined by RFC3986.

// The AbsoluteURI MUST NOT be a relative URI, and it MUST follow the URI syntax and
// encoding rules specified in RFC3986. The AbsoluteURI MUST include both a
// scheme (e.g., "http" or "spiffe") and a scheme-specific-part. URIs that
// include an authority MUST include a fully qualified domain name or
// IP address as the host.
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure how we should approach for case-sensitivity, scheme and host aren't but other parts can be. Let me know if you want to add any language to indicate what we expect

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe "implementations SHOULD treat this string case insensitively" or something? Feels like it's better to have some stance on case sensitivity rather than none.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think I'd leave case sensitivity out of this as it's potentially different depending on the scheme. Per RFC-3986:

When a URI uses components of the generic syntax, the component syntax equivalence rules always apply; namely, that the scheme and host are case-insensitive and therefore should be normalized to lowercase. For example, the URI HTTP://www.EXAMPLE.com/ is equivalent to http://www.example.com/. The other generic syntax components are assumed to be case-sensitive unless specifically defined otherwise by the scheme

https://datatracker.ietf.org/doc/html/rfc3986#section-6.2.2.1

Copy link
Contributor

@youngnick youngnick left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changes LGTM, aside from extra whitespace.

Comment on lines +538 to +544
// AbsoluteURI represents a Uniform Resource Identifier (URI) as defined by RFC3986.

// The AbsoluteURI MUST NOT be a relative URI, and it MUST follow the URI syntax and
// encoding rules specified in RFC3986. The AbsoluteURI MUST include both a
// scheme (e.g., "http" or "spiffe") and a scheme-specific-part. URIs that
// include an authority MUST include a fully qualified domain name or
// IP address as the host.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe "implementations SHOULD treat this string case insensitively" or something? Feels like it's better to have some stance on case sensitivity rather than none.

pkg/test/cel/grpcroute_experimental_test.go Outdated Show resolved Hide resolved
pkg/test/cel/httproute_experimental_test.go Outdated Show resolved Hide resolved
// Support: Core
//
// +optional
// <gateway:experimental>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was kind of confused when I saw this new experimental feature to be set as core. This can be problematic, as when we graduate this feature to GA, this will be a breaking change: all implementation will have to support it, otherwise conformance won't be given. I think this is a bit problematic, but I'd like to ask others' opinion (@robscott @youngnick @shaneutt).

I just found out we already have a precedent, with the infrastructure Gateway feature.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fair. I think before graduating this to GA we should have at least (3?) implementations implementing it, right?

I am not sure if there are guidelines on whether a feature should have to graduate as extended, I think support level and channel are two different things. I believe if we move any feature to Core support, it would mean some implementations would loose conformance.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤔 This actually might be sufficiently portable that everyone could implement it. I know we default to "extended" for so many things, that it's rare to add a new core feature, but this particular one seems like it could be worth aiming for. In general, I'd say the support level that gets merged in experimental is more of a target than a reality since it's still locked behind experimental CRDs. So I'm actually in favor of starting with "core" as a signal that we hope and expect this to graduate at that level, so implementations have a lot of time (2 releases) to call out issues with this goal. I think it would be less disruptive to move from "core" to "extended" in the future than the other way around.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm in favor of starting in extended and then we can start communicating a desire to move it to core as soon as we like, giving some soak time for implementations to think about that.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My thinking is that nothing in experimental channel can really be "core" anyways, so the support level here is more aspirational than anything. So at this point we're signaling that we think this can be "core", and thus giving the maximum possible notice that that's what it may graduate to standard as. Any alternative seems like it would either result in less notice to implementations or graduating the feature as "extended" and then having to manage a second transition to "core". I'd rather just start with a target of what we think we can achieve and then accept pushback to a lower level before this feature graduates if we think that's necessary.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm fine with having this targeted as core, and agree when you say that in case we'll change it in the future, the core->extended transition is less problematic than the extended->core. One thing we should be very careful about is clearly stating to implementations that when an experimental core feature graduates, that's a breaking change (i.e., all the implementations MUST implement it). We need to communicate this ahead of time, to avoid that implementation suddenly and inexpectedly see their conformance broken.

Co-authored-by: mkosieradzki 10385115+mkosieradzki@users.noreply.github.com
Copy link
Member

@robscott robscott left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @LiorLieberman! Will defer to someone else for final LGTM.

/approve


// +kubebuilder:validation:MinLength=1
// +kubebuilder:validation:MaxLength=253
// +kubebuilder:validation:Pattern=`^(([^:/?#]+):)(//([^/?#]*))([^?#]*)(\?([^#]*))?(#(.*))?`
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Non-blocking nit: Would be nice to have a way to track the source of this RegEx for future readers. Can you leave a comment in #3306 with the source of this validation?

// Support: Core
//
// +optional
// <gateway:experimental>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My thinking is that nothing in experimental channel can really be "core" anyways, so the support level here is more aspirational than anything. So at this point we're signaling that we think this can be "core", and thus giving the maximum possible notice that that's what it may graduate to standard as. Any alternative seems like it would either result in less notice to implementations or graduating the feature as "extended" and then having to manage a second transition to "core". I'd rather just start with a target of what we think we can achieve and then accept pushback to a lower level before this feature graduates if we think that's necessary.

@k8s-ci-robot k8s-ci-robot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Aug 30, 2024
Copy link
Member

@shaneutt shaneutt left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @LiorLieberman!

This looks good:

/approve

However, there seems to be some building consensus that we should not be calling this supported at a Core level so just putting a hold until everyone's had a chance to say their piece and we sort that out.

/hold

@k8s-ci-robot k8s-ci-robot added the do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. label Aug 30, 2024
@k8s-ci-robot
Copy link
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: LiorLieberman, robscott, shaneutt

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@LiorLieberman
Copy link
Member Author

Thanks @LiorLieberman!

This looks good:

/approve

However, there seems to be some building consensus that we should not be calling this supported at a Core level so just putting a hold until everyone's had a chance to say their piece and we sort that out.

/hold

I saw you commented +1 on the thread to leave it as core, to indicate our aspirational support level. Am i wrong ?

@robscott
Copy link
Member

I saw you commented +1 on the thread to leave it as core, to indicate our aspirational support level. Am i wrong ?

Maybe just waiting to ensure @mlavacca is on board with this approach? In any case, I'm fine to hold off on merging this until he can take a look. IMO, this is sufficiently complete within the timeline we'd agreed to to make it into v1.2, just holding off on final merge for one last signoff.

@robscott robscott added this to the v1.2.0 milestone Aug 30, 2024
Copy link
Member

@mlavacca mlavacca left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm fine with merging this one. I left a comment about the core vs extended discussion in the related thread.

/lgtm
/unhold

@k8s-ci-robot k8s-ci-robot removed the do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. label Aug 31, 2024
@k8s-ci-robot k8s-ci-robot added the lgtm "Looks good to me", indicates that a PR is ready to be merged. label Aug 31, 2024
@k8s-ci-robot k8s-ci-robot merged commit 26051f5 into kubernetes-sigs:main Aug 31, 2024
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
approved Indicates a PR has been approved by an approver from all required OWNERS files. cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. kind/feature Categorizes issue or PR as related to a new feature. lgtm "Looks good to me", indicates that a PR is ready to be merged. release-note Denotes a PR that will be considered when it comes time to generate release notes. size/L Denotes a PR that changes 100-499 lines, ignoring generated files.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants