如何在 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 部署上创建自定义主题?的主要内容,如果未能解决你的问题,请参考以下文章