Internal applications

Here is an idea that I was drafting on Frills, but then I thought it was a bit too open-ended so I’m posting it here for discussion.

So, when you deploy development or staging applications, or production applications for an internal use, you usually don’t want them to be exposed publicly on the internet. You want something that only allows the company employees to access them.

I think that deploying OpenVPN / Wireguard and offering to expose these applications behind an internal ingress, with an easy way to download the VPN configuration files per user, would be extremely practical. From a business perspective, you could even charge for VPN users that are not developers already on Qovery. :slightly_smiling_face:

An other option I can see would be to deploy an authentication proxy that you can only pass if you’re a known user, like OAuth2 Proxy. Or even just configure the ingress to add an HTTP Basic Auth per application or environment. But these two options are not really practical for backend applications / APIs, only frontend or fullstack applications.

What do you think?

1 Like

I think it’s a good idea - as far as I know, I’ve seen one of our users building a portal on top of Qovery to allow dev environment access to allowed developers. One of the simplest solutions would be to use Cloudflare Access - which is exactly made for this purpose. You also have Auth0/Okta proposing the same kind of feature as Cloudflare Access.

It looks great and quite similar to the solutions above. Did you try it?

Cloudflare Access would only protect mydomain.com, and not abc123-gtw.qovery.io, right?

And just like Oauth2 Proxy and alike, that’s probably not very practical for backend applications / APIs.

No, it’s just something I benchmarked in a previous life. There are quite a bunch of more or less similar tools: S.S. Octopus, Vouch Proxy, Authelia, Dex, etc. :slight_smile:

Teleport could be interesting as well, since it can be used for access management of both applications and Kubernetes!

It’s probably worth another subject I guess, but user accounts for the Kubernetes cluster would be nice as well.

Should I add an idea on Frill for that?

Hi @ramnes ,

yes please. As a temporary solution, would it be enough to use the advanced settings and whitelist a certain IP range and activate the basic auth?

The IP whitelisting could work but that would require me to:

  • set up a VPN so that we all have the same exit IP to handle remote work
  • automate through the API the modification of ingress rules for all application of my development environment

I’m not considering the basic auth because I’m mainly looking for a way to protect our backend services (we’re already protecting frontend services with Vercel authentication).

An internal-external switch in Qovery would be much more handy. :slight_smile:

Hi @ramnes ,

I will take out the shovel and dig into my memory because I did this kind of thing in the past (~7 years ago) with OpenVPN.

Since we released the Lifecycle Jobs, you can use them to deploy Helm charts or Kubernetes files. As you may know Wireguard is far more simple and secure than OpenVPN. But also younger.

To be fully transparent, I don’t know and didn’t look at what AWS has built or not in the Kernel deployed with EKS. So I can’t guaranty it will work. But what is sure is

  • OpenVPN: will require TUN or TAP device to be built in the Kerne to run. So it requires Kubernetes elevated privileges for the pod running OpenVPN.
  • Wireguard: a recent Kernel with wireguard options built in (Compilation from Source Code - WireGuard). It may also requires some specific privileges.

Anyway, if you’re ready to jump into it and want to give a try I found this for Wireguard:

For OpenVPN, here are interesting Helm charts I found:

Hope it will help

Pierre

Cloudflare Access would only protect mydomain.com, and not abc123-gtw.qovery.io, right?

You can IP whitelist only Cloudflare IP ranges, and then other domain will be unreachable. We use it successfully in our organization. Unless you want to use Qovery domains. It would be great if we could bring our own domains to Qovery (for preview environments).

A few of our customers already does it (only cloudflare is supported), it’s not yet integrated at all in the product, but as soon as we’ll get more demand for this, we’ll make it available product side :slight_smile: