Skip to content
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

Shipping with an embedded GW API provider #18

Draft
wants to merge 2 commits into
base: main
Choose a base branch
from
Draft

Conversation

alexsnaps
Copy link
Member

Trying to lower the bar to entry into Kuadrant… if only until all k8s clusters out there have Gw API installed (using Envoy) 😜

- including _howtos_ on how to "chain" existing ingress'es with gateway resources
- [ ] Abstract the Gateway Provider behind an [Service Provider interface (SPI)](https://en.wikipedia.org/wiki/Service_provider_interface), to support at least Envoy GW, Istio & OSSM.
- which makes for a clear contract any other Gateway API provider would be able to implement
- [ ] Package different distributions (at the very least GW API included, or pluggeable) as different Operators/images?
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

so would the idea here be to support go plugins https://pkg.go.dev/plugin and have the provider configured at install time a loaded at dynamically? Would our default impl also be plugins or just packaged as part of the operator?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

on another note I haven't ever used a go plugin but in theory sounds like it would work for this use case. That said I think we could provide an interface and default implmentations without plugins (IE like a provide factory) that returns the right impl based on config and then add support for loading a plugin at a later stage? Not sure if we want to do plugins for all implementations?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd say that'd depend on "how big" these become… And how we'd even plug the default Gateway API provider (i.e. probably Envoy Gateway) in. I think, from a end-user's perspective, I'd lean towards one single operator image that just "does the right" thing. No Gateway API present? Go fetch and install our default provider; Or, we;re in an OSSM environment? Loads the appropriate SPI (possibly using the go plugin - which I guess are effectively a dlopen(3) kinda thing; or "just" using a factory indirection; or whichever…) and it all works.
I'll look into go plugins, but at this stage I mostly care about the definition of the contract between Kuadrant and these providers, to be defined in this/these SPI(s). And if we can then also easily accept contribution to support "yet another Gateway API provider", then great! If that is more complicated, supporting go plugins would be another way to decouple Kuadrant from the providers, all the way to the runtime, creating an even more open architecture for these extensions.

@guicassolato
Copy link
Contributor

👍 to the intro written so far.

@alexsnaps alexsnaps added the RFC Request For Comments label Aug 20, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
RFC Request For Comments
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants