Bei der Installation von Keycloak hat man im Wesentlichen zwei Optionen: Eine traditionelle Installation oder eine containerisierte Installation. Bei ersterer wird Keycloak direkt als Java-Anwendung auf dem Betriebssystem installiert (sei es Bare Metal oder in einer VM). Containerisierte Lösungen setzen im Kleinen oft auf Docker und in komplexeren Umgebungen meist auf Kubernetes.
Heute trifft man hauptsächlich containerisierte Lösungen an, denn diese bieten klare Vorteile in Bezug auf Flexibilität, Skalierbarkeit und Wartbarkeit. Die zentralen Vorteile sind:
- Flexibilität: Container laufen unabhängig von der darunterliegenden Infrastruktur gekapselt und getrennt von anderen Containern in ihrer Umgebung. Sie können einfach zwischen Hosts verschoben werden, sind an diese nicht eng gekoppelt und haben kaum Abhängigkeiten zu ihnen.
- Skalierbarkeit: Container lassen sich binnen Sekunden multiplizieren und so mehrfach betreiben, um steigende Nachfrage bedienen zu können. Gleichzeitig führt das auch zur Möglichkeit, die Container auf verschiedene Hosts verteilen zu können.
- Wartbarkeit: Da Container und Umgebung strikt getrennt sind, können Updates jeweils ohne Wechselwirkungen mit anderen Containern eingespielt werden. Gleichzeitig können diese Updates zuvor reproduzierbar in anderen Umgebungen getestet werden.
Container können ebenfalls extrem schnell bereitgestellt werden, da sie kaum Anforderungen an ihre Umgebung stellen und alles selbst mitbringen. Während bei einer Bare-Metal-Installation erst noch Java installiert werden muss, bringt ein Container sein eigenes Java in der korrekten Version und Konfiguration direkt mit. Updated man einen Container, erhält man auch Abhängigkeiten wie Java direkt in der zugehörigen, neuen Version.
Keycloak nur noch mit Containern
Aufgrund der genannten Vorteile sollte Keycloak heute bis auf wenige Ausnahmen nur noch containerisiert installiert werden. Hier kommen Docker und Kubernetes mit zugehörigen Tools infrage.
- Docker eignet sich vor allem für kleinere Umgebungen, Tests und die lokale Entwicklung. Es ist schnell einzurichten und zu installieren und ermöglicht das Deployment eines Keycloaks binnen Minuten. Docker Compose ermöglicht das direkte Ausführen einer ganzen Umgebung, zum Beispiel eines Keycloaks mit Datenbank.
- Kubernetes spielt seine Stärken vor allem in großen, produktiven Unternehmensumgebungen aus, da hier Skalierbarkeit und Ausfallsicherheit von größerer Relevanz sind. Kubernetes ist darauf ausgelegt, Umgebungen mit hoher Verfügbarkeit zu realisieren, da Redundanz einfach herzustellen ist. Helm-Charts sind im Kubernetes-Kontext als eine Art Kochrezept zu verstehen, wie eine Anwendung deployt wird.
Docker Compose: “Mal eben” einen Keycloak deployen
Voraussetzung zum Betrieb eines Keycloak Docker Containers ist eine Docker-Installation. Dazu wählt man für Linux (Server) am besten Docker CE, während man auf Desktop-Rechnern am besten Docker Desktop oder das lizenzfreie Podman Desktop installiert.
Danach kann man in einem leeren Ordner einfach eine docker-compose.yaml Datei anlegen und folgenden Inhalt darin hinterlegen:
name: keycloak-codecentric
services:
keycloak:
image: quay.io/keycloak/keycloak:26.4.2
environment:
KEYCLOAK_ADMIN: admin
KEYCLOAK_ADMIN_PASSWORD: admin
KC_DB: postgres
KC_DB_URL: jdbc:postgresql://postgres/keycloak
KC_DB_USERNAME: postgres_user
KC_DB_PASSWORD: postgres_pass
volumes:
- keycloak-data:/opt/keycloak/data:z
ports:
- 8080:8080
networks:
- backend
command:
- "--verbose"
- "start-dev" # Only for Dev-Environment!
postgres:
image: postgres
environment:
POSTGRES_DB: keycloak
POSTGRES_USER: postgres_user
POSTGRES_PASSWORD: postgres_pass
ports:
- 5432:5432
networks:
- backend
volumes:
- postgres-data:/var/lib/postgresql/data
networks:
backend:
volumes:
keycloak-data:
postgres-data:
Führt man jetzt innerhalb des Ordners auf der Konsole den Befehl docker compose up aus und wartet ein paar Sekunden, kann man unter http://localhost:8080 einen Keycloak-Server erreichen, der seine eigene PostgreSQL-Datenbank mitbringt. Der Login ist mit dem Benutzernamen admin und dem Passwort admin möglich.
Kubernetes und Helm für professionelle Deployments
Voraussetzung zur Installation eines Helm-Charts ist eine Kubernetes-Umgebung. Die Einrichtung in Produktivumgebungen kann recht komplex sein - für lokales Testen reichen aber die durch Docker Desktop oder Podman Desktop aktivierbaren lokalen Kubernetes Testumgebungen. Zusätzlich muss man noch den zu installierenden Helm-Chart auswählen.
Nachdem Bitnami als großer Anbieter einer Sammlung von Helm-Charts sein Repository hinter eine Paywall gestellt hat, suchen viele nach einer neuen Möglichkeit, Keycloak via Helm zu installieren. Hier bietet sich der codecentric Keycloak Helm-Chart an:
https://github.com/codecentric/helm-charts/tree/master/charts/keycloakx
Im Folgenden wollen wir zeigen, wie eine kleine Basisinstallation vorgenommen werden kann. Im ersten Schritt muss eine values.yaml Datei als Konfiguration des Helm-Charts angelegt werden. Eine Datei mit minimaler Konfiguration könnte so aussehen:
command:
- "/opt/keycloak/bin/kc.sh"
- "start"
- "--http-port=8080"
- "--hostname-strict=false"
extraEnv: |
- name: KEYCLOAK_ADMIN
value: admin
- name: KEYCLOAK_ADMIN_PASSWORD
value: admin
- name: JAVA_OPTS_APPEND
value: >-
-Djgroups.dns.query={{ include "keycloak.fullname" . }}-headless
Dann kann man das Repository des Helm Charts hinzufügen und im nächsten Schritt den Helm-Chart mit der vorherigen Konfigurationsdatei über die Konsole installieren:
helm repo add codecentric https://codecentric.github.io/helm-charts
helm install keycloak codecentric/keycloakx --values ./values.yaml
Wenige Sekunden später kann man beobachten, wie in Kubernetes (oder Docker/Podman Desktop) der entsprechende Keycloak-Container gestartet wird. Um auf den Container zugreifen zu können, muss noch eine Portweiterleitung eingerichtet werden. Diese mappt einen Port des Hosts auf einen Port des Containers:
export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=keycloakx,app.kubernetes.io/instance=keycloak" -o name)
kubectl --namespace default port-forward "$POD_NAME" 8080
Solange die Portweiterleitung und der Container aktiv sind, kann man den Keycloak im Browser über die URL http://127.0.0.1:8080 aufrufen und sich mit dem Benutzernamen admin und dem Passwort admin einloggen.
Wie geht es weiter?
In diesem kurzen Tutorial haben sie gesehen, wie man Keycloak einfach via Docker oder Kubernetes installieren kann. Für Produktivumgebungen fehlt hier noch einiges in der Konfiguration, um Anforderungen an Skalierbarkeit, Sicherheit und Performance zu genügen. Hinweise zur Konfiguration des Helm-Charts sind im verlinkten Github-Repository zu finden.
Weitere Beiträge
von Stefan Gries
Weitere Artikel in diesem Themenbereich
Entdecke spannende weiterführende Themen und lass dich von der codecentric Welt inspirieren.
Blog-Autor*in
Stefan Gries
IAM & IT Consultant, Software Engineer
Du hast noch Fragen zu diesem Thema? Dann sprich mich einfach an.
Du hast noch Fragen zu diesem Thema? Dann sprich mich einfach an.