Replies: 7 comments 23 replies
-
Discussion thread for: If This means that, in the absence of structs named |
Beta Was this translation helpful? Give feedback.
-
Discussion thread for: Allow plural |
Beta Was this translation helpful? Give feedback.
-
Discussion thread for: Copy Kuadrant's concept of merge strategies - what we currently refer to as "direct" sets this to "none". Implementations can specify impl-specific strategies and maybe add that to a GW API library that powers tools like gwctl and direct and inherited are no longer different forms of policy attachment, just different merge strategies |
Beta Was this translation helpful? Give feedback.
-
Spinning out my comment from #2813 (comment), I'd like to propose that targeting both a resource as a whole and a subsection of the same resource by Simultaneously targeting separate non-overlapping subsections of a resource should be allowed for Direct Policies (or with merge strategy |
Beta Was this translation helpful? Give feedback.
-
This is another piece I would like to touch on, slightly separate from the details of the merge strategy (though not entirely), hence a separate comment for it. I can see how a merge strategy TL;DR – I want to propose Policy CRDs to declare explicitly what kind of resource instances of the Policy ultimately affect – not to be confused with the kinds a Policy allows in its This is something we somewhat get "for free" with Direct Policies today. From current definition: Direct Policies "only affect the object they are attached to; that is, the object specified in their Inherited Policies in contrast can target a resource as a mean to ultimately affect other resources, typically lower in the hierarchy. Again from current definition: "Any object that affects settings outside of the object that it attaches to is an Inherited Policy." But also "If a Policy can be used as an Inherited Policy, it MUST be treated as an Inherited Policy, regardless of whether a specific instance of the Policy is only affecting a single object." However, currently there's no straightforward way to tell what level of the hierarchy an Inherited Policy ultimately affects. An Inherited Policy that targets a Gateway could be aiming to augment the behaviour of the Routes or the behaviour of the Backends under that Gateway, for instance. Regarding the merge strategy as the differentiator, I can also see Inherited Policies instances or even entire Inherited Policy kinds that want to enforce the semantics of indivisible ("atomic") specs, i.e., where either one or another Policy instance ultimately affecting a same resource wins, but never a merge of the two Policy instances, whilst still affecting the object indirectly (transitively). Maybe this could be captured from a merge strategy Expanding a little further, maybe we do not need to differentiate so harshly between Direct and Inherited or maybe we do. But I believe we definitely want users of Policies to know:
Should a distinction between Direct and Inherited really be needed, I see 2 possible paths from here:
As a final note, I want to acknowledge the distinction between Direct and Inherited for the practicality of promoting and battle testing these concepts independently. But since now we may be entering a bit of a gray zone between what's one thing and what's the other, we may want to restate the characteristics of Policies in general at a more granular level. |
Beta Was this translation helpful? Give feedback.
-
On more discussion thread for: Constraints: Policies that specify boundaries to what can be declared in the target objects and/or in other Policies of the same kind affecting the same target objects Literally copying the definition from Kuadrant:
The typical use case is: As a platform engineer, I want to set an Inherited Policy at a Gateway that specifies a max/min/enum value allowed at a given field of the object specs ultimately affected by my Policy or of other Policies, lower in the hierarchy, ultimately targeting the same object affected by my Policy, where those other lower object specs and Policies are controlled by other users, such as an App Developer who owns a Route attached to my Gateway and/or who writes a Policy targeting this Route beneath my Gateway. The max/min/enum value I specify in my Policy is not the value itself, nor a default value to be enforced in case not specified at the lower level; it is a limit (boundary) for what can be specified at the lower level by the owners of these other resources. Kuadrant's idea to implement this (currently under scrutiny) is to combine an |
Beta Was this translation helpful? Give feedback.
-
I think that in this vein it would also be ideal to have as part of targetRef a way to exclude a certain listener without needing to name each section name individually. So some form of This would be similar or could re-use the concept of labels and label selectors |
Beta Was this translation helpful? Give feedback.
-
In a dedicated meeting today about Policy Attachment, some community members discussed where Policy Attachment is at (as of writing, #2813 is still in progress, but we hope to merge this in its current state soon, and then to make further changes based on the content of this discussion). Meeting notes are available at https://docs.google.com/document/d/1hF0JuhL-XNCqgmZ_MGP4tgneFxVWEz44niVhM0skBjg/edit?usp=sharing
#2813 splits GEP-713 into a Memorandum GEP, and then separate GEPs for Direct Policy Attachment and Inherited Policy Attachment.
Direct Policy Attachment is a strict subset of Policies that meet a set of rules (defined in GEP-2648 in the PR), and is intended to make us able to graduate restricted Policies included in the API (currently BackendTLSPolicy, but GEP-1619 is proposing to also introduce a BackendLoadBalancerPolicy, which also meets the Direct criteria).
Additionally, the requirements for Inherited Policy have been loosened such that
defaults
oroverrides
stanzas are no longer required. Instead, Policy owners can define how fields should work.In our discussion, we agreed that we, the community, would like to consider the following four things (as suggested by @robscott, thanks Rob!):
I'll make four separate comments outlining my thoughts on these four options, that we can use as starting points for further discussion, so we can keep all of this in the same place.
We also agreed that #2813 will have GEP-2648 and GEP-2649 changed to Provisional, since it seems likely from today's discussion that the distinction may be less relevant in the future.
Beta Was this translation helpful? Give feedback.
All reactions