2017-07-27 7 views
1

私はこれを使ってopenshiftに展開します。Dockerfile - https://github.com/sclorg/postgresql-container/tree/master/9.5uid:gidが正しく設定されたopensshiftでマウントする方法

それは私がssl=onを有効にしてマウントオプションをボリュームを経由してPostgresのポッドにserver.crtserver.keyファイルを注入されるまで、正常に動作します。

秘密が

$ 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

それはポッド内のすべてのコンテナは、特定のユーザーKubernetes・プロジェクトでhttps://docs.openshift.com/enterprise/3.1/install_config/persistent_storage/pod_security_context.html

として実行されているので、ボリュームのセキュリティコンテキストを設定する必要があり、これは、簡単ではありませんように見え、これは下にまだあるものですディスカッションhttps://github.com/kubernetes/kubernetes/issues/2630が、セキュリティコンテキストとPodSecurityPoliciesを使用する必要があるようです。

私は、PostgreSQLを実際に実行する前に適切なユーザ(この場合はpostgres)にファイルをダウンロードするコンテナエントリポイントを使用するのが最も簡単なオプションだと思います。

+0

答えをありがとう。実際には、2番目の回避策と同じ方法を考えていました。コンテナーのエントリポイントが更新され、openshit(ENV経由)でマウントされた秘密ファイルを取得し、別の場所にコピーするため、ファイルのアクセス権の問題は再び発生しません。あなたがSCCの方法を指摘したことをよく知って、それをもっと読む必要があります。 Javierに感謝します。 –

関連する問題