kubernetes - 如何在 kubernetes 上为 keyCloak 配置自定义主题
问题描述
我想在 kubernetes 的 keycloak 中为登录、注册和忘记密码页面配置自定义主题。
我在 kubernetes 上为 keycloak 使用以下 url 和配置。
https://www.keycloak.org/getting-started/getting-started-kube
apiVersion: v1
kind: Service
metadata:
name: keycloak
labels:
app: keycloak
spec:
ports:
- name: http
port: 8080
targetPort: 8080
selector:
app: keycloak
type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: keycloak
namespace: default
labels:
app: keycloak
spec:
replicas: 1
selector:
matchLabels:
app: keycloak
template:
metadata:
labels:
app: keycloak
spec:
containers:
- name: keycloak
image: quay.io/keycloak/keycloak:12.0.4
env:
- name: KEYCLOAK_USER
value: "admin"
- name: KEYCLOAK_PASSWORD
value: "admin"
- name: PROXY_ADDRESS_FORWARDING
value: "true"
ports:
- name: http
containerPort: 8080
- name: https
containerPort: 8443
readinessProbe:
httpGet:
path: /auth/realms/master
port: 8080
请向我推荐任何现有的博客网址或现有的解决方案。
解决方案
我过去使用的方法是首先创建一个 .tar 文件(例如 custom_theme.tar
),其中包含要在 Keycloak 中使用的自定义主题。然后将卷挂载到存储 Keycloak 主题的文件夹(即 /opt/jboss/keycloak/themes/my_custom_theme
),并将带有自定义主题的 .tar 文件从本地文件夹复制到 Keycloak 容器中。
helm char 文件夹结构:
Chart.yaml custom_theme.tar templates values.yaml
的内容:
值.yaml:
password: adminpassword
模板文件夹结构:
customThemes-configmap.yaml ingress.yaml service.yaml
deployment.yaml secret.yaml
的内容:
customThemes-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: customthemes-configmap
binaryData:
custom_theme.tar: |-
{{ .Files.Get "custom_theme.tar" | b64enc}}
入口.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: keycloak
spec:
tls:
- hosts:
- keycloak-sprint01.demo
rules:
- host: keycloak-sprint01.demo
http:
paths:
- backend:
serviceName: keycloak
servicePort: 8080
服务.yaml
apiVersion: v1
kind: Service
metadata:
name: keycloak
labels:
app: keycloak
spec:
ports:
- name: http
port: 8080
targetPort: 8080
selector:
app: keycloak
type: LoadBalancer
秘密.yaml
apiVersion: v1
kind: Secret
metadata:
name: keycloak-password
type: Opaque
stringData:
password: {{.Values.password}}
部署.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: keycloak
namespace: default
labels:
app: keycloak
spec:
replicas: 1
selector:
matchLabels:
app: keycloak
template:
metadata:
labels:
app: keycloak
spec:
containers:
- name: keycloak
image: quay.io/keycloak/keycloak:10.0.1
env:
- name: KEYCLOAK_USER
value: "admin"
- name: KEYCLOAK_PASSWORD
valueFrom:
secretKeyRef:
name: keycloak-password
key: password
- name: PROXY_ADDRESS_FORWARDING
value: "true"
- name: DB_VENDOR
value: "h2"
- name: JAVA_TOOL_OPTIONS
value: -Dkeycloak.profile.feature.scripts=enabled
ports:
- name: http
containerPort: 8080
- name: https
containerPort: 8443
readinessProbe:
httpGet:
path: /auth/realms/master
port: 8080
volumeMounts:
- mountPath: /opt/jboss/keycloak/themes/my_custom_theme
name: shared-volume
initContainers:
- name: init-customtheme
image: busybox:1.28
command: ['sh', '-c', 'cp -rL /CustomTheme/custom_theme.tar /shared && cd /shared/ && tar -xvf custom_theme.tar && rm -rf custom_theme.tar']
volumeMounts:
- mountPath: /shared
name: shared-volume
- mountPath: /CustomTheme
name: theme-volume
volumes:
- name: shared-volume
emptyDir: {}
- name: theme-volume
configMap:
name: customthemes-configmap
我并不是说这是最好的方法,我不是 Kubernetes 或 helm 方面的专家。可以在此处找到包含上述文件的 Git 存储库。
推荐阅读
- angular - 如何编写模拟数据以从角度服务中获取价值
- xslt-1.0 - XSLT 1.0 将字符串中的最后 4 个字符移动到新节点
- android - Android Studio,Xml 自动完成功能不起作用
- automation - 包括在剧本的第一次播放中生成的变量
- python - 是什么导致了这个 NameError: name 'ax' is not defined in my Python code?
- vba - 在报告行源更改时动态设置文本框的格式化“ControlSource”
- c# - JSON.NET 反序列化 JSON 然后格式化字符串
- javascript - TypeError:无法读取未定义的属性“街道”
- c# - 为什么我的复选框没有将它们的值传递给 ASP.NET Core 中的控制器?
- c++ - 编译器在编译 C++ 时是否用其值替换常量变量