如何在多租户 (Docker) 容器环境中提供 SSH 访问

如何在多租户 (Docker) 容器环境中提供 SSH 访问

我运行一个服务器,上面有 300 个 Web 应用,用于不同的客户端。每个 Web 应用都有自己的 Nginx/Apache 容器和自己的 PHP-FPM 应用程序容器。所有容器都位于 HAProxy 后面,HAProxy 执行域虚拟主机公共 IP(所有容器共享一个 IP)代理到每个用户的 Apache/Nginx 容器。

用户需要通过 SSH 访问他们的容器,以便他们可以通过 SFTP 管理他们的文件,并通过 bash、php、git 等在 shell 上运行命令(php-fpm 容器已安装 git)。

如何为 300 多个应用程序容器提供远程 ssh 访问权限?理想情况下,集中式 sshd 容器将根据用户名附加另一个容器的 shell - 这可能吗?

答案1

单个 SSH 容器方法将依赖于将所有数据卷预先安装到单个 SSH 容器上。因此,为了保持用户分离,您需要依赖来自不同用户的数据卷来拥有不同的 UID 所有者,这可能意味着每个服务容器都需要在内部使用不同的 UID 运行 - 而这将抵消您在名称空间容器中运行所获得的大部分简单性优势……

运行多个 SSHd 实例(在服务容器内或作为 sidecar 容器)的替代方案对于扩展来说会带来问题。

另一种选择是使用端口映射 - 为每个客户端分配一个端口用于其 SSH 访问,并设置 SystemD 套接字服务以根据需要为每个客户套接字激活 SSHd 服务。您可以将每个端口直接暴露在防火墙之外,并教客户在其 SSH 配置中使用非标准端口(不推荐) - 或者使用 HAProxy 通过 TLS 使用 SNI 和域名到端口映射来前端 SSH,以提供基于域名的套接字激活 SSH 服务器访问权限。这篇文章可能会让你开始。这仍然需要您向客户传授有关 SSH over TLS 的知识,但这可能比在客户脑海中维护域名端口映射更为明智……

相关内容