Keycloak Realm 导入

如何使用 Operator 执行自动化的 Keycloak Realm 导入

导入 Keycloak Realm

使用 Keycloak Operator,您可以为 Keycloak 部署执行 realm 导入。

  • 如果 Keycloak 中已存在同名的 Realm,则不会覆盖它。

  • Realm Import CR 仅支持创建新的 realm,不支持更新或删除 realm。直接在 Keycloak 上对 realm 执行的更改不会同步回 CR 中。

创建 Realm 导入自定义资源

以下是 Realm 导入自定义资源 (CR) 的示例

apiVersion: k8s.keycloak.org/v2alpha1
kind: KeycloakRealmImport
metadata:
  name: my-realm-kc
spec:
  keycloakCRName: <name of the keycloak CR>
  realm:
    ...

此 CR 应与 Keycloak 部署 CR 在同一命名空间中创建,并在字段 keycloakCRName 中定义。realm 字段接受完整的 RealmRepresentation

获取 RealmRepresentation 的推荐方法是利用导出功能 导入和导出 Realm

  1. 将 Realm 导出到单个文件。

  2. 将 JSON 文件转换为 YAML。

  3. 复制并粘贴获得的 YAML 文件作为 realm 键的主体,确保缩进正确。

应用 Realm 导入 CR

使用 kubectl 在正确的集群命名空间中创建 CR

创建 YAML 文件 example-realm-import.yaml

apiVersion: k8s.keycloak.org/v2alpha1
kind: KeycloakRealmImport
metadata:
  name: my-realm-kc
spec:
  keycloakCRName: <name of the keycloak CR>
  realm:
    id: example-realm
    realm: example-realm
    displayName: ExampleRealm
    enabled: true

应用更改

kubectl apply -f example-realm-import.yaml

要检查正在运行的导入状态,请输入以下命令

kubectl get keycloakrealmimports/my-realm-kc -o go-template='{{range .status.conditions}}CONDITION: {{.type}}{{"\n"}}  STATUS: {{.status}}{{"\n"}}  MESSAGE: {{.message}}{{"\n"}}{{end}}'

当导入成功完成时,输出将如下例所示

CONDITION: Done
  STATUS: true
  MESSAGE:
CONDITION: Started
  STATUS: false
  MESSAGE:
CONDITION: HasErrors
  STATUS: false
  MESSAGE:

占位符

导入支持引用环境变量的占位符,更多信息请参阅 导入和导出 RealmKeycloakRealmImport CR 允许您通过 spec.placeholders 节利用此功能,例如

apiVersion: k8s.keycloak.org/v2alpha1
kind: KeycloakRealmImport
metadata:
  name: my-realm-kc
spec:
  keycloakCRName: <name of the keycloak CR>
  placeholders:
    ENV_KEY:
      secret:
        name: SECRET_NAME
        key: SECRET_KEY
    ...

在上面的示例中,将启用占位符替换,并将从 Secret SECRET_NAMESECRET_KEY 键的值创建一个键为 ENV_KEY 的环境变量。目前仅支持 Secret,并且它们必须与 Keycloak CR 位于同一命名空间中。

本页内容