From 434e13b6e1fa0b60bff9fd6536eae8a428ce9143 Mon Sep 17 00:00:00 2001 From: David Young Date: Wed, 15 Nov 2023 14:00:23 +1300 Subject: [PATCH] Add OIDC with KeyCloak examples Signed-off-by: David Young --- _snippets/common-links.md | 1 + docs/images/keycloak-kube-apiserver-1.png | Bin 0 -> 25086 bytes docs/images/keycloak-kube-apiserver-2.png | Bin 0 -> 62705 bytes docs/images/keycloak-kube-apiserver-3.png | Bin 0 -> 6399 bytes docs/images/keycloak-kube-apiserver-4.png | Bin 0 -> 12507 bytes docs/images/keycloak-kube-apiserver-5.png | Bin 0 -> 45664 bytes .../oidc-authentication/eks-authentik.md | 2 +- .../oidc-authentication/eks-keycloak.md | 78 +++++++ .../oidc-authentication/k3s-authentik.md | 20 +- .../oidc-authentication/k3s-keycloak.md | 207 ++++++++++++++++++ .../oidc-authentication/keycloak.md | 90 ++++++++ docs/recipes/kubernetes/keycloak.md | 131 +++++++++++ 12 files changed, 516 insertions(+), 13 deletions(-) create mode 100644 docs/images/keycloak-kube-apiserver-1.png create mode 100644 docs/images/keycloak-kube-apiserver-2.png create mode 100644 docs/images/keycloak-kube-apiserver-3.png create mode 100644 docs/images/keycloak-kube-apiserver-4.png create mode 100644 docs/images/keycloak-kube-apiserver-5.png create mode 100644 docs/kubernetes/oidc-authentication/eks-keycloak.md create mode 100644 docs/kubernetes/oidc-authentication/k3s-keycloak.md create mode 100644 docs/kubernetes/oidc-authentication/keycloak.md create mode 100644 docs/recipes/kubernetes/keycloak.md diff --git a/_snippets/common-links.md b/_snippets/common-links.md index 88f09c1..a7929a4 100644 --- a/_snippets/common-links.md +++ b/_snippets/common-links.md @@ -34,6 +34,7 @@ [k8s/mastodon]: /recipes/kubernetes/mastodon/ [k8s/matrix]: /recipes/kubernetes/matrix/ [k8s/authentik]: /recipes/kubernetes/authentik/ +[k8s/keycloak]: /recipes/kubernetes/keycloak/ [k8s/matrix]: /recipes/kubernetes/matrix/ [k8s/dashboard]: /recipes/kubernetes/dashboard/ [k8s/oauth2proxy]: /recipes/kubernetes/oauth2-proxy/ diff --git a/docs/images/keycloak-kube-apiserver-1.png b/docs/images/keycloak-kube-apiserver-1.png new file mode 100644 index 0000000000000000000000000000000000000000..d6ba157dbed8c9368ff3c8c3f99f9547c7ccba0f GIT binary patch literal 25086 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

5aQt#!3HEF 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 literal 0 HcmV?d00001 diff --git a/docs/images/keycloak-kube-apiserver-3.png b/docs/images/keycloak-kube-apiserver-3.png new file mode 100644 index 0000000000000000000000000000000000000000..988bb89dab9fd5565a2ce8f142138a4eec2cc932 GIT binary patch literal 6399 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 Mv(9Jgt$eTj7gGufX#fBK literal 0 HcmV?d00001 diff --git a/docs/kubernetes/oidc-authentication/eks-authentik.md b/docs/kubernetes/oidc-authentication/eks-authentik.md index df0e2dc..da24d6d 100644 --- a/docs/kubernetes/oidc-authentication/eks-authentik.md +++ b/docs/kubernetes/oidc-authentication/eks-authentik.md @@ -2,7 +2,7 @@ title: Configure EKS for OIDC authentication with Authentik description: How to configure your EKS Kubernetes cluster for OIDC authentication with Authentik --- -# Authenticate to Kubernetes with OIDC on EKS +# Authenticate to Kubernetes with authentik OIDC on EKS This recipe describes how to configure an EKS cluster for OIDC authentication against an [authentik][k8s/authentik] instance. diff --git a/docs/kubernetes/oidc-authentication/eks-keycloak.md b/docs/kubernetes/oidc-authentication/eks-keycloak.md new file mode 100644 index 0000000..8babbdd --- /dev/null +++ b/docs/kubernetes/oidc-authentication/eks-keycloak.md @@ -0,0 +1,78 @@ +--- +title: Configure EKS for OIDC authentication with Keycloak +description: How to configure your EKS Kubernetes cluster for OIDC authentication with Keycloak +--- +# Authenticate to Kubernetes with keycloak OIDC on EKS + +This recipe describes how to configure an EKS cluster for OIDC authentication against a [Keycloak][k8s/keycloak] instance. + +For details on **why** you'd want to do this, see the [Kubernetes Authentication Guide](/kubernetes/oidc-authentication/). + +## Requirements + +!!! summary "Ingredients" + + * [x] A [Kubernetes cluster](/kubernetes/cluster/) deployed on Amazon EKS + * [x] [Keycloak][k8s/keycloak] deployed per the recipe, secured with a valid SSL cert (*no self-signed schenanigans will work here!*) + * [x] Keycloak additionally [configured as an OIDC provider for kube-apiserver](/kubernetes/oidc-authentication/keycloak/) + * [x] `eksctl` tool configured and authorized for your IAM account + +## Setup EKS for OIDC auth + +In order to associate an OIDC provider with your EKS cluster[^1], you'll need (*guess what?*).. + +.. some YAML. + +Create an EKS magic YAML[^2] like this, and tweak it for your cluster name, region, and issuerUrl: + +```yaml title="eks-cluster-setup.yaml" +apiVersion: eksctl.io/v1alpha5 +kind: ClusterConfig + +metadata: + name: funkypenguin-authentik-test + region: ap-southeast-2 + +identityProviders: + - name: authentik + type: oidc + issuerUrl: https://keycloak.funkypenguin.de/auth/realms/master/ # (1)! + clientId: kube-apiserver + usernameClaim: email + groupsClaim: groups +``` + +1. Make sure this ends in a `/`, and doesn't include `.well-known/openid-configuration` + +Apply the EKS magic by running `eksctl associate identityprovider -f eks-cluster-setup.yaml` + +That's it! It may take a few minutes (you can verify it's ready on your EKS console), but once complete, the authentik provider should be visible in your cluster console, under the "Authentication" tab, as illustrated below: + +![](/images/eks-authentic-1.png) + +{% include 'kubernetes-oidc-setup.md' %} + +## Summary + +What have we achieved? + +We've setup our EKS cluster to authenticate against Keycloak, running on that same cluster! We can now create multiple users (*with multiple levels of access*) without having to provide them with tricky IAM accounts, and deploy kube-apiserver-integrated tools like Kubernetes Dashboard or Weaveworks GitOps for nice secured UIs. + +!!! summary "Summary" + Created: + + * [X] EKS cluster with OIDC authentication against [authentik][k8s/authentik] + * [X] Ability to support: + * [X] Kubernetes Dashboard (*coming soon*) + * [X] Weave GitOps (*coming soon*) + * [X] We've also retained our static, IAM-based `kubernetes-admin` credentials in case OIDC auth fails at some point (*keep them safe!*) + +What's next? + +Deploy Weave GitOps to visualize your Flux / GitOps state, and Kubernetes Dashboard for UI management of your cluster! + +[^1]: AWS docs are at https://docs.aws.amazon.com/eks/latest/userguide/authenticate-oidc-identity-provider.html +[^2]: For details on available options, see https://docs.aws.amazon.com/cli/latest/reference/eks/associate-identity-provider-config.html + + +{% include 'recipe-footer.md' %} diff --git a/docs/kubernetes/oidc-authentication/k3s-authentik.md b/docs/kubernetes/oidc-authentication/k3s-authentik.md index d7ccf74..5087701 100644 --- a/docs/kubernetes/oidc-authentication/k3s-authentik.md +++ b/docs/kubernetes/oidc-authentication/k3s-authentik.md @@ -2,7 +2,7 @@ title: Configure K3s for OIDC authentication with Authentik description: How to configure your K3s Kubernetes cluster for OIDC authentication with Authentik --- -# Authenticate to Kubernetes with OIDC on K3s +# Authenticate to Kubernetes with authentik OIDC on K3s This recipe describes how to configure K3s for OIDC authentication against an [authentik][k8s/authentik] instance. @@ -38,13 +38,11 @@ Here's the lunatic option: --kube-apiserver-arg=oidc-client-id=kube-apiserver --kube-apiserver-arg=oidc-username-claim=email --kube-apiserver-arg=oidc-groups-claim=groups ---kube-apiserver-arg=oidc-username-prefix='oidc:' ---kube-apiserver-arg=oidc-groups-prefix='oidc:' ``` And here's the gentlemanly option: -Created `/etc/rancher/k3s/config.yaml`, and add: +Create `/etc/rancher/k3s/config.yaml`, and add: ```yaml title="Gentlemanly YAML config option" kube-apiserver-arg: @@ -52,8 +50,6 @@ kube-apiserver-arg: - "oidc-client-id=kube-apiserver" - "oidc-username-claim=email" - "oidc-groups-claim=groups" -- "oidc-username-prefix='oidc:'" -- "oidc-groups-prefix='oidc:'" ``` Now restart k3s (*`systemctl restart k3s` on Ubuntu*), and confirm it starts correctly by watching the logs (*`journalctl -u k3s -f` on Ubuntu*) @@ -76,7 +72,7 @@ kubectl oidc-login setup \ All going well, your browser will open a new window, logging you into authentik, and on the CLI you should get output something like this: ``` -~ ❯ kubectl oidc-login setup --oidc-issuer-url=https://authentik.example.com/application/o/kube-apiserver/ --oidc-client-id=kube-apiserver --oidc-client-secret=cVj4YqmB4VPcq6e7 --oidc-extra-scope=profile,email +~ ❯ kubectl oidc-login setup --oidc-issuer-url=https://authentik.example.com/application/o/kube-apiserver/ --oidc-client-id=kube-apiserver --oidc-client-secret= --oidc-extra-scope=profile,email authentication in progress... ## 2. Verify authentication @@ -97,7 +93,7 @@ You got a token with the following claims: "email_verified": true, "groups": [ "authentik Admins", - "admin-kubernetes" + "admin-kube-apiserver" ] } ``` @@ -184,15 +180,15 @@ We've setup our K3s cluster to authenticate against authentik, running on that s !!! summary "Summary" Created: - * [X] EKS cluster with OIDC authentication against [authentik][k8s/authentik] + * [X] K3s cluster with OIDC authentication against [authentik][k8s/authentik] * [X] Ability to support: - * [X] Kubernetes Dashboard (*coming soon*) + * [X] [Kubernetes Dashboard][k8s/dashboard] * [X] Weave GitOps (*coming soon*) - * [X] We've also retained our static, IAM-based `kubernetes-admin` credentials in case OIDC auth fails at some point (*keep them safe!*) + * [X] We've also retained our static, K3s-generated `kubernetes-admin` credentials in case OIDC auth fails at some point (*keep them safe!*) What's next? -Deploy Weave GitOps to visualize your Flux / GitOps state, and Kubernetes Dashboard for UI management of your cluster! +Deploy Weave GitOps to visualize your Flux / GitOps state, and [Kubernetes Dashboard][k8s/dashboard] for UI management of your cluster! [^1]: Later on, as we add more applications which need kube-apiserver authentication, we'll add more redirect URIs. diff --git a/docs/kubernetes/oidc-authentication/k3s-keycloak.md b/docs/kubernetes/oidc-authentication/k3s-keycloak.md new file mode 100644 index 0000000..bef460e --- /dev/null +++ b/docs/kubernetes/oidc-authentication/k3s-keycloak.md @@ -0,0 +1,207 @@ +--- +title: Configure K3s for OIDC authentication with Keycloak +description: How to configure your K3s Kubernetes cluster for OIDC authentication with Keycloak +--- +# Authenticate to Kubernetes with Keycloak OIDC on K3s + +This recipe describes how to configure K3s for OIDC authentication against a [Keycloak][k8s/keycloak] instance. + +For details on **why** you'd want to do this, see the [Kubernetes Authentication Guide](/kubernetes/oidc-authentication/). + +## Requirements + +!!! summary "Ingredients" + + * [x] A [Kubernetes cluster](/kubernetes/cluster/) deployed using [K3S](/kubernetes/cluster/k3s) + * [x] [Keycloak][k8s/keycloak] deployed per the recipe + * [x] Keycloak additionally [configured as an OIDC provider for kube-apiserver](/kubernetes/oidc-authentication/keycloak/) + +## Setup K3s for OIDC auth + +If you followed the k3s install guide, you'll have installed K3s with a command something like this: + +```bash +MYSECRET=iambatman +curl -fL https://get.k3s.io | K3S_TOKEN=${MYSECRET} \ + sh -s - --disable traefik server +``` + +To configure the apiserver to perform OIDC authentication, you need to add some extra kube-apiserver arguments. There are two ways to do this: + +1. Append the arguments to your `curl | bash` command, like a lunatic +2. Add the arguments to a config file which K3s will parse upon start, like a gentleman + +Here's the lunatic option: + +```bash title="Lunatic curl | bash option" +--kube-apiserver-arg=oidc-issuer-url=https://keycloak.example.com/auth/realms/master/ +--kube-apiserver-arg=oidc-client-id=kube-apiserver +--kube-apiserver-arg=oidc-username-claim=email +--kube-apiserver-arg=oidc-groups-claim=groups +``` + +And here's the gentlemanly option: + +Create `/etc/rancher/k3s/config.yaml`, and add: + +```yaml title="Gentlemanly YAML config option" +kube-apiserver-arg: +- "oidc-issuer-url=https://keycloak.example.com/auth/realms/master/" +- "oidc-client-id=kube-apiserver" +- "oidc-username-claim=email" +- "oidc-groups-claim=groups" +``` + +Now restart k3s (*`systemctl restart k3s` on Ubuntu*), and confirm it starts correctly by watching the logs (*`journalctl -u k3s -f` on Ubuntu*) + +Assuming nothing explodes, you're good-to-go on attempting to actually connect... + +### Install kubelogin + +For CLI-based access to your cluster, you'll need a "helper" to perform the OIDC magic on behalf of kubectl. Install [int128/kubelogin](https://github.com/int128/kubelogin), which is design suited to this purpose. + +Use kubelogin to test your OIDC parameters, by running: + +```bash +kubectl oidc-login setup \ + --oidc-issuer-url=ISSUER_URL \ + --oidc-client-id=YOUR_CLIENT_ID \ + --oidc-client-secret=YOUR_CLIENT_SECRET +``` + +All going well, your browser will open a new window, logging you into Keycloak, and on the CLI you should get output something like this: + +``` +~ ❯ kubectl oidc-login setup --oidc-issuer-url=https://keycloak.example.com/auth/realms/master/ --oidc-client-id=kube-apiserver --oidc-client-secret= +authentication in progress... + +## 2. Verify authentication + +You got a token with the following claims: + +{ + "exp": 1700008379, + "iat": 1700007479, + "auth_time": 1700006251, + "jti": "80760d79-3404-406c-bfd9-5c41783b0a5a", + "iss": "https://keycloak.example/auth/realms/master", + "aud": "kube-apiserver", + "sub": "a612b1ae-63e1-4698-bcc8-9ba8b8b7fb84", + "typ": "ID", + "azp": "kube-apiserver", + "nonce": "fwXjVCFM6xosn9yctYEducYBdy4KcnOqbaDxHPRWsTg", + "session_state": "851804e4-e479-46ac-93b4-c89ac37aa7a3", + "at_hash": "7lv4QY3h54maW6S5E--kgg", + "acr": "0", + "sid": "851804e4-e479-46ac-93b4-c89ac37aa7a3", + "email_verified": false, + "name": "David Young", + "groups": [ + "admin-kiali", + "admin-harbor", + "admin-graylog", + "admin-kubernetes", + "concourse-main", + "admin-keycloak", + "admin-grafana" + ], + "preferred_username": "davidy", + "given_name": "David", + "family_name": "Young", + "email": "davidy@funkypenguin.co.nz" +} +``` + +Huzzah, authentication works! :partying_face: + +!!! tip + Make sure you see a groups claim in the output above, and if you don't, revisit your client's mapper settings as when you [configured as an OIDC provider for kube-apiserver](/kubernetes/oidc-authentication/keycloak/). + +### Assemble your kubeconfig + +Your kubectl access to k3s uses a kubeconfig file at `/etc/rancher/k3s/k3s.yaml`. Treat this file as a root password - it's includes a long-lived token which gives you clusteradmin ("*god mode*" on your cluster.) + +Copy the `k3s.yaml` file to your local desktop (*the one with a web browser*), into `$HOME/.kube/config`, and modify it, changing `server: https://127.0.0.1:6443` to match the URL of (*one of*) your control-plane node(*s*). + +Test using `kubectl cluster-info` locally, ensuring that you have access. + +Amend the kubeconfig file for your OIDC user, by running a variation of: + +```bash +kubectl config set-credentials oidc \ + --exec-api-version=client.authentication.k8s.io/v1beta1 \ + --exec-command=kubectl \ + --exec-arg=oidc-login \ + --exec-arg=get-token \ + --exec-arg=--oidc-issuer-url=https://keycloak.example.com/auth/realms/master/ \ + --exec-arg=--oidc-client-id=kube-apiserver \ + --exec-arg=--oidc-client-secret= +``` + +Test your OIDC powerz by running `kubectl --user=oidc cluster-info`. + +Now gasp in dismay as you discover that your request was denied for lack of access! :scream: + +``` +Error from server (Forbidden): services is forbidden: User "oidc:davidy@funkypenguin.co.nz" +cannot list resource "services" in API group "" in the namespace "kube-system" +``` + +### Create clusterrolebinding + +That's what you wanted, right? Security? Locking out unauthorized users? Ha. + +Now that we've confirmed that kube-apiserver knows your **identity** (authn), create a clusterrolebinding to tell it what your identity is **authorized** to do (authz), based on your group membership. + +The following is a simple clusterrolebinding which will grant all members of the `admin-kube-apiserver` full access (`cluster-admin`), to get you started: + +```yaml title="/authentic/clusterrolebinding-oidc-group-admin-kube-apiserver.yaml" +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: oidc-group-admin-kube-apiserver +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: cluster-admin # (1)! +subjects: +- kind: Group + name: oidc:admin-kube-apiserver # (2)! +``` + +1. The role to bind +2. The subject (group, in this case) of the binding + +Apply your clusterrolebinding using the usual GitOps magic (*I put mine in `/authentic/clusterrolebinding-oidc-group-admin-kube-apiserver.yaml`*). + +Run `kubectl --user=oidc cluster-info` again, and confirm you are now authorized to see the cluster details. + +If this works, set your user context permanently, using `kubectl config set-context --current --user=oidc`. + +!!! tip "whoami?" + Run `kubectl krew install whoami` to install the `whoami` plugin, and then `kubectl whoami` to confirm you're logged in with your OIDC account + +You now have OIDC-secured CLI access to your cluster! + +## Summary + +What have we achieved? + +We've setup our K3s cluster to authenticate against Keycloak, running on that same cluster! We can now create multiple users (*with multiple levels of access*) without having to provide them with more access than they need, and we can deploy kube-apiserver-integrated tools like Kubernetes Dashboard or Weaveworks GitOps for nice secured UIs. + +!!! summary "Summary" + Created: + + * [X] K3s cluster with OIDC authentication against [Keycloak][k8s/keycloak] + * [X] Ability to support: + * [X] [Kubernetes Dashboard][k8s/dashboard] + * [X] Weave GitOps (*coming soon*) + * [X] We've also retained our static, K3s-generated `kubernetes-admin` credentials in case OIDC auth fails at some point (*keep them safe!*) + +What's next? + +Deploy Weave GitOps to visualize your Flux / GitOps state, and [Kubernetes Dashboard][k8s/dashboard] for UI management of your cluster! + +[^1]: Later on, as we add more applications which need kube-apiserver authentication, we'll add more redirect URIs. + +{% include 'recipe-footer.md' %} diff --git a/docs/kubernetes/oidc-authentication/keycloak.md b/docs/kubernetes/oidc-authentication/keycloak.md new file mode 100644 index 0000000..aee1f77 --- /dev/null +++ b/docs/kubernetes/oidc-authentication/keycloak.md @@ -0,0 +1,90 @@ +--- +title: Configure K3s for OIDC authentication with Keycloak +description: How to configure your Kubernetes cluster for OIDC authentication with Keycloak +--- +# Authenticate to Kubernetes with OIDC on K3s + +This recipe describes how to configure K3s for OIDC authentication against a [keycloak][k8s/keycloak] instance. + +For details on **why** you'd want to do this, see the [Kubernetes Authentication Guide](/kubernetes/oidc-authentication/). + +## Requirements + +!!! summary "Ingredients" + + * [x] A [Kubernetes cluster](/kubernetes/cluster/) deployed using [K3S](/kubernetes/cluster/k3s) + * [x] [Keycloak][k8s/keycloak] deployed per the recipe + +## Setup Keycloak for kube-apiserver + +Start by logging into your [Keycloak][k8s/keycloak] instance with a privileged account. + +### Create client + +Navigate to **Configure** -> **Clients**, and **Create** a new client. I set the client ID to `kube-apiserver` (*you can't change it later*): + +![](/images/keycloak-kube-apiserver-1.png) + +That's it! You created your client! + +Easy eh? + +Of course, it won't work yet, so there are a few tweaks we'll need.. + +#### Access Type + +Change **Access Type** to `confidential` - this indicates to KeyCloak that your client can be trusted to keep a secret safe, and thus that secret can be used in the OIDC credentials exchange. + +![](/images/keycloak-kube-apiserver-2.png) + +#### Redirect URIs + +Edit **Redirect URIs**, and add `http://localhost:18000` [^1] + +![](/images/keycloak-kube-apiserver-3.png) + +!!! question "What's that redirect URI for?" + We'll use [kubelogin](https://github.com/int128/kubelogin) to confirm OIDC login is working, which runs locally on port 18000 to provide a web-based OIDC login flow. + +#### Get credentials + +Save your settings, and observe that upon refresh, a new **Credentials** tab becomes available.. + +![](/images/keycloak-kube-apiserver-4.png) + +Navigate to **Credentials**, and make a note of the automatically generated client secret. You'll need this later for configuring your OIDC login. + +### Add mapper for groups + +Finally, because we prefer to assign privileges to groups, rather than to individual users, navigate to **Mappers**, and create a new mapper as illustrated below: + +![](/images/keycloak-kube-apiserver-5.png) + +This will send a `groups` claim back to your OIDC client, with a list of your group memberships. + +### Create group + +You can create whatever groups you prefer - later on, you'll configure clusterrolebindings to provide RBAC access to group members. I'd start with a group called `admin-kube-apiserver`, which we'll simply map to the `cluster-admin` clusterrole. + +Navigate to **Manage** -> **Groups**, create the necessary groups, and make yourself a member. + +## Summary + +What have we achieved? We've configured Keycloak as an OIDC provider, and we've got the details necessary to configure our Kubernetes platform(s) to authenticate against it! + +!!! summary "Summary" + Created: + + * [X] [keycloak][k8s/keycloak] configured as an OIDC provider for kube-apiserver + * [X] OIDC parameters, including: + * [X] OIDC Client id (`kube-apiserver`) + * [X] OIDC Client secret (``) + * [X] OIDC Configuration URL (`https:///auth/realms/master/.well-known/openid-configuration`) + +What's next? + +Return to the [Kubernetes Authentication Guide](/kubernetes/oidc-authentication/) for instructions re configuring your particular Kubernetes platform! + +[^1]: Later on, as we add more applications which need kube-apiserver authentication, we'll add more redirect URIs. + +{% include 'recipe-footer.md' %} diff --git a/docs/recipes/kubernetes/keycloak.md b/docs/recipes/kubernetes/keycloak.md new file mode 100644 index 0000000..c8d7985 --- /dev/null +++ b/docs/recipes/kubernetes/keycloak.md @@ -0,0 +1,131 @@ +--- +title: How to deploy Keycloak on Kubernetes +description: Deploy Keycloak on Kubernetes to provide OIDC to your cluster and workloads +values_yaml_url: https://github.com/bitnami/charts/blob/main/bitnami/keycloak/values.yaml +helm_chart_version: 17.3.x +helm_chart_name: keycloak +helm_chart_repo_name: bitnami +helm_chart_repo_url: oci://registry-1.docker.io/bitnamicharts/keycloak +helmrelease_name: keycloak +helmrelease_namespace: keycloak +kustomization_name: keycloak +slug: KeyCloak +status: new +upstream: https://www.keycloak.org +links: +- name: GitHub Repo + uri: https://github.com/keycloak/keycloak +--- + +# KeyCloak installation on Kubernetes + +[Keycloak](https://www.keycloak.org/) is "_an open source identity and access management solution_". Using a local database, or a variety of backends (_think [OpenLDAP](/recipes/openldap/)_), you can provide Single Sign-On (SSO) using OpenID, OAuth 2.0, and SAML. + +![Keycloak Screenshot](/images/keycloak.png){ loading=lazy } + +Keycloak's OpenID provider can also be used to provide [OIDC-based authentication to your Kubernetes cluster](/kubernetes/oidc-authentication/), or in combination with [Traefik Forward Auth](/docker-swarm/traefik-forward-auth/), to protect [vulnerable services](/recipes/autopirate/nzbget/) with an extra layer of authentication. + +## {{ page.meta.slug }} requirements + +!!! summary "Ingredients" + + Already deployed: + + * [x] A [Kubernetes cluster](/kubernetes/cluster/) + * [x] [Flux deployment process](/kubernetes/deployment/flux/) bootstrapped + * [x] An [Ingress controller](/kubernetes/ingress/) to route incoming traffic to services + * [x] [Persistent storage](/kubernetes/persistence/) to store persistent stuff + + Optional: + + * [ ] [External DNS](/kubernetes/external-dns/) to create an DNS entry the "flux" way + +{% include 'kubernetes-flux-namespace.md' %} +{% include 'kubernetes-flux-helmrepository.md' %} +{% include 'kubernetes-flux-kustomization.md' %} +{% include 'kubernetes-flux-dnsendpoint.md' %} +{% include 'kubernetes-flux-helmrelease.md' %} + +## Configure Keycloak Helm Chart + +The following sections detail suggested changes to the values pasted into `/{{ page.meta.helmrelease_namespace }}/helmrelease-{{ page.meta.helmrelease_name }}.yaml` from the {{ page.meta.slug }} helm chart's [values.yaml]({{ page.meta.values_yaml_url }}). The values are already indented correctly to be copied, pasted into the HelmRelease, and adjusted as necessary. + +### Ingress + +Setup your ingress for the KeyCloak UI, enabling at least `ingress.enabled` as below, and additional TLS options as necessary[^1]: + +```yaml hl_lines="4" title="Configure your ingress" + ingress: + ## @param ingress.enabled Enable ingress record generation for Keycloak + ## + enabled: false +``` + +Either leave blank to accept the default ingressClassName, or set to whichever [ingress controller](/kubernetes/ingress/) you want to use. + +## Install {{ page.meta.slug }}! + +Commit the changes to your flux repository, and either wait for the reconciliation interval, or force a reconcilliation using `flux reconcile source git flux-system`. You should see the kustomization appear... + +```bash +~ ❯ flux get kustomizations {{ page.meta.kustomization_name }} +NAME READY MESSAGE REVISION SUSPENDED +{{ page.meta.kustomization_name }} True Applied revision: main/70da637 main/70da637 False +~ ❯ +``` + +The helmrelease should be reconciled... + +```bash +~ ❯ flux get helmreleases -n {{ page.meta.helmrelease_namespace }} {{ page.meta.helmrelease_name }} +NAME READY MESSAGE REVISION SUSPENDED +{{ page.meta.helmrelease_name }} True Release reconciliation succeeded v{{ page.meta.helm_chart_version }} False +~ ❯ +``` + +And you should have happy pods in the {{ page.meta.helmrelease_namespace }} namespace: + +```bash +~ ❯ k get pods -n keycloak +NAME READY STATUS RESTARTS AGE +keycloak-0 1/1 Running 1 (3d17h ago) 26d +keycloak-postgresql-0 1/1 Running 1 (3d17h ago) 26d +~ ❯ +``` + +Browse to the URL you configured in your ingress above, and confirm that the KeyCloak UI is displayed. Login with the admin user you defined above, and confirm a successful login. + +### Create Keycloak user + +!!! question "Why are we adding a user when I have an admin user already?" + Do you keep a spare set of house keys somewhere _other_ than your house? Do you login as `root` onto all your systems? Think of this as the same prinicple - lock the literal `admin` account away somewhere as a "password of last resort", and create a new user for your day-to-day interaction with Keycloak. + +Within the "Master" realm (_no need for more realms unless you want to_), navigate to **Manage** -> **Users**, and then click **Add User** at the top right: + +![Navigating to the add user interface in Keycloak](/images/keycloak-add-user-1.png){ loading=lazy } + +Populate your new user's username (it's the only mandatory field) + +![Populating a username in the add user interface in Keycloak](/images/keycloak-add-user-2.png){ loading=lazy } + +#### Set Keycloak user credentials + +Once your user is created, to set their password, click on the "**Credentials**" tab, and procede to reset it. Set the password to non-temporary, unless you like extra work! + +![Resetting a user's password in Keycloak](/images/keycloak-add-user-3.png){ loading=lazy } +## Summary + +What have we achieved? We've got Keycloak running and accessible, we've created our normal-use user, and we're ready to flex :muscle: the power of Keycloak to deploy an [OIDC provider for Kubernetes](/kubernetes/oidc-authentication/), or to provide OIDC to [Traefik Forward Auth][tfa] to protect vulnerable UIs! + +!!! summary "Summary" + Created: + + * [X] Keycloak running and ready for authentication :lock: ! + + Next: + + * [ ] Configure [Kubernetes OIDC authentication](/kubernetes/oidc-authentication/), unlocking production readiness as well as the [Kubernetes Dashboard][k8s/dashboard] and Weave GitOps UIs (*coming soon*) + +{% include 'recipe-footer.md' %} + +[^1]: There's a trick to using a single cert across multiple Ingresses or IngressRoutes (coming soon) \ No newline at end of file