Replies: 7 comments 33 replies
-
Personally, I don't think the adoption friction is the Gateway API itself but rather the market forces of:
#3384 covers 2) so I'll focus on 1). If I were a betting man, I'd wager that the vast majority of the Ingress API (today and historically) comes from ingress-nginx and not by a narrow margin. In fact, right before Gateway API took off, the ecosystem was coalescing around controller-specific CRDs because of Ingress's limitations. Therefore, my conclusion is that Ingress's adoption has nothing to do with UX but rather the absence of needing to choose an implementation. To be blunt: I suspect that Gateway API's adoption will always be somewhat capped because ingress-nginx (not the Ingress API) provides a Kubernetes org-blessed option that no one will get fired for picking. Apologies for the tangent, but TLDR - if the end goal is to increase Gateway API adoption, then this discussion is asking the wrong question IMO |
Beta Was this translation helpful? Give feedback.
-
I don't think this would have a direct impact on most end-user adoption by proprietary app developers or platform teams (for whom the persona model can be an improvement over a tightly-controlled monolithic ingress - I have not heard distributed app-specific bundled Ingress as a common pattern for these larger organizations). I do think this could be beneficial for open source project owners responsible for bundling and publishing their projects with supplemental resources such as Helm charts who would prefer to minimize additional friction in an onboarding/quick-start setup. |
Beta Was this translation helpful? Give feedback.
-
Since one of the main Gateway API differentiators from Ingress is the isolation of concerns between the involved personas, the concept of making the app developer completely unaware of the underlying infrastructure resonates a lot with me. This is what we state in the description of Ana, the app developer, in our documentation:
Since from Ana's point of view Gateway API is pure friction, I do totally agree that we should do as much as we can to reduce that friction as much as possible, and removing the NEED to set Gateway references from the routes, looks a good step forward to me. |
Beta Was this translation helpful? Give feedback.
-
It's nice to see this discussion happening and getting engagement. Overall I think @mlavacca is on to something promising: his proposal seems to do a nice job of using the existing machinery and preserving existing semantics, while also giving Ana a helpful default that lets her focus on her business needs rather than forcing her to think about infrastructure. That said, @youngnick has done his usual (depressingly 🙂) good job of pointing out pitfalls. True to form, I shall try to tease these apart by talking about, you guessed it, use cases! 😂
|
Beta Was this translation helpful? Give feedback.
-
Also, to @youngnick's point about conflict resolution -- the conflict resolution semantics are a huge help, definitely! In practice, you can still do some pretty nasty stompage by applying a route that's more specific, rather than identical. The updated Gateway API workshop for Salt Lake actually shows this: we have a canary GRPCRoute with no To be clear, I think of this as a feature: it makes a lot of things much simpler than they'd otherwise be! It's probably also an area where having something to show the routing table could be a great addition. |
Beta Was this translation helpful? Give feedback.
-
Hi all, I tried to catch up a bit, but I am sure I missed a lot of the details. I want to call out what looks to be an assumption that some folks are embedding in their headspace. For some implementations, like nginx, an Ingress object means "attach these routes to THE loadbalancer". But there are other implementations, particularly the clouds, where an Ingress object means "create a new loadbalancer", and those are not subject to the same sorts of attacks. Part of the idea that "Ingress is easier" is that I only have one resource to specify and it's mine and I don't need to worry about other people. For those users, like many Cloud users, Gateway is almost purely friction beyond Ingress. Baby. Bathwater. I know that gateway is primarily aimed at the more sophisticated users, for whom the gateway and the route are managed by different personas, but what we have ended up with makes it almost a non-starter for those smaller users. So what do we think are the proportional sizes of those cohorts? I would hazard a semi-informed guess that 80% or 90% of users have the simple problem. There's an old joke about "making impossible things possible, and easy things hard", which I think applies here. There is, at least hypothetically, and intermediate mode of Ingress. Let's call it "virtual private". I want the simplicity of ingress, with a single resource and everything specified together in one place, but instead of attaching my routes to a single load balancer (with the route stomping problems) or creating me a private load balancer for every single Ingress (with the cost problems), create a "per tenant" loadbalancer. I don't define what "tenant" means, but namespace is often a good approximation. Now, I don't have the route stomping problem, and the cost is managed, though not eliminated. As an app developer, this should happen without me doing anything particular. In fact, I don't even really need to know what the implementation is doing. There might be a single l4 load balancer routing to nginx, or there might be an l4 load balancer for each Ingress, or there might be an l4 load balancer for each namespace. Don't know, don't care. The idea of a "default" gateway, discussed in this thread, is getting toward the same thing, though still using two resources. Can we get that down to 1? What if that one is just a wrapper that automates the creation of the others? |
Beta Was this translation helpful? Give feedback.
-
On Slack I mentioned to @robscott, @youngnick, and @mlavacca a proposal that is a variation of @mlavacca's proposal for default Gateways. I vaguely feel like we discussed this before at a previous Kubecon, but I didn't see it represented here so I figured I would post it for discussion: The proposal is for Gateway API to provide an optional API hook (it seems like https://kubernetes.io/docs/reference/access-authn-authz/mutating-admission-policy/ is potentially a great option, albeit its early) that identifies the default infrastructure and automatically applies defaults to There are interesting problems with this, like how much heavier the effects of deleting a "default implementation" on a cluster can be, and "what happens if you change the default", but I think they're solvable. I think it would be pretty quick to POC somewhere like Kind and test it out. |
Beta Was this translation helpful? Give feedback.
-
In the post-1.2 world we've been thinking a lot about Gateway API User Experience (UX) and how we can improve that specifically for developers.
As a developer with Ingress you would package your
Deployment
which let people know how it was run on Kubernetes, and then packaged yourIngress
to describe how it does traffic. This way does not require developers to think much about the infrastructure (e.g. theGateway
). The parentRef relationship with Gateways inHTTPRoute
is more complicated.The question here is: whether we could significantly improve user experience if we had some mechanism in place such that the developers who publish
*Routes
with their applications did not have to bother with parentRefs.How that ends up looking doesn't concern me nearly as much as whether other people feel similarly. Please let us know: does this resonate with you? Do you think having the "simple ingress experience" more clearly paralleled in Gateway API would significantly increase adoption?
Beta Was this translation helpful? Give feedback.
All reactions