微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么在使用 gosu 时进程不会与端口相关联?

如何解决为什么在使用 gosu 时进程不会与端口相关联?

正常行为(不使用 gosu)

我有一个调用入口点脚本的容器,该脚本使用 gosu 实用程序在设置了 env var 时以特定用户身份运行指定命令,否则以 root 身份运行:

入口点.sh

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

当没有提供 RUNAS_USER env var 时(即 exec "$@" 被执行并且容器以 root 身份运行),当我登录到容器并运行 {{1 }},我可以看到进程与端口正确关联(查看最后一列):

ss -nltp

意外行为(使用 gosu)

当提供 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",fd=205)) LISTEN 0 128 0.0.0.0:8080 0.0.0.0:* users:(("java",fd=204)) LISTEN 0 50 0.0.0.0:9010 0.0.0.0:* users:(("java",fd=186)) env var 时(即执行 RUNAS_USER 并且容器以特定用户身份运行),当我登录容器并运行 exec /usr/local/bin/gosu $RUNAS_USER "$@" 时,端口不再与任何进程相关联(即 ss -nltp输出中没有 users:(("java",fd=187)) 等条目):

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 时的上述问题意味着我的 K8s 部署没有设置可从外部路由到我的 nodeport 服务的 pod 的端口。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。