我使用此Dockerfile
在openshift上部署它。 - https://github.com/sclorg/postgresql-container/tree/master/9.5
一切正常,直到我启用ssl=on
并通过卷装选项将server.crt
和server.key
文件注入postgres pod。
秘密就像
一样创建$ oc secret new postgres-secrets \
server.key=postgres/server.key \
server.crt=postgres/server.crt \
root-ca.crt=ca-cert
音量创建方式如下并附加到给定的BuidlConfig
postgres。
$ oc volume dc/postgres \
--add --type=secret \
--secret-name=postgres-secrets \
--default-mode=0600 \
-m /var/lib/pgdata/data/secrets/secrets/
问题是secret.crt
和secret.key
文件的已装载文件归root
用户所有,但postgres
期望它应由postgres
用户拥有。因此,postgres服务器不会出现并说出这个错误。
等待服务器启动....致命:无法加载服务器 证书文件" /var/lib/pgdata/data/secrets/secrets/server.crt": 权限被拒绝停止等待pg_ctl:无法启动服务器
我们如何插入卷并更新其中的uid:guid
文件?
答案 0 :(得分:3)
看起来这并非易事,因为它需要设置卷安全上下文,以便pod中的所有容器都以特定用户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)。