-
Notifications
You must be signed in to change notification settings - Fork 503
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
ResolvedRefs condition for GatewayClass parametersRef #2911
Comments
In relation to point 2, one proposal our implementation has come up with is to set The risk here is that if paramsRef goes from valid to invalid, any settings that were in there would be reverted to defaults, leading to a change in behavior or leading to downtime. The impact of this is obviously dependent on the implementation and the settings that exist in that paramsRef. Could be a better alternative than tearing down the entire config tree due to a non-Accepted GatewayClass, though. |
I believe the current fuzziness in the spec around "snapshot/templating" behavior when creating Gateways referencing a configured GatewayClass combined with the difficulty handling of "dynamic" changes to parameters (by modifying either the reference or the referenced object) helps create the justification for adding a Adding a /cc @howardjohn @robscott |
Doesn't that just move the blast radius down one level? Unless we are considering the impact of an invalid policy attachment on a Gateway to be implementation-specific, versus stating in the spec that the Accepted condition should be false. |
At a minimum, yes, and that alone feels like a good improvement. I'd expect that it could be more reasonable for a Gateway to stay |
That was also one of my original concerns. The proposal by @howardjohn in #2924 does limit the blast radius by making paramsRefs namespace-local, so the blast radius of a change would also be limited to the local namespace.
Maybe we should take these options and apply them more broadly? gateway-api/apis/v1/shared_types.go Lines 404 to 418 in 37a7ffb
|
@robscott That's similar to the approach that I mentioned in my first comment for the GatewayClass. Basically just keep things in a good state, but fall back on the paramsRef to the default values (our implementation may just have to use this approach since we are intending to add infra configuration at the top level and the GC paramsRef is the way to do that right now). It's almost the lesser of two evils. Your paramsRef config will be reverted to a valid state, which could cause disruption downstream since values are changing, but it's less disruptive than nullifying the entire downstream config. This obviously is the big issue to figure out, but I also want to make sure we touch on the questions around the existence of a ResolvedRefs condition and the conformance for it. |
The Kubernetes project currently lacks enough contributors to adequately respond to all issues. This bot triages un-triaged issues according to the following rules:
You can:
Please send feedback to sig-contributor-experience at kubernetes/community. /lifecycle stale |
With #2924 merging, there's a path for configuring per-Gateway custom parameters now. I'm not entirely sure if the existing |
The Kubernetes project currently lacks enough active contributors to adequately respond to all issues. This bot triages un-triaged issues according to the following rules:
You can:
Please send feedback to sig-contributor-experience at kubernetes/community. /lifecycle rotten |
The Kubernetes project currently lacks enough active contributors to adequately respond to all issues and PRs. This bot triages issues according to the following rules:
You can:
Please send feedback to sig-contributor-experience at kubernetes/community. /close not-planned |
@k8s-triage-robot: Closing this issue, marking it as "Not Planned". In response to this:
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. |
A discussion was had in Slack about adding a
ResolvedRefs
condition to aGatewayClass
status to reflect the state of aparametersRef
object that is attached. This led to a couple different concerns.How would this coexist with the current InvalidParameters reason that exists for the
Accepted
condition on aGatewayClass
?Potential flows and their status outcomes:
GatewayClass
with badparametersRef
target:GatewayClassStatus[{ type: Accepted, status: False?, reason: InvalidParameters? }, { type: ResolvedRefs, status: False, reason: ResolvedRefs? }]
GatewayClass
with validparametersRef
target, but invalid values:GatewayClassStatus[{ type: Accepted, status: False?, reason: InvalidParameters? }, { type: ResolvedRefs, status: True, reason: ResolvedRefs }]
GatewayClass
with validparametersRef
target and values -> deleteparametersRef
resource:GatewayClassStatus[{ type: Accepted, status: True?, reason: InvalidParameters? }, { type: ResolvedRefs, status: True, reason: ResolvedRefs }]
a.
Gateway
created prior to this change expected to be okay unless dynamic changes are allowed, if so what happens?b.
Gateway
created referencing thisGatewayClass
after this change should setGatewayStatus[{ type: Accepted, status: False?, reason: ? }]
c. Does
GatewayClass
move toAccepted: False
?GatewayClass
with validparametersRef
target and values -> changeparametersRef
resource content so one field becomes invalid:GatewayClassStatus[{ type: Accepted, status: True?, reason: InvalidParameters? }, { type: ResolvedRefs, status: True, reason: ResolvedRefs }]
a.
Gateway
created prior to this change expected to be okay unless dynamic changes are allowed, if so what happens?b.
Gateway
created referencing thisGatewayClass
after this change should setGatewayStatus[{ type: Accepted, status: False?, reason: ? }]
c. Does
GatewayClass
move toAccepted: False
?Another concern that was raised is what the expectations are if dynamic changes are allowed to a
parametersRef
(by either adding/removing the reference, deleting the resource, or updating the fields within it). Specifically, if aGatewayClass
goes from beingAccepted
tonot Accepted
due to an invalid update to theparametersRef
, how does that affect the entire config tree below it? By following a true declarative system, all Gateways under this class should no longer beAccepted
, but this would nullify the entire configuration and be very disruptive. The other option is what was mentioned in the examples above, where previousGateways
live on, while new ones are notAccepted
. Issue here, however, is that if the control plane restarts, it loses the previous state of the validparametersRef
, so the originalGateways
that were left alone will no longer receive those valid params, and the config is void. Note that this is technically an issue today with the existingInvalidParameters
reason on theAccepted
condition, so nothing new with the proposedResolvedRefs
condition.Finally, what does conformance look like? While not stated in the spec, the existing
ResolvedRefs
condition forHTTPRoutes
is required in the conformance tests. Would that make this condition a requirement for aGatewayClass
?The text was updated successfully, but these errors were encountered: