Skip to content
This repository was archived by the owner on Nov 8, 2022. It is now read-only.

Add support for OpenShift Routes #102

Closed
5 tasks done
maleck13 opened this issue Mar 4, 2022 · 4 comments
Closed
5 tasks done

Add support for OpenShift Routes #102

maleck13 opened this issue Mar 4, 2022 · 4 comments
Labels
kind/enhancement New feature or request kind/epic

Comments

@maleck13
Copy link
Contributor

maleck13 commented Mar 4, 2022

Use Cases

As a developer familiar with OpenShift Routes, I do not want to have to learn the Istio Specific routing API (VirtualService), I just want to be able protect my service exposed via an OpenShift Route with kuadrant's RateLimiting and Auth capabilities, so that I can protect my APIs as simply as possible and reduce the number of new APIs I need to learn and be familiar with. It is important to me that I declare a route as "kuadrant managed".

As an API developer, familiar with OpenShift routes and Istio, I know I need to use an OpenShift route to expose my service as HAProxy is my entry point to the cluster, but I want to retain control over the VirtualService resource and protect my service with rate limiting and auth. As I am very comfortable with these concepts, I am happy to manage both of these resources myself.

Options

One option here is to support our kuadrant annotations on the OpenShift Route object. We may need an additional annotation to declare whether the Route should be kuadrant managed or not (somewhat similar to declaring you want a cert managed for a route).
This new annotation kuadarant.io/managed: true would trigger the Kuadrant Controller to generate and setup a VirtualService and update the Route object to point at the Istio Gateway. When the kuadrant controller generates a VirtualService it should also copy over the annotations to the virtual service. This will mean when a user uses kuadrant annotations on a route, we will naturally be watching the virtual service and can use the same logic to do the wiring up.
One consideration is where the VirtualService should be created. If it is created in the same namespace then the developer will likely have perms to tinker with it. If we create it in the gateway namespace we will need to be able to map it back to the route and the namespace the route is in so that we can find the RateLimiting policy to apply

Demo

  • Deploy Kuadrant to an OpenShift cluster (can already be installed for the demo)
  • Create an echo service and use an OpenShift Route to route traffic to the service
  • Show traffic is not protected
  • Add an annotation to indicate Kuadrant should take control of the Route
  • Show the traffic is now flowing through Istio but still unprotected
  • Add API based Auth and Authenticated Rate Limiting via Kuadrant

Done

@maleck13 maleck13 added kind/enhancement New feature or request epic labels Mar 4, 2022
@maleck13 maleck13 added this to the OpenShift Support milestone Mar 4, 2022
@thomasmaas thomasmaas moved this to Todo in Kuadrant Mar 7, 2022
@maleck13
Copy link
Contributor Author

@eguzki @rahulanand16nov I have updated the use cases here to reflect that there are developers who don't care about virtual services and those that are comfortable with them.

@eguzki
Copy link
Contributor

eguzki commented Mar 24, 2022

Added #119 item. Kind of replacing #103 that is unfeasible

@maleck13 maleck13 removed the status in Kuadrant Mar 31, 2022
@maleck13 maleck13 removed this from Kuadrant Mar 31, 2022
@alexsnaps alexsnaps added kind/epic and removed epic labels Aug 23, 2022
@eguzki
Copy link
Contributor

eguzki commented Sep 1, 2022

can we close this issue @maleck13 ?

@maleck13
Copy link
Contributor Author

maleck13 commented Sep 1, 2022

I think we can close it and reopen a new issue if we move to support OS Routes in the future

@eguzki eguzki closed this as completed Sep 1, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
kind/enhancement New feature or request kind/epic
Projects
None yet
Development

No branches or pull requests

3 participants