{{< details >}}

  • Tier: 基础版,专业版,旗舰版
  • Offering: 私有化部署

{{< /details >}}

{{< history >}}

  • 在极狐GitLab 15.0 中,为私有化部署所禁用。

{{< /history >}}

{{< alert type=”warning” >}}

此功能在 极狐GitLab 14.5 中已弃用。

{{< /alert >}}

{{< alert type=”flag” >}}

在 极狐GitLab 私有化部署中,默认情况下此功能不可用。要使其可用,管理员可以启用名为 certificate_based_clusters 的功能标志。

{{< /alert >}}

  • 阅读更多关于通过 Web IDE 访问的非弃用网页终端的信息。
  • 阅读更多关于从正在运行的 CI 任务中访问的非弃用网页终端的信息。

随着极狐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/HOSTPORT 是已配置的 listen_address
  • 每个创建的会话 URL 都有一个需要发送的授权头,以建立 wss 连接。
  • 会话 URL 不以任何方式向用户公开。极狐GitLab 内部保存所有状态并相应地进行代理。

启用和禁用终端支持

{{< alert type=”note” >}}

AWS 经典负载均衡器不支持网页 sockets。如果您希望网页终端正常工作,请使用 AWS 网络负载均衡器。

{{< /alert >}}

由于网页终端使用 WebSockets,Workhorse 前面的每个 HTTP/HTTPS 反向代理都必须配置为将 ConnectionUpgrade 标头传递给链中的下一个代理。极狐GitLab 默认配置为这样做。

但是,如果您在 极狐GitLab 前运行负载均衡器,您可能需要对配置进行一些更改。这些指南记录了一些流行的反向代理的必要步骤:

  • Apache
  • NGINX
  • HAProxy
  • Varnish

Workhorse 不允许 WebSocket 请求通过非 WebSocket 端点,因此在全局启用对这些标头的支持是安全的。如果您更喜欢一组更严格的规则,可以将其限制为以 /terminal.ws 结尾的 URLs。此方法可能仍会导致一些误报。

如果您自行编译安装,您可能需要对配置进行一些更改。阅读从源代码升级基础版和企业版以获取更多详细信息。

要在 极狐GitLab 中禁用网页终端支持,请停止在链中的第一个 HTTP 反向代理中传递 ConnectionUpgrade hop-by-hop 标头。对于大多数用户而言,这就是与 Linux 软件包安装捆绑的 NGINX 服务器。在这种情况下,您需要:

  • 找到 gitlab.rb 文件中的 nginx['proxy_set_headers'] 部分
  • 确保整个块未被注释掉,然后注释掉或删除 ConnectionUpgrade 行。

对于您自己的负载均衡器,只需逆转上述指南推荐的配置更改。

当这些标头没有通过时,Workhorse 会返回一个 400 Bad Request 响应给试图使用网页终端的用户。反过来,他们会收到一个 连接失败 消息。

限制 WebSocket 连接时间

默认情况下,终端会话不会过期。要限制您的极狐GitLab 实例中的终端会话生命周期:

  1. 在左侧边栏底部,选择 管理员
  2. 选择 设置 > 网页终端
  3. 设置一个 最大会话时间