-
Notifications
You must be signed in to change notification settings - Fork 492
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
Clarify language around listener compatibility #2274
Comments
Although cloud provider-level limitations will block acceptance of some Gateways, it's not clear that controllers have any way of determining this. There appears to be no standard means of determining that a cloud provider cannot provision a LoadBalancer:
Although controllers cannot determine this issue reliably, this is probably of less concern because the Service will never receive an IP, so we'll never indicate that the Gateway is live (by adding IPs to its status) anyway. |
/triage accepted |
Went and read through the existing language more in depth and now think that we don't need additional Reasons. The existing ones do state they can be used for either protocol or implementation reasons, and that's maybe a murkier boundary than I initially thought anyway. There are still clarity issues with the language around collapsing compatible Listeners:
https://github.com/rainest/gateway-api/pull/1/files to stick similar notes inline. |
I agree with the goals of the issue, and with the conclusions you've got in the initial comment. But I think that the above comment is worth digging into a bit:
I guess this is a "naming is hard" problem again - when we did this originally, we were all pretty clear that the rules were about "collapsing" Listeners from multiple Gateways, on the assumption that a single Gateway with incompatible Listeners would be rejected by the implementation with the Conditions and Reasons we describe. (You don't need to worry about creation time or object name in terms of Listener priority when everything is in the same Gateway, for example). So yeah, "collapsing compatible Listeners" probably really should read "collapsing compatible Listeners between Gateways" instead.
Agreed. This should be clearly stated, as should the fact that it's okay for implementations not to support these combinations. We should also codify combinations like this with Extended conformance tests and feature names (as far as we can), so they'll end up in the final conformance report.
I think something like "here is a list of things that might make a set of Listeners incompatible, depending on the implementation. This list is not exhaustive".
Hmm, yeah, we probably need to update this wording - maybe something like "If the tl;dr it turns out writing specs is hard, and I really appreciate the close reading @rainest! |
What would you like to be added:
Add language stating:
That implementations MUST mark Gateways not Accepted if the requested listeners cannot all be provisioned on a single IP.The Conditions here are a bit unusual in that they're not all or nothing, and the spec permits accepting a Gateway while still marking it as having broken listenersAdd a catch-all Gateway Accepted reason indicating that the Gateway is not accepted because the implementation or environment cannot support it.Why this is needed:
The Gateway API supports freely adding any combination of listeners that satisfy general conflict avoidance rules. However, implementations may not necessarily be able to a listener set that has no conflicts.
Language around listener compatibility has some clarity issues, where it describes an example that may be compatible, but doesn't state reasons why it might not be compatible for a given implementation.
LoadBalancers that handle both TCP and UDP traffic may not be available:
Implementations may be unable to support multiple protocols on the same port:
http
andstream
(L4) proxying and cannot serve the two on the same IP:Port combo. They cannot, therefore, support both HTTPS and TLS listeners on the same port (absent elaborate configuration to double-proxy through an initial stream layer to an http layer behind).Existing condition reasons do not distinguish between spec violations and implementation/environment incompatibility.
The additional Gateway reason distinguishes these cases from cases where the listeners are invalid. Listener configuration may be valid (compliant with the general anti-conflict rules) but not satisfiable due to implementation or environment limitations.On further review, the existing condition constants have language that makes them applicable to either, and we can get without additional and hope that implementations populate the message field well--we probably don't have an obvious use case for separating those reasons in kubectl filters, since you mostly just want to find listeners that have issues, and fewer Reasons makes that easier.Meeting discussion indicated we may wish to add additional listener conditions as well, but I think the existing port and protocol not accepted conditions are probably sufficient. We should add an "implementation reasons" clause to the
ListenerReasonUnsupportedProtocol
comment, but I think implementation-chosen messages in combination with the new broader Gateway accepted reason should be expressive enough.The text was updated successfully, but these errors were encountered: