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