0

正常な動作 (gosu を使用しない場合)

gosu環境変数が設定されている場合はユーティリティを使用して特定のユーザーとして指定されたコマンドを実行するか、ルートとして実行するエントリポイント スクリプトを呼び出すコンテナーがあります。

entrypoint.sh

if [ -n "$RUNAS_USER" ]; then
    exec /usr/local/bin/gosu $RUNAS_USER "$@"
else
    exec "$@"
fi

RUNAS_USERenv var が提供されていない場合(つまりexec "$@"、 が実行され、コンテナーが root として実行されている場合)、コンテナーにログインして run を実行するとss -nltp、プロセスがポートに正しく関連付けられていることがわかります (最後の列を見てください)。

6e9b3af868c3:/ # ss -nltp
State                                    Recv-Q                                   Send-Q                                                                     Local Address:Port                                                                       Peer Address:Port
LISTEN                                   0                                        50                                                                               0.0.0.0:39995                                                                           0.0.0.0:*                                       users:(("java",pid=7,fd=187))
LISTEN                                   0                                        128                                                                              0.0.0.0:8076                                                                            0.0.0.0:*                                       users:(("java",pid=7,fd=205))
LISTEN                                   0                                        128                                                                              0.0.0.0:8080                                                                            0.0.0.0:*                                       users:(("java",pid=7,fd=204))
LISTEN                                   0                                        50                                                                               0.0.0.0:9010                                                                            0.0.0.0:*                                       users:(("java",pid=7,fd=186))

予期しない動作 (gosu を使用)

RUNAS_USERenv var が提供されている場合 (つまり、exec /usr/local/bin/gosu $RUNAS_USER "$@"が実行され、コンテナが特定のユーザーとして実行されている場合)、コンテナにログインして run を実行するss -nltpと、ポートはどのプロセスにも関連付けられなくなります (つまりusers:(("java",pid=7,fd=187))、からの出力に etc エントリはありません) ss -nltp):


b13a253cd5bf:/ # ss -nltp
State                                             Recv-Q                                            Send-Q                                                                                        Local Address:Port                                                                                          Peer Address:Port
LISTEN                                            0                                                 128                                                                                                 0.0.0.0:8076                                                                                               0.0.0.0:*
LISTEN                                            0                                                 128                                                                                                 0.0.0.0:8080                                                                                               0.0.0.0:*
LISTEN                                            0                                                 50                                                                                                  0.0.0.0:9010                                                                                               0.0.0.0:*
LISTEN                                            0                                                 50                                                                                                  0.0.0.0:46613       

問題

コンテナーがポートを基になるプロセスに関連付けることに成功すると、ポートはネットワーク上で外部から見えるようになります。ただし、使用時の上記の問題gosuは、私の K8s デプロイメントが、nodeport サービスのポッドに外部からルーティング可能なポートをセットアップしなかったことを意味します。

4

0 に答える 0