https://github.com/codecentric/helm-charts/tree/master/charts/keycloakx のHelm Chartを使ってKeycloakをKubernetesにインストールするメモ。
まずはKeycloak用のNamespaceを作成する。
kubectl create namespace keycloak
PostgreSQLをインストールする。ここでは動作検証用のシンプルなStatefulSetを作成する。実際にはManaged PostgreSQLサービスなどを利用することを推奨。
cat <<EOF > postgres.yaml
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: keycloak-db
spec:
serviceName: keycloak-db-headless
selector:
matchLabels:
app: keycloak-db
replicas: 1
template:
metadata:
labels:
app: keycloak-db
spec:
containers:
- name: keycloak-db
image: postgres:17
volumeMounts:
- mountPath: /data
name: cache-volume
env:
- name: POSTGRES_USER
valueFrom:
secretKeyRef:
name: keycloak-db
key: username
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: keycloak-db
key: password
- name: PGDATA
value: /data/pgdata
- name: POSTGRES_DB
value: keycloak
volumes:
- name: cache-volume
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: keycloak-db-headless
spec:
clusterIP: None
selector:
app: keycloak-db
ports:
- port: 5432
targetPort: 5432
protocol: TCP
name: postgres
---
EOF
PostgreSQLのユーザー名とパスワードをKubernetes Secretとして作成し、PostgreSQLをデプロイする。
kubectl create secret generic keycloak-db \
--from-literal=username=testuser \
--from-literal=password=testpassword \
-n keycloak
kubectl apply -f postgres.yaml -n keycloak
PostgreSQLが起動したら、KeycloakをHelmでインストールする。次のようなvaluesファイルを作成する。
cat <<EOF > keycloak-values.yaml
---
args: [ "start" ]
extraEnv: |
- name: KC_BOOTSTRAP_ADMIN_USERNAME
value: admin
- name: KC_BOOTSTRAP_ADMIN_PASSWORD
value: admin
- name: KC_DB_URL
value: jdbc:postgresql://keycloak-db-headless:5432/keycloak
- name: KC_DB_USERNAME
valueFrom:
secretKeyRef:
name: keycloak-db
key: username
- name: KC_DB_PASSWORD
valueFrom:
secretKeyRef:
name: keycloak-db
key: password
- name: KC_HOSTNAME_STRICT
value: "false"
- name: KC_LOG_CONSOLE_OUTPUT
value: json
- name: KC_LOG_CONSOLE_JSON_FORMAT
value: ecs
- name: JAVA_OPTS_APPEND
value: >-
-Djgroups.dns.query={{ include "keycloak.fullname" . }}-headless
database:
vendor: postgres
cache:
stack: jdbc-ping
proxy:
mode: xforwarded
ingress:
enabled: true
annotations:
projectcontour.io/tls-cert-namespace: projectcontour
rules:
- host: keycloak.lan.ik.am
paths:
- path: /
pathType: Prefix
tls:
- hosts:
- keycloak.lan.ik.am
secretName: default-tls
---
EOF
次のコマンドでHelm Chartのテンプレートを確認できる。
helm template -n keycloak keycloakx oci://ghcr.io/codecentric/helm-charts/keycloakx --version 7.1.3 -f keycloak-values.yaml
次のコマンドでKeycloakをインストールする。
helm upgrade --install -n keycloak keycloakx oci://ghcr.io/codecentric/helm-charts/keycloakx --version 7.1.3 -f keycloak-values.yaml --create-namespace --wait
次のコマンドでKeycloakのPod、StatefulSet、Ingressを確認できる。
$ kubectl get pod,sts,ing -n keycloak -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/keycloak-db-0 1/1 Running 0 56m 10.1.173.137 cherry <none> <none>
pod/keycloakx-0 1/1 Running 0 55m 10.1.173.187 cherry <none> <none>
NAME READY AGE CONTAINERS IMAGES
statefulset.apps/keycloak-db 1/1 56m keycloak-db postgres:17
statefulset.apps/keycloakx 1/1 55m keycloak quay.io/keycloak/keycloak:26.3.3
NAME CLASS HOSTS ADDRESS PORTS AGE
ingress.networking.k8s.io/keycloakx contour keycloak.lan.ik.am 192.168.11.240 80, 443 55m
IngressのアドレスにブラウザでアクセスするとKeycloakのログイン画面が表示される。
