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

How to create custom themes on Keycloak Operator deployment on Kubernetes?

完整的流程是这样的:

第 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 步:验证 pods 是否为 运行。 运行 很开心。

$ 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

第四步:最后访问http://localhost:3010的keycloak实例,正常运行。

Reams、客户、用户等看起来不错。但是,在领域设置选项卡中找不到我的 COLOR-THEME。只有默认主题(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

How do we use CRDs in order to use or create new Keycloak themes?

对于问题的第一部分,如果你想 add/change Keycloak Operator 本地识别的字段( 领域主题),唯一您要做的更改是将以下内容添加到您的每个领域 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"`
    .....
}

构建项目并运行。