authelia/internal/suites/example/kube
Amir Zarrinkafsh ff7f9a50ab
[FEATURE] Docker simplification and configuration generation (#1113)
* [FEATURE] Docker simplification and configuration generation
The Authelia binary now will attempt to generate configuration based on the latest template assuming that the config location specified on startup does not exist. If a file based backend is selected and the backend cannot be found similarly it will generate a `user_database.yml` based a template.

This will allow more seamless bootstrapping of an environment no matter the deployment method.

We have also squashed the Docker volume requirement down to just `/config` thus removing the requirement for `/var/lib/authelia` this is primarily in attempts to simplify the Docker deployment.

Users with the old volume mappings have two options:
1. Change their mappings to conform to `/config`
2. Change the container entrypoint from `authelia --config /config/configuration.yml` to their old mapping

* Adjust paths relative to `/etc/authelia` and simplify to single volume for compose
* Add generation for file backend based user database
* Refactor Docker volumes and paths to /config
* Refactor Docker WORKDIR to /app
* Fix integration tests
* Update BREAKING.md for v4.20.0
* Run go mod tidy
* Fix log_file_path in miscellaneous.md docs
* Generate config and userdb with 0600 permissions
* Fix log_file_path in config.template.yml
2020-06-17 16:25:35 +10:00
..
apps [MISC] Remove executable permission of nginx backend files. (#1040) 2020-05-25 10:54:21 +10:00
authelia [FEATURE] Docker simplification and configuration generation (#1113) 2020-06-17 16:25:35 +10:00
ingress-controller [MISC] Restructure repo folder layout (#628) 2020-02-09 18:04:27 +01:00
ldap [BUGFIX] [BREAKING] Set username retrieved from authentication backend in session. (#687) 2020-03-15 18:10:25 +11:00
mail [MISC] Restructure repo folder layout (#628) 2020-02-09 18:04:27 +01:00
storage [MISC] Restructure repo folder layout (#628) 2020-02-09 18:04:27 +01:00
bootstrap-authelia.sh [FEATURE] Make Authelia serve over TLS in all suites (#864) 2020-04-14 09:57:28 +10:00
bootstrap-dashboard.sh [FEATURE] Make Authelia serve over TLS in all suites (#864) 2020-04-14 09:57:28 +10:00
bootstrap.sh [DEV] Fix permission issue with dev workflow. (#1033) 2020-05-21 14:35:22 +10:00
dashboard.yml [MISC] Restructure repo folder layout (#628) 2020-02-09 18:04:27 +01:00
namespace.yml [MISC] Restructure repo folder layout (#628) 2020-02-09 18:04:27 +01:00
README.md [MISC] Restructure repo folder layout (#628) 2020-02-09 18:04:27 +01:00
test.yml [MISC] Restructure repo folder layout (#628) 2020-02-09 18:04:27 +01:00

Authelia on Kubernetes

Authelia is now available on Kube in order to protect your most critical applications using 2-factor authentication and Single Sign-On.

This example leverages ingress-nginx to delegate authentication and authorization to Authelia within the cluster.

Getting started

You can either try to install Authelia on your running instance of Kubernetes or deploy the dedicated suite called kubernetes.

Set up a Kube cluster

The simplest way to start a Kubernetes cluster is to deploy the kubernetes suite with

authelia-scripts suites setup kubernetes

This will take a few seconds (or minutes) to deploy the cluster.

How does it work?

Authentication via Authelia

In a Kube clusters, the routing logic of requests is handled by ingress controllers following rules provided by ingress configurations.

In this example, ingress-nginx controller has been installed to handle the incoming requests. Some of them (specified in the ingress configuration) are forwarded to Authelia so that it can verify whether they are allowed and should reach the protected endpoint.

The authentication is provided at the ingress level by an annotation called nginx.ingress.kubernetes.io/auth-url that is filled with the URL of Authelia's verification endpoint. The ingress controller also requires the URL to the authentication portal so that the user can be redirected if he is not yet authenticated. This annotation is as follows: nginx.ingress.kubernetes.io/auth-signin: "https://login.example.com:8080/"

Those annotations can be seen in apps/apps.yml configuration.

Production grade infrastructure

What is great with using ingress-nginx is that it is compatible with kube-lego which removes the usual pain of manually renewing SSL certificates. It uses letsencrypt to issue and renew certificates every three month without any manual intervention.

What do I need to know to deploy it in my cluster?

Given your cluster already runs a LDAP server, a Redis, a SQL database, a SMTP server and a nginx ingress-controller, you can deploy Authelia and update your ingress configurations. An example is provided here.

Questions

If you have questions about the implementation, please post them on Gitter