Web 终端(已废弃)
- 废弃于 14.5 版本。
- 在私有化部署版上禁用于 15.0 版本。
certificate_based_clusters
。- 阅读有关未弃用的可通过 Web IDE 访问的 Web 终端的更多信息。
- 阅读有关未弃用的可从正在运行的 CI 作业访问的 Web 终端的更多信息。
随着 Kubernetes 集成的引入,极狐GitLab 可以存储和使用 Kubernetes 集群的凭据。极狐GitLab 使用这些凭据提供对环境的 web 终端的访问。
工作原理
可以在本文档中找到有关 Web 终端架构及其工作原理的详细概述。 简单来说:
- 极狐GitLab 依赖用户提供他们自己的 Kubernetes 凭证,并在部署时适当地标记他们创建的 Pod。
- 当用户导航到某个环境的终端页面时,会为他们提供一个 JavaScript 应用程序,该应用程序打开一个返回到极狐GitLab 的 WebSocket 连接。
- WebSocket 在 Workhorse 中处理,而不是在 Rails 应用程序服务器中处理。
- Workhorse 向 Rails 查询连接细节和用户权限。 Rails 使用 Sidekiq 在后台向 Kubernetes 查询它们。
- Workhorse 充当用户浏览器和 Kubernetes API 之间的代理服务器,在两者之间传递 WebSocket 帧。
- Workhorse 定期轮询 Rails,如果用户不再有权访问终端,或者连接详细信息已更改,则终止 WebSocket 连接。
安全
极狐GitLab 和极狐GitLab Runner 采取了一些预防措施,以保持它们之间的交互式 Web 终端数据加密,并且所有内容都受到授权保护。
- 除非配置了
[session_server]
,否则交互式 Web 终端将完全禁用。 - 每次运行程序启动时,它都会生成一个
x509
证书,用于wss
(Web Socket Secure)连接。 - 对于每个创建的作业,都会生成一个随机 URL,该 URL 在作业结束时被丢弃。此 URL 用于建立 Web Socket 连接。会话的 URL 格式为
(IP|HOST):PORT/session/$SOME_HASH
,其中IP/HOST
和PORT
是配置的listen_address
。 - 创建的每个会话 URL 都有一个需要发送的授权 header,以建立
wss
连接。 - 会话 URL 不会以任何方式向用户公开。极狐GitLab 在内部保存所有状态并相应地代理。
启用和禁用终端支持
由于 Web 终端使用 WebSockets,Workhorse 前面的每个 HTTP/HTTPS 反向代理都必须配置为将 Connection
和 Upgrade
header 传递到链中的下一个 header。极狐GitLab 默认配置为这样做。
但是,如果您在极狐GitLab 前面运行负载均衡器,您可能需要对配置进行一些更改。这些指南记录了选择流行的反向代理的必要步骤:
Workhorse 不允许 WebSocket 请求通过非 WebSocket 端点,因此全局启用对这些标头的支持是安全的。如果您喜欢更窄的规则集,可以将其限制为以 /terminal.ws
结尾的 URL。
这种方法可能仍会导致一些误报。
要在极狐GitLab 中禁用 Web 终端支持,请停止在链中的首个 HTTP 反向代理中传递 Connection
和 Upgrade
hop-by-hop headers。对于大多数用户来说,这是与 Omnibus GitLab 捆绑在一起的 NGINX 服务器,在这种情况下,您需要:
- 找到
gitlab.rb
文件的nginx['proxy_set_headers']
部分 - 确保整个块未注释,然后注释掉或删除
Connection
和Upgrade
行。
对于您自己的负载均衡器,只需反转上述指南推荐的配置更改即可。
当这些 headers 未通过时,Workhorse 会向尝试使用 Web 终端的用户返回 400 Bad Request
响应。反过来,他们会收到 Connection failed
消息。
限制 WebSocket 连接时间
默认情况下,终端会话不会过期。要限制极狐GitLab 实例中的终端会话生命周期:
- 在顶部栏上,选择 主菜单 > 管理员。
- 选择设置 > Web 终端。
- 设置最大会话时间。