2017-07-27 70 views
1

我使用这个Dockerfile将它部署在openshift上。 - https://github.com/sclorg/postgresql-container/tree/master/9.5如何在uid中使用openshift安装秘密:正确设置gid

它正常工作,直到我启用ssl=on,并通过注入量的server.crtserver.key文件到Postgres吊舱安装选项。

秘密就像

$ oc secret new postgres-secrets \ 
    server.key=postgres/server.key \ 
    server.crt=postgres/server.crt \ 
    root-ca.crt=ca-cert 

音量被创建为波纹管和附连到postgres的给定BuidlConfig创建。

$ oc volume dc/postgres \ 
    --add --type=secret \ 
    --secret-name=postgres-secrets \ 
    --default-mode=0600 \ 
-m /var/lib/pgdata/data/secrets/secrets/ 

问题是secret.crtsecret.key文件的安装文件被root用户拥有,但postgres期待它应该由postgres用户所拥有。因为postgres服务器不会出现并说这个错误。

等待服务器启动.... FATAL:无法加载服务器 证书文件“/var/lib/pgdata/data/secrets/secrets/server.crt”: 权限被拒绝停止等待pg_ctl:无法启动服务器

如何插入卷并更新其中的文件uid:guid

回答

3

它看起来这是不平凡的,因为它需要设置卷安全上下文所以在群的所有容器都为某个用户https://docs.openshift.com/enterprise/3.1/install_config/persistent_storage/pod_security_context.html

在Kubernetes项目运行,这一点是下仍讨论https://github.com/kubernetes/kubernetes/issues/2630,但似乎你可能不得不使用安全上下文和PodSecurityPolicies,以使其工作。

我认为最简单的选择(不使用上述)将使用容器入口点,在实际执行PostgreSQL之前,它将文件传递给适当的用户(本例中为postgres)。

+0

感谢您的回答。其实我也是在想你的第二个解决方法。容器入口点现在更新为通过openshit(通过ENV)装载秘密文件并将其复制到另一个位置,因此文件权限问题不会再出现。很好,您指出了SCC方法,需要阅读更多内容。谢谢哈维尔。 –