Export/Import Kubernetes 中 Keycloak 数据的最佳实践

Best practices of Export/Import Keycloak data in Kubernetes

我正在尝试了解 keycloak 版本 3.3.0.CR1 中的 import/export 最佳实践。正如我在 keycloak 官方页面 import/export 中看到的那样,描述了他们的策略。这里是导出到单个文件的示例 json。转到 /keycloak/bin 文件夹和 运行 这个:

./standalone.sh -Dkeycloak.migration.action=export -Dkeycloak.migration.provider=singleFile -Dkeycloak.migration.file=keycloak-export.json

我登录了 k8s pod。在 运行 这个命令之后我得到错误:

12:23:32,045 ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) WFLYCTL0013: Operation ("add") failed - address: ([
    ("core-service" => "management"),
    ("management-interface" => "http-interface")
]) - failure description: {
    "WFLYCTL0080: Failed services" => {"org.wildfly.management.http.extensible" => "java.net.BindException: Address already in use /127.0.0.1:9990"},
    "WFLYCTL0288: One or more services were unable to start due to one or more indirect dependencies not being available." => {
        "Services that were unable to start:" => ["org.wildfly.management.http.extensible.shutdown"],
        "Services that may be the cause:" => ["jboss.remoting.remotingConnectorInfoService.http-remoting-connector"]
    }
}

如我所见,因为要将Keycloak 服务器运行 放在同一端口所在的地方,我运行 备份脚本。这里 helm/keycloak values.yml:

Service:
  Name: keycloak
  Port: 8080
  Type: ClusterIP

Deployment:
  Image: jboss/keycloak
  ImageTag: 2.5.1.Final
  ImagePullPolicy: IfNotPresent
  ContainerPort: 8080
  KeycloakUser: Admin
  KeycloakPassword: Admin

所以服务器应该在我们 运行 这个脚本之前停止?我无法停止 pod 内的 keycloak 进程,因为入口将关闭 pod 并创建新的 pod。 对于 export/import(backup/restore) 数据的任何其他方式有什么建议吗?或者我遗漏了什么?

P.S。 我什至尝试了 UI import/export。导出效果很好,我看到了所有数据。但是 import 工作了一半。他给我带来了所有 "Clients",但没有带来我的 "Realm" 和 "User Federation"。可能吗?

基本上,您只需在与主实例不同的端口上启动导出 Keycloak 实例即可。我刚才使用了这样的东西:

bin/standalone.sh -Dkeycloak.migration.action=export -Dkeycloak.migration.provider=singleFile -Dkeycloak.migration.file=keycloak-export.json -Djboss.http.port=8888 -Djboss.https.port=9999 -Djboss.management.http.port=7777

重要的部分是所有端口。如果您收到更多错误消息,您可能需要添加更多属性(grep port standalone/configuration/standalone.xml 是您查找 属性 名称的朋友),但最后,所有错误消息都会停止,您会看到此消息:

09:15:26,550 INFO [org.keycloak.exportimport.singlefile.SingleFileExportProvider] (ServerService Thread Pool -- 52) Exporting model into file /opt/jboss/keycloak/keycloak-export.json [...] 09:15:29,565 INFO [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: Keycloak 3.2.0.Final (WildFly Core 2.0.10.Final) started in 12156ms - Started 444 of 818 services (558 services are lazy, passive or on-demand)

现在您可以使用 Ctrl-C 停止服务器,退出容器并使用 [=13= 复制导出文件].