Deploiement avec Helm
Le chart Helm officiel Bitnami simplifie le deploiement de Keycloak sur Kubernetes avec support natif de la HA, des bases externes et de l'Ingress.
Installation du chart
# Ajouter le repo Bitnami
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
# Installation basique
helm install keycloak bitnami/keycloak \
--namespace keycloak \
--create-namespace
values.yaml pour la production
replicaCount: 3
auth:
adminUser: admin
existingSecret: keycloak-admin-secret
postgresql:
enabled: false
externalDatabase:
host: postgres.database.svc.cluster.local
port: 5432
database: keycloak
user: keycloak
existingSecret: keycloak-db-secret
existingSecretPasswordKey: password
ingress:
enabled: true
ingressClassName: nginx
hostname: auth.mondomaine.com
tls: true
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
cache:
stack: kubernetes
resources:
requests:
memory: 512Mi
cpu: 250m
limits:
memory: 1Gi
cpu: 1000m
autoscaling:
enabled: true
minReplicas: 2
maxReplicas: 5
targetCPU: 70
Haute disponibilite avec Infinispan
Keycloak utilise Infinispan pour le cache distribue entre les instances. Sur Kubernetes, la decouverte se fait via DNS ou KUBE_PING.
# Configuration du cache distribue
cache:
stack: kubernetes
# Variables d'environnement pour KUBE_PING
extraEnvVars:
- name: JAVA_OPTS_APPEND
value: "-Djgroups.dns.query=keycloak-headless.keycloak.svc.cluster.local"
- name: KC_CACHE_CONFIG_FILE
value: "cache-ispn.xml"
Base de donnees externe PostgreSQL
# Deployer PostgreSQL HA avec le chart Bitnami
helm install postgres bitnami/postgresql-ha \
--namespace keycloak \
--set postgresql.replicaCount=3 \
--set postgresql.password=secret123
# Ou utiliser un service manage (RDS, Cloud SQL)
externalDatabase:
host: keycloak-db.xxxx.rds.amazonaws.com
port: 5432
database: keycloak
Ingress TLS avec cert-manager
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: keycloak-ingress
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
nginx.ingress.kubernetes.io/proxy-buffer-size: "128k"
spec:
ingressClassName: nginx
tls:
- hosts:
- auth.mondomaine.com
secretName: keycloak-tls
rules:
- host: auth.mondomaine.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: keycloak
port:
number: 80
Important : En production, utilisez toujours une base de donnees externe avec des sauvegardes automatiques. La base embarquee H2 ne supporte pas le clustering.