Beliebte Suchanfragen
//

Keycloak Deployment: Docker Compose vs. Kubernetes mit Helm-Chart

24.10.2025 | 4 Minuten Lesezeit

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.

Beitrag teilen

//

Weitere Artikel in diesem Themenbereich

Entdecke spannende weiterführende Themen und lass dich von der codecentric Welt inspirieren.

//
Jetzt für unseren Newsletter anmelden

Alles Wissenswerte auf einen Klick:
Unser Newsletter bietet dir die Möglichkeit, dich ohne großen Aufwand über die aktuellen Themen bei codecentric zu informieren.