authelia/internal/suites/example/kube
James Elliott 626f5d2949
[FEATURE] Remember Me Configuration (#813)
* [FEATURE] Remember Me Configuration
* allow users to specify the duration of remember me using remember_me_duration in session config
* setting the duration to 0 disables remember me
* only render the remember me element if remember me is enabled
* prevent malicious users from faking remember me functionality in the backend
* add string to duration helper called ParseDurationString to parse a string into a duration
* added tests to the helper function
* use the SessionProvider to store the time.Duration instead of parsing it over and over again
* add sec doc, adjust month/min, consistency
* renamed internal/utils/constants.go to internal/utils/const.go to be consistent
* added security measure docs
* adjusted default remember me duration to be 1 month instead of 1 year
* utilize default remember me duration in the autheliaCtx mock
* adjust order of keys in session configuration examples
* add notes on session security measures secret only being redis 
* add TODO items for duration notation for both Expiration and Inactivity (will be removed soon)
* fix error text for Inactivity in the validator 
* add session validator tests
* deref check bodyJSON.KeepMeLoggedIn and derive the value based on conf and user input and store it (DRY)
* remove unnecessary regex for the simplified ParseDurationString utility
* ParseDurationString only accepts decimals without leading zeros now
* comprehensively test all unit types
* remove unnecessary type unions in web
* add test to check sanity of time duration consts, this is just so they can't be accidentally changed
* simplify deref check and assignment
* fix reset password padding/margins
* adjust some doc wording
* adjust the handler configuration suite test
* actually run the handler configuration suite test (whoops)
* reduce the number of regex's used by ParseDurationString to 1, thanks to Clement
* adjust some error wording
2020-04-04 10:11:33 +11:00
..
apps [MISC] Restructure repo folder layout (#628) 2020-02-09 18:04:27 +01:00
authelia [FEATURE] Remember Me Configuration (#813) 2020-04-04 10:11:33 +11: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
README.md [MISC] Restructure repo folder layout (#628) 2020-02-09 18:04:27 +01:00
bootstrap-authelia.sh [MISC] Restructure repo folder layout (#628) 2020-02-09 18:04:27 +01:00
bootstrap-dashboard.sh [MISC] Restructure repo folder layout (#628) 2020-02-09 18:04:27 +01:00
bootstrap.sh [MISC] Restructure repo folder layout (#628) 2020-02-09 18:04:27 +01: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
test.yml [MISC] Restructure repo folder layout (#628) 2020-02-09 18:04:27 +01:00

README.md

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