Keycloak 领域导入

如何使用操作符执行自动化的 Keycloak 领域导入

导入 Keycloak 领域

使用 Keycloak 操作符,您可以对 Keycloak 部署执行领域导入。

  • 如果 Keycloak 中已存在具有相同名称的领域,则不会覆盖它。

  • 领域导入 CR 只支持创建新领域,不支持更新或删除现有领域。对 Keycloak 上直接执行的领域更改不会同步回 CR。

创建领域导入自定义资源

以下是一个领域导入自定义资源 (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 的推荐方法是利用导出功能 导入和导出领域

  1. 将领域导出到单个文件。

  2. 将 JSON 文件转换为 YAML。

  3. 将获得的 YAML 文件复制并粘贴为 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:

占位符

导入支持引用环境变量的占位符,有关更多信息,请参见 导入和导出领域KeycloakRealmImport 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_KEY 的 Secret SECRET_NAME 的值创建具有密钥 ENV_KEY 的环境变量。目前仅支持 Secret,并且它们必须位于与 Keycloak CR 相同的命名空间中。

在本页上