Replies: 4 comments 16 replies
-
This is a great topic, thanks for raising it! Our documentation really needs to cover this - I completely agree with your suggestion for a docs page about this. I think that each instance of a controller should have a unique name. We currently validate that each controller name is a domain-prefixed path. Given that, my recommendation would be for each implementation to support controller name values with custom paths. For example, the Acme controller may support controller names matching this prefix: |
Beta Was this translation helpful? Give feedback.
-
Remember, in almost all cases, this will be a cluster-admin operation. Any groups with that level of access that are making changes to cluster infrastructure will need to co-ordinate. |
Beta Was this translation helpful? Give feedback.
-
Related but a bit of an aside, and consider this a thought experiment: In our implementation of Gateways so far it seems that we would want a strict 1:1 mapping of actual controllers to the Given the above we've at least thought about linking controllers by the metadata name of a I'm well aware of the implications here, and this is NOT what we're planning to do so I re-iterate that this is a throught experiment only, but what are your thoughts on this? If nothing else then for posterity what are the problems you would anticipate coming from this? (the purpose of this would be to see if there's something in the spec that might need to be changed OR to gather insights that we can then document in the spec to help reinforce it) |
Beta Was this translation helpful? Give feedback.
-
I was just glancing through back discussions before starting my own, but I'm wondering about the premise here. This seems to suggest that If not, then there's some other access control (Helm chart allowlist, Gatekeeper / Kyverno or whatnot) going on here by the cluster owner which could be leveraged to prevent the two Teams from being able to deploy any Pod which has permissions to control or view Gateways in the other team's namespaces. |
Beta Was this translation helpful? Give feedback.
-
Consider this hypothetical scenario:
Team1
andTeam2
at companyACME
both share a large Kubernetes cluster and both use theacme-gateway-controller
for ingress to their apps.Let's assume the following about the
acme-gateway-controller
:--gateway-class
ofacme.io/gateway-controller
GatewayClass
name
for theGatewayClass
by defaultacme.io/gateway-controller
for theGatewayClass
's.spec.controller
by defaultThereafter
Team1
andTeam2
do the following:acme-gateway-controller
using mostly defaultsGateway
resources configured for thename
of theGatewayClass
that Helm generatedIn the above scenario you would have two
acme-gateway-controller
controller managers which would both be referenced bycontroller
name in each other'sGatewayClass
, the implication being that they would both provision copies of each othersGateway
resources, and then each othersRoutes
in those Gateways.I see the potential for this to seem like a bit of an edge case and perhaps maybe a problem people would assume needs to be dealt with by
Team1
andTeam2
being more deliberate in their implementations and/or theacme-gateway-controller
needs to not use a static default, but maybe this is a fundamental problem others see too and we need to dig in deeper? I bring this up because I feel there's a bit more nuance as we (Kong) have run into some issues like this in the past with collisions using the current ingress class name.So there's some obvious potential solutions given the current spec:
a. the chart should use a generated unique
controller
referenceb. the controller implementation could be configured to correspond only with the metadata names of a
GatewayClass
, thus ensuring no accidental coverage of others we didn't know aboutBut rather than picking one of these I'm mostly looking for feedback for what solution we currently prescribe (or should) and if/how we document that currently. I did a couple passes over the specs, the guides, and the concepts to see if there was already some documentation which covers this but I didn't latch on to anything.
My thinking is that we may need a specific
GatewayClass
implementation guide (e.g.site-src/v1alpha2/guides/gatewayclass-multitenancy.md
)? Maybe ultimately this is something that the spec doesn't cover for, and then the result should be updates to the spec and then we add a guide? Let me know your thoughts 🤔 .Beta Was this translation helpful? Give feedback.
All reactions