Keycloak with MSSQL Deployment on Kubernetes Cluster
Keycloak
Keycloak is an excessive overall performance Java-primarily based identification totally and gets right of entry to control solution. It shall we builders to upload an authentication layer to their packages with minimal effort. Keycloak is an Open Source IAM solution for applications. Docker Images are available on the quay.io repository.
While looking for an Open Source Identity and Access Management provider, I was looking for the following:
- OpenID Connect & OAuth 2.0
- Two-factor authentication (Authenticator, E-Mail, SMS, etc.)
- Support Authorization (Attribute-based access control (ABAC), Role-based access control (RBAC), User-based access control (UBAC), Context-based access control (CBAC) Rule-based access control)
- Support Client Libraries
- Modern Tech Stack
- Support Multiple Database (PostgreSQL, MySQL, Microsoft SQL Server, etc.)
- High Performance and Scalable
Dockerize Keycloak with Microsoft SQL (MsSQL) Deployment on Kubernetes Cluster
We can deploy Keycloak on the Kubernetes cluster by creating deployment, service, ingress and secret yaml’s for it.
Keycloak Docker Container Environments
| Environment Name | Example Value | Description |
| DB_ADDR | mssql.data.svc.cluster.local | Specify the hostname of the database. |
| DB_DATABASE | keycloak | Specify the name of the database to use (optional, default is keycloak). |
| DB_PORT | 1433 | Specify the port of the database (optional, default is DB vendor default port) |
| DB_PASSWORD | Password@1 | Specify the user’s password to use to authenticate to the database |
| DB_USER | sa | Specify users of the database. |
| DB_SCHEMA | Specify the name of the schema to use for DB that supports schemas. | |
| KEYCLOAK_PASSWORD | dbo | By default, there is no admin user created so you won’t be able to login to the admin console. To create an admin account you need to use environment variables to pass in an initial username and password. |
| KEYCLOAK_USER | Password@123 | By default, there is no admin user created so you won’t be able to login to the admin console. To create an admin account you need to use environment variables to pass in an initial username and password. |
| JDBC_PARAMS | encrypt=false (https://learn.microsoft.com/en-us/sql/connect/jdbc/building-the-connection-url?view=sql-server-ver16) | JDBC driver connection parameters If you are getting “Notifications KeyCloak Microsoft SQL server connection error “KIX path building failed Exception” set trustServerCertificate=false;encrypt=false values |
| PROXY_ADDRESS_FORWARDING | true/false | When running Keycloak behind a proxy, you must enable proxy address forwarding. |
1- secret.yaml
apiVersion: v1 stringData: KEYCLOAK_ROOT_USER: admin KEYCLOAK_ROOT_PASSWORD: Password@1 KEYCLOAK_DB_USER: sa KEYCLOAK_DB_PASSWORD: Password@1 kind: Secret metadata: name: keycloak-mssql type: Opaque
2- deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
kompose.cmd: kompose convert
kompose.version: 1.26.1 (HEAD)
creationTimestamp: null
labels:
io.kompose.service: keycloak-mssql
name: keycloak-mssql
spec:
replicas: 1
selector:
matchLabels:
io.kompose.service: keycloak-mssql
strategy: {}
template:
metadata:
annotations:
kompose.cmd: kompose convert
kompose.version: 1.26.1 (HEAD)
creationTimestamp: null
labels:
io.kompose.service: keycloak-mssql
spec:
containers:
- env:
- name: DB_ADDR
value: mssql.data.svc.cluster.local
- name: DB_DATABASE
value: Keycloak
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
key: KEYCLOAK_DB_PASSWORD
name: keycloak-mssql
- name: DB_USER
valueFrom:
secretKeyRef:
key: KEYCLOAK_DB_USER
name: keycloak-mssql
- name: DB_VENDOR
value: mssql
- name: KEYCLOAK_PASSWORD
valueFrom:
secretKeyRef:
key: KEYCLOAK_ROOT_PASSWORD
name: keycloak-mssql
- name: KEYCLOAK_USER
valueFrom:
secretKeyRef:
key: KEYCLOAK_ROOT_USER
name: keycloak-mssql
- name: JDBC_PARAMS
value: trustServerCertificate=false;encrypt=false
- name: PROXY_ADDRESS_FORWARDING
value: "true"
image: quay.io/keycloak/keycloak:19.0.2-legacy
name: fi-keycloak-mssql
# args: ["start", "--hostname=0.0.0.0", "--hostname-admin=0.0.0.0"]
restartPolicy: Always
status: {}
3- service.yaml
apiVersion: v1
kind: Service
metadata:
annotations:
kompose.cmd: kompose convert
kompose.version: 1.26.1 (HEAD)
creationTimestamp: null
labels:
io.kompose.service: keycloak-mssql
name: keycloak-mssql
spec:
ports:
- name: "8080"
port: 8080
targetPort: 8080
selector:
io.kompose.service: keycloak-mssql
status:
loadBalancer: {}
4- ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: keycloak-mssql
spec:
ingressClassName: nginx
tls:
- hosts:
- keycloak.mywebsite.com.tr
secretName: wildcard-fimple
rules:
- host: keycloak.mywebsite.com.tr
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: keycloak-mssql
port:
number: 8080
and you are ready for
kubectl apply