我正在使用 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
?
1 回答
看起来这不是微不足道的,因为它需要设置卷安全上下文,以便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之前,它会将文件chowns给适当的用户(在这种情况下为postgres) .