如何在KeyCloak-Server-Distribution

时间:2018-08-14 07:54:02

标签: logging jboss openshift wildfly keycloak

背景
该计划是为我们的业务部署最新版本的KeyCloak。我们使用OpenShift Online托管类似服务。 OpenShift-Online中的Pod(容器)没有root特权,这意味着jboss-dockerfiles/keycloak的标准实现在启动时失败,试图在未经许可的情况下写入日志文件。 一种解决方案是授予pod的写权限like so。但是,在OpenShift Online中这是不可能的,因为我们不拥有集群,而只有我们工作的项目。

实际问题
这个想法是在运行KeyCloak的Jboss中禁用相关的日志记录配置,以便将日志不写入文件中。由于日志已写入控制台,因此OpenShift仍会收集日志,因此我们仍然不需要将日志记录到文件中。

研究了keycloak / keycloak和jboss-dockerfiles / keycloak如何协同工作之后,我在服务器standalone.xml文件中找到了相关的配置行。我将以下行添加到项目的Dockerfile中,以从服务器中删除PeriodicRotatingFileHandler:

    sed -i -e '/<periodic-rotating-file-handler/,/<\/periodic-rotating-file-handler>/d' /opt/jboss/keycloak/standalone/configuration/standalone.xml

这确实有效-当我在创建后使用docker run --rm -it --entrypoint=/bin/bash <imageId>输入容器文件系统并检查standalone.xml时,将PeriodicRotatingFileHandler配置为“ FILE”的相关行已消失。

当我在OpenShift Online中启动新容器时,部署仍然失败,但是,因为服务器仍尝试启动记录器:

Cannot start embedded server: Failed to instantiate class "org.jboss.logmanager.handlers.PeriodicRotatingFileHandler" for handler "FILE": java.lang.reflect.InvocationTargetException: /opt/jboss/keycloak/standalone/log/server.log (Permission denied) 
[...]  
java.lang.IllegalArgumentException: Failed to instantiate class "org.jboss.logmanager.handlers.PeriodicRotatingFileHandler" for handler "FILE"

尽管服务器不再在standalone.xml中声明,为什么服务器仍在启动该记录器?是否有第二个配置文件代替?有没有办法强制对该处理程序进行覆盖?

1 个答案:

答案 0 :(得分:1)

对记录器的原始问题并不是真正的答案,但是可以采用的解决方法: 使用映像jboss/keycloak-openshiftGitHub),可以在OpenShift Online上运行KeyCloak,而无需进一步配置日志记录。还有一些其他配置需要完成:

  1. 在部署的环境变量中设置PROXY_ADDRESS_FORWARDING = true,以使KeyCloak侦听转发标头(自KeyCloak 4.0.0起)
  2. 根据部署.yaml中的Dockerfile图像设置docker run args:

[...]
     容器:
        -args:
        -start-keycloak.sh
        -'-b 0.0.0.0'
[...]