{{< details >}}
- Tier: 基础版,专业版,旗舰版
- Offering: 私有化部署
{{< /details >}}
{{< history >}}
- 在极狐GitLab 15.0 中,为私有化部署所禁用。
{{< /history >}}
{{< alert type=”warning” >}}
此功能在 极狐GitLab 14.5 中已弃用。
{{< /alert >}}
{{< alert type=”flag” >}}
在 极狐GitLab 私有化部署中,默认情况下此功能不可用。要使其可用,管理员可以启用名为 certificate_based_clusters
的功能标志。
{{< /alert >}}
随着极狐GitLab Kubernetes 集成的引入,极狐GitLab 可以存储和使用 Kubernetes 集群的凭据。极狐GitLab 使用这些凭据为环境提供网页终端的访问。
{{< alert type=”note” >}}
只有至少拥有项目维护者角色的用户才能访问网页终端。
{{< /alert >}}
工作原理
简而言之:
- 极狐GitLab 依赖用户提供自己的 Kubernetes 凭据,并在部署时适当地标记他们创建的 Pod。
- 当用户访问环境的终端页面时,他们会收到一个 JavaScript 应用程序,该应用程序打开一个回到极狐GitLab 的 WebSocket 连接。
- WebSocket 由 Workhorse 处理,而不是 Rails 应用程序服务器。
- Workhorse 查询 Rails 获取连接详细信息和用户权限。Rails 使用 Sidekiq 在后台查询 Kubernetes。
- Workhorse 在用户的浏览器和 Kubernetes API 之间充当代理服务器,在两者之间传递 WebSocket 帧。
- Workhorse 定期轮询 Rails,如果用户不再有权限访问终端,或连接详细信息已更改,则终止 WebSocket 连接。
安全性
极狐GitLab 和 极狐GitLab Runner 采取了一些预防措施,以确保交互式网页终端数据在它们之间加密,并通过授权保护一切。下面对此进行了更详细的描述。
- 除非配置了
[session_server]
,否则交互式网页终端将完全禁用。 - 每次 runner 启动时,它都会生成一个用于
wss
(Web Socket Secure)连接的x509
证书。 - 对于每个创建的任务,会生成一个随机 URL,该 URL 在任务结束时被丢弃。该 URL 用于建立网页 socket 连接。会话的 URL 格式为
(IP|HOST):PORT/session/$SOME_HASH
,其中IP/HOST
和PORT
是已配置的listen_address
。 - 每个创建的会话 URL 都有一个需要发送的授权头,以建立
wss
连接。 - 会话 URL 不以任何方式向用户公开。极狐GitLab 内部保存所有状态并相应地进行代理。
启用和禁用终端支持
{{< alert type=”note” >}}
AWS 经典负载均衡器不支持网页 sockets。如果您希望网页终端正常工作,请使用 AWS 网络负载均衡器。
{{< /alert >}}
由于网页终端使用 WebSockets,Workhorse 前面的每个 HTTP/HTTPS 反向代理都必须配置为将 Connection
和 Upgrade
标头传递给链中的下一个代理。极狐GitLab 默认配置为这样做。
但是,如果您在 极狐GitLab 前运行负载均衡器,您可能需要对配置进行一些更改。这些指南记录了一些流行的反向代理的必要步骤:
- Apache
- NGINX
- HAProxy
- Varnish
Workhorse 不允许 WebSocket 请求通过非 WebSocket 端点,因此在全局启用对这些标头的支持是安全的。如果您更喜欢一组更严格的规则,可以将其限制为以 /terminal.ws
结尾的 URLs。此方法可能仍会导致一些误报。
如果您自行编译安装,您可能需要对配置进行一些更改。阅读从源代码升级基础版和企业版以获取更多详细信息。
要在 极狐GitLab 中禁用网页终端支持,请停止在链中的第一个 HTTP 反向代理中传递 Connection
和 Upgrade
hop-by-hop 标头。对于大多数用户而言,这就是与 Linux 软件包安装捆绑的 NGINX 服务器。在这种情况下,您需要:
- 找到
gitlab.rb
文件中的nginx['proxy_set_headers']
部分 - 确保整个块未被注释掉,然后注释掉或删除
Connection
和Upgrade
行。
对于您自己的负载均衡器,只需逆转上述指南推荐的配置更改。
当这些标头没有通过时,Workhorse 会返回一个 400 Bad Request
响应给试图使用网页终端的用户。反过来,他们会收到一个 连接失败
消息。
限制 WebSocket 连接时间
默认情况下,终端会话不会过期。要限制您的极狐GitLab 实例中的终端会话生命周期:
- 在左侧边栏底部,选择 管理员。
- 选择 设置 > 网页终端。
- 设置一个
最大会话时间
。