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

Use a reverse proxy to avoid routes/ingress creation at workspace startup #12914

Closed
29 of 35 tasks
Tracked by #14879
l0rd opened this issue Mar 18, 2019 · 17 comments
Closed
29 of 35 tasks
Tracked by #14879

Use a reverse proxy to avoid routes/ingress creation at workspace startup #12914

l0rd opened this issue Mar 18, 2019 · 17 comments
Labels
area/che-operator Issues and PRs related to Eclipse Che Kubernetes Operator area/che-server area/chectl Issues related to chectl, the CLI of Che kind/enhancement A feature request - must adhere to the feature request template. kind/epic A long-lived, PM-driven feature request. Must include a checklist of items that must be completed. severity/P1 Has a major impact to usage or development of the system.

Comments

@l0rd
Copy link
Contributor

l0rd commented Mar 18, 2019

Description

In the past 2 years of running Che in production we have seen that OpenShift routes do not always fit our needs (we need to bring-up 3 or more routes in a few seconds for every user workspace). The same applies to Kubernetes Ingresses (still in Beta).

Thus the need to investigate alternatives. One proposal is to pre-create one workspace route/ingress for Che server and link it to a reverse proxy that will route all the workspaces traffic (e.g. re-use JWT proxy, envoy or traefik).

That would allow us to:

  • limit the number or route/ingress Che needs
  • create the route before a user ask to start a workspace

If this approach is validated we could divide the work in 4 steps

  • Analyse if the already existent JWT Proxy would satisfy our needs
  • All workspaces inbound and outbound traffic should be routed through the JWT Proxy
  • Share one JWT Proxy instance amongst all the workspaces of a single user
  • Share one JWT Proxy instance amongst all the Che users of a Kube cluster

UPDATE Another important use case is associated to this issue: allow running Che workspaces on OpenShift (where single-host strategy is not available) when using wildcard SSL certificates is not possible.

Implementation

@l0rd l0rd added kind/enhancement A feature request - must adhere to the feature request template. team/osio labels Mar 18, 2019
@l0rd
Copy link
Contributor Author

l0rd commented Mar 25, 2019

cc @gorkem

@skabashnyuk skabashnyuk added the severity/P2 Has a minor but important impact to the usage or development of the system. label Apr 3, 2019
@che-bot
Copy link
Contributor

che-bot commented Oct 1, 2019

Issues go stale after 180 days of inactivity. lifecycle/stale issues rot after an additional 7 days of inactivity and eventually close.

Mark the issue as fresh with /remove-lifecycle stale in a new comment.

If this issue is safe to close now please do so.

Moderators: Add lifecycle/frozen label to avoid stale mode.

@che-bot che-bot added the lifecycle/stale Denotes an issue or PR has remained open with no activity and has become stale. label Oct 1, 2019
@skabashnyuk
Copy link
Contributor

/remove-lifecycle stale

@che-bot che-bot removed the lifecycle/stale Denotes an issue or PR has remained open with no activity and has become stale. label Oct 1, 2019
@benoitf
Copy link
Contributor

benoitf commented Oct 1, 2019

should it go into a backlog ?

@l0rd
Copy link
Contributor Author

l0rd commented Oct 3, 2019

We should put it into a backlog during priotization

@che-bot
Copy link
Contributor

che-bot commented Apr 8, 2020

Issues go stale after 180 days of inactivity. lifecycle/stale issues rot after an additional 7 days of inactivity and eventually close.

Mark the issue as fresh with /remove-lifecycle stale in a new comment.

If this issue is safe to close now please do so.

Moderators: Add lifecycle/frozen label to avoid stale mode.

@che-bot che-bot added the lifecycle/stale Denotes an issue or PR has remained open with no activity and has become stale. label Apr 8, 2020
@l0rd
Copy link
Contributor Author

l0rd commented Apr 15, 2020

/remove-lifecycle stale

@che-bot che-bot removed the lifecycle/stale Denotes an issue or PR has remained open with no activity and has become stale. label Apr 15, 2020
@l0rd l0rd added severity/P1 Has a major impact to usage or development of the system. and removed severity/P2 Has a minor but important impact to the usage or development of the system. labels Apr 20, 2020
@skabashnyuk skabashnyuk added the kind/epic A long-lived, PM-driven feature request. Must include a checklist of items that must be completed. label May 6, 2020
@metlos
Copy link
Contributor

metlos commented May 18, 2020

We've started implementing the performance tests for the individual POCs. Take a look at https://github.com/che-incubator/che-gateway-poc.

@metlos
Copy link
Contributor

metlos commented May 20, 2020

In the above mentioned POC repository, we now have 3 POCs implemented:

  • haproxy-scripted - this is a vanilla haproxy image operated by oc commands from the test scripts
  • nginx-custom-image - this is a custom image using our cm-bump utility and nginxinc/nginx-unprivileged official image of nginx
  • traefik-sidecar - this is combination of traefik and cm-bump (we don't require a custom image in this case because traefik can watch for config changes on its own)

We're working on haproxy-custom-image which is very similar to nginx-custom-image only with haproxy as the gateway solution. This is to be able to quantify the effect of a custom controller vs externally executed commands.

We're also working on the testsuite. We're developing a number of load test scenarios (https://github.com/che-incubator/che-gateway-poc/tree/master/test#testcases). We have not yet started websocket and cookie handling tests which we are going to start once the haproxy-custom-image poc is implemented.

@sparkoo
Copy link
Member

sparkoo commented May 26, 2020

@jfaltermeier as a side-effect, yes it will help. We will have only one Ingress for whole Che and will do routing to workspaces ourselves, so we can do it more effectively than cluster.

@metlos
Copy link
Contributor

metlos commented Jun 2, 2020

We have concluded the performance tests. I have created a number of subtasks to guide us through the implementation and referenced them in the description of this epic.

We have not yet chosen the gateway solution though, because there was no clear winner. I have sent out an email to the Che-dev mailing list detailing our current thinking and progress.

@metlos
Copy link
Contributor

metlos commented Jul 13, 2020

Note that we have concluded our testing of the candidate solutions for a reverse proxy. We chose Traefik and will commence the implementation with #17063 - making our Rust-based POC a fully maintained controller written in Go.

To read more about the selection process and reasoning behind the choice of Traefik, please read through https://www.eclipse.org/lists/che-dev/msg03828.html

@sparkoo
Copy link
Member

sparkoo commented Sep 16, 2020

all issues in the scope of this epic closed. related single-host issues will be solved separately.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area/che-operator Issues and PRs related to Eclipse Che Kubernetes Operator area/che-server area/chectl Issues related to chectl, the CLI of Che kind/enhancement A feature request - must adhere to the feature request template. kind/epic A long-lived, PM-driven feature request. Must include a checklist of items that must be completed. severity/P1 Has a major impact to usage or development of the system.
Projects
None yet
Development

No branches or pull requests

8 participants