如何在 Kubernetes 上的 Keycloak Operator 部署上创建自定义主题?
Posted
技术标签:
【中文标题】如何在 Kubernetes 上的 Keycloak Operator 部署上创建自定义主题?【英文标题】:How to create custom themes on Keycloak Operator deployment on Kubernetes? 【发布时间】:2021-03-25 19:29:18 【问题描述】:完整的流程有点像这样:
第 1 步:应用所有相关的 YAML
$ sudo kind create cluster --name aftab-cluster --config cluster-config.yaml
$ curl -sL https://github.com/operator-framework/operator-lifecycle-manager/releases/download/v0.17.0/install.sh | bash -s v0.17.0
$ kubectl apply -f keycloak_backup.yaml
$ kubectl apply -f keycloaks_client.yaml
$ kubectl apply -f keycloaks_realm.yaml //Theme configs not there. So, added loginTheme.
loginTheme:
description: Login Theme
type: string
loginWithEmailAllowed:
description: Login with email
type: boolean
$ kubectl apply -f keycloak_users.yaml
$ kubectl apply -f keycloaks_crd.yaml
$ kubectl apply -f namespace.yaml
$ kubectl apply -f role.yaml -n keycloak-namespace
$ kubectl apply -f role_binding.yaml -n keycloak-namespace
$ kubectl apply -f sa.yaml -n keycloak-namespace
$ kubectl apply -f operator.yaml -n keycloak-namespace
$ kubectl apply -f keycloak.yaml -n keycloak-namespace
apiVersion: keycloak.org/v1alpha1
kind: Keycloak
metadata:
name: example-keycloak
labels:
app: sso
spec:
instances: 1
extensions:
- /PATH/FOR/MY/COLOR-THEME/JAR/
externalAccess:
enabled: True
第 2 步:验证 pod 是否正在运行。快乐地奔跑。
$ kubectl get po -n keycloak-namespace // I can see podsa are running successfuly.
NAME READY STATUS RESTARTS AGE
keycloak-0 1/1 Running 0 3m13s
keycloak-operator-798747fb9d-2lgzn 1/1 Running 0 4m21s
keycloak-postgresql-85579c4d6d-4tgxj 1/1 Running 0 3m13s
第 3 步:创建新领域和客户端
$ kubectl apply -f my-realm.yaml -n keycloak-namespace
apiVersion: keycloak.org/v1alpha1
kind: KeycloakRealm
metadata:
name: myrealm-realm
labels:
app: myrealm-realm
spec:
realm:
id: "myrealm"
realm: "myrealm"
enabled: True
displayName: "myrealm"
userRegistration: True
registrationAllowed: True
editUsernameAllowed: True
resetPasswordAllowed: True
rememberMe: True
registrationEmailAsUsername: True
loginTheme: "COLOR-THEME" <<<<<<<<<< MY CUSTOM THEME
users:
- username: "admin"
firstName: "Admin"
realmRoles:
- "offline_access"
- "uma_authorization"
$ kubectl apply -f my-client.yaml -n keycloak-namespace
Step-4:最后,在 http://localhost:3010 访问 keycloak 实例,按预期工作。
Reams、客户、用户等看起来不错。但是,在领域设置选项卡中找不到我的颜色主题。只有默认主题(keycloak 和 base)。
目录结构如下:
$ ls
cluster-config.yaml keycloak_backup.yaml keycloaks_crd.yaml namespace.yaml role_binding.yaml my-client.yaml
xyz keycloak_users.yaml keycloaks_realm.yaml operator.yaml sa.yaml my_realm.yaml
keycloak.yaml keycloaks_client.yaml keyclok-ing.yaml role.yaml themes myrealm-realm.yaml
【问题讨论】:
【参考方案1】:我们如何使用 CRD 来使用或创建新的 Keycloak 主题?
对于问题的第一部分,如果您想添加/更改 Keycloak 操作员本机识别的字段(即领域主题),您唯一需要做的更改是将以下内容添加到您的每个 Realm CRD:
spec:
realm:
id: Realm_ID
...
loginTheme: "my_login_theme"
对于第二部分(即创建新的 Keycloak 主题):
你不能。首先创建新主题,将新主题的文件夹添加到 Keycloak 部署中,然后添加到前面提到的 Keycloak Operator。
检查 Keycloak Operator 是否支持 file keycloak-operator/deploy/crds/keycloak.org_keycloakrealms.yaml
中的 loginTheme
字段搜索。如果不存在,则需要添加:
loginTheme:
description: Login Theme
type: string
loginWithEmailAllowed:
description: Login with email
type: boolean
此外,在file pkg/apis/keycloak/v1alpha1/keycloakrealm_types.go
中,您需要将该额外字段添加到KeycloakAPIRealm
结构中,即:
type KeycloakAPIRealm struct
// +kubebuilder:validation:Required
// +optional
ID string `json:"id"`
// Realm name.
// +kubebuilder:validation:Required
Realm string `json:"realm"`
// Realm enabled flag.
// +optional
Enabled bool `json:"enabled"`
// Login Theme name
// +optional
LoginTheme string `json:"loginTheme,omitempty"`
.....
构建项目并运行。
【讨论】:
以上是关于如何在 Kubernetes 上的 Keycloak Operator 部署上创建自定义主题?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Kubernetes 上的 Keycloak Operator 部署上创建自定义主题?
如何在 Kubernetes 上的 Keycloak Operator 部署中使用自定义主题?
如何从外部访问托管在 kubernetes 集群上的 mongodb 副本集?
如何确定部署在 Kubernetes 上的 Spring Boot 应用程序中出现 CrashLoopBackOff 错误的原因