Keycloak là một phần mềm nguồn mở cung cấp việc quản lý truy cập và phân quyền.
Trang chủ https://www.keycloak.org
Các giao thức quản lý truy cập, phân quyền đang hỗ trợ bao gồm: OpenID Connect, OAuth 2.0 và SAML.
Trong bài viết này sẽ hướng dẫn cài đặt Keycloak với Data Base là Postgres
Cài đặt theo phương thức sử dụng Operator.
1. Cài Keycloak Operator
Tạo namespace và set context
kubectl create namespace keycloak
kubectl config set-context --current --namespace keycloak
kubectl apply -f https://raw.githubusercontent.com/keycloak/keycloak-k8s-resources/25.0.2/kubernetes/keycloaks.k8s.keycloak.org-v1.yml
kubectl apply -f https://raw.githubusercontent.com/keycloak/keycloak-k8s-resources/25.0.2/kubernetes/keycloakrealmimports.k8s.keycloak.org-v1.yml
kubectl apply -f https://raw.githubusercontent.com/keycloak/keycloak-k8s-resources/25.0.2/kubernetes/kubernetes.yml
Tạo service mapping sang DB có sẵn
Ta tạo services có tên postgresdb_svc mapping sang DB ở name space khác
(Có thể bỏ qua bước mapping này để gọi trực tiếp sang DB ở name space khác)
cat mappingdb.yaml
kind: Service
apiVersion: v1
metadata:
name: postgresDB
namespace: playground
spec:
type: ExternalName
externalName: awx-demo-postgres-15.awx.svc.cluster.local
ports:
- port: 5432
kubectl apply -f mappingdb.yaml
Tạo secret kết nối sang DB
kubectl create secret generic keycloak-db-secret –from-literal=username=[your_database_username] –from-literal=password=[your_database_password]
Ở đây ta đặt user: keycloak và password: keycloak_DBpass
Lưu ý: keycloak user cần có quyền ở database public và full quyền ở database keycloak
kubectl create secret generic keycloak-db-secret --from-literal=username=keycloak --from-literal=password=keycloak_DBpass
Tạo custom resource keycloak
vi example-kc.yaml
Thiết lập các thông tin DB: user, pass, host
Thông tin host name và port listen
Disable operator tạo ingress để tự thiết lập thủ công
apiVersion: k8s.keycloak.org/v2alpha1
kind: Keycloak
metadata:
annotations:
name: uptime-kc
namespace: keycloak
spec:
db:
database: keycloak
host: awx-demo-postgres-15.awx.svc.cluster.local
passwordSecret:
key: password
name: keycloak-db-secret
usernameSecret:
key: username
name: keycloak-db-secret
vendor: postgres
hostname:
hostname: sso.uptime59.com
strict: false
strictBackchannel: false
http:
httpEnabled: true
httpPort: 8080
httpsPort: 8443
tlsSecret: example-tls-secret
ingress:
enabled: false
instances: 1
proxy:
headers: xforwarded
Apply vào k8s
kubectl apply -f example-kc.yaml
Kiểm tra tình trạng sau thiết lập
kubectl get keycloaks/uptime-kc-kc -o go-template='{{range .status.conditions}}CONDITION: {{.type}}{{"\n"}} STATUS: {{.status}}{{"\n"}} MESSAGE: {{.message}}{{"\n"}}{{end}}'
kubectl get keycloaks
kubectl describe keycloaks uptime59-kc
Lấy các thông tin user/ pass để vào trang quản trị
kubectl get secret uptime-kc-initial-admin -o jsonpath='{.data.username}' | base64 --decode
--> admin
kubectl get secret uptime-kc-initial-admin -o jsonpath='{.data.password}' | base64 --decode
--> 8200207a5f3a46c889a1ff0956da4db3
Cấu hình Ingress
Tạo configmap
Config map là proxy-set-headers để truyền giá trị proxy headers cho nginx ingress
vi proxy-set-headers.yaml
apiVersion: v1
data:
url: sso.uptime59.com
kind: ConfigMap
metadata:
annotations:
kubernetes.io/description: proxy-set-headers
name: proxy-set-headers
namespace: keycloak
k apply -f proxy-set-headers.yaml
k get cm proxy-set-headers -o yaml
Tạo ingress
vi uptime-kc-ingress.yaml
kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
name: uptime-kc-ingress
namespace: keycloak
labels:
app: keycloak
annotations:
nginx.ingress.kubernetes.io/auth-proxy-set-headers: proxy-set-headers
nginx.ingress.kubernetes.io/cors-allow-headers: X-Forwarded-For
nginx.ingress.kubernetes.io/proxy-connect-timeout: '30'
nginx.ingress.kubernetes.io/proxy-read-timeout: '1800'
nginx.ingress.kubernetes.io/proxy-send-timeout: '1800'
spec:
ingressClassName: nginx
rules:
- host: sso.uptime59.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: uptime-kc-service
port:
number: 8080
k apply -f uptime-kc-ingress.yaml
k get ing uptime-kc-ingress -o yaml
Thiết lập file host để trỏ domain đến IP của LB và mở trình duyệt để kiểm tra