如何在 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 上的进化

如何在 Kubernetes 上的 Keycloak Operator 部署中使用自定义主题?

如何从外部访问托管在 kubernetes 集群上的 mongodb 副本集?

如何确定部署在 Kubernetes 上的 Spring Boot 应用程序中出现 CrashLoopBackOff 错误的原因

裸机/私有云上的 Kubernetes 存储