Kubernetes中导入导出
问题描述#
我的 keycloak 集群是跑在 Kubernetes 上,初始化了一些配置想完整的导出来。
比如按照官方的指导文档,在 keycloak pod 内用下面的命令导出。
出现类似下面错误。
问题原因#
根据错误提示,端口被占用,原因是 keycloak 导出脚本也会启动 Wildfly 服务,默认的 http、https、management 等的端口已经被占用。
解决方案#
命令行增加环境变量-Djboss.socket.binding.port-offset=100
,指定不同的服务端口进行导出。
导出成功后,Ctrl-C 停止导出的进程,再通过 kubectl cp
将文件复制出来。
另外注意导出的文件我放在了 /tmp
里,因为 pod 里默认的用户没有写权限。
如果导出的配置比较复杂,比如包含授权策略,导入时还可能会出现以下错误。
解决方案,在导入命令里再追加一个环境变量。
注意事项#
- 管理控制台也能导入导出,不过导出的不全,比如密码密钥肯定时无法导出的。
- 导出的文件是普通的 json 文件,可以按照他现有的格式根据需要自己去写,不必每次改动都导出一次。
- Realm 配置、用户、Client 都可以通过 kcadm.sh 分别导入,所以如果有一些特殊定制,可以考虑将配置分开后独立导入。