2017-07-27 30 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方法,需要閱讀更多內容。謝謝哈維爾。 –

相關問題