从 Red Hat Single Sign-On 迁移到 Keycloak
本指南介绍如何将运行在 OpenShift 上的 Red Hat Single Sign-On (RH-SSO) 7.x 的身份数据迁移到运行在 Kubernetes 上的 Alauda Build of Keycloak。
概述
Red Hat Single Sign-On (RH-SSO) 7.x 是 Red Hat 基于 Keycloak Community Edition 开发的商业发行版。两者在核心数据模型和存储结构上完全兼容。
本次迁移采用官方推荐的导出/导入机制,能够完整迁移以下数据:
- Realm 配置
- 用户(包括凭证和状态)
- Realm 角色和客户端角色
- 客户端及其权限映射
- 复合角色和内置管理权限
迁移流程
前提条件
- 具有通过
oc rsh访问 OpenShift 上 RH-SSO Pod 的权限。 - 运行中的 Kubernetes 上 Alauda Build of Keycloak 实例。
- 对目标 Kubernetes 集群的
kubectl访问权限。 - 本地机器上有足够的磁盘空间存放导出的 JSON 文件。
第 1 步:从 RH-SSO 导出数据
服务影响
导出命令会在偏移端口启动一个独立的辅助服务器进程。该操作不会中断正在运行的 RH-SSO 服务,但建议在低流量时段执行以降低风险。
连接到 RH-SSO Pod 并运行导出命令:
等待导出完成。进程会打印日志输出后退出。导出文件保存在 Pod 内的 /tmp/sso-export.json。
第 2 步:复制导出文件
将导出文件从 RH-SSO Pod 复制到本地机器,再复制到 Keycloak Pod:
第 3 步:导入数据到 Keycloak
连接到 Keycloak Pod 并运行导入命令:
覆盖模式
--override true 参数会替换目标 Keycloak 实例中同名的任何现有 Realm。如果希望在存在冲突 Realm 时导入失败以保留当前数据,请移除此参数。
第 4 步:验证迁移
导入完成后,验证所有数据是否正确迁移:
- 登录 Keycloak 管理控制台。
- 确认导入的 Realm 出现在 Realm 下拉列表中。
- 验证每个导入的 Realm 中:
-
用户数量与源 RH-SSO 一致
-
客户端配置完整
-
角色分配正确
-
复合角色和权限映射保持不变
-
注意事项
- 导入成功指示:执行导入命令后,日志会打印
Realm '<realm-name>' imported以确认导入成功。最后出现的ERROR: Address already in use是导入过程中的端口冲突,不影响数据导入结果。 - 凭证兼容性:RH-SSO 7.x 与 Keycloak 26.x 使用兼容的凭证存储格式。用户密码会被迁移且导入后仍然有效。
- 客户端密钥:客户端密钥包含在导出文件中,导入后请确认其是否被保留。
- 覆盖模式:
--override true参数会替换同名 Realm。若希望在存在冲突 Realm 时导入失败,请移除此参数。