多节点极狐GitLab 的负载均衡

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

在一个多节点的极狐GitLab 配置中,你需要一个负载均衡器来将流量路由到应用服务器。关于使用哪种负载均衡器或具体配置的细节超出了极狐GitLab 文档的范围。我们希望,如果你正在管理像极狐GitLab 这样的高可用系统,你已经有了一个负载均衡器的选择。一些示例包括 HAProxy(开源)、F5 Big-IP LTM 和 Citrix NetScaler。本文档概述了与极狐GitLab 一起使用的端口和协议。

SSL#

你想如何在你的多节点环境中处理 SSL?有几种不同的选项:

  • 每个应用节点终止 SSL
  • 负载均衡器终止 SSL,负载均衡器和应用节点之间的通信不安全
  • 负载均衡器终止 SSL,负载均衡器和应用节点之间的通信是安全的

应用节点终止 SSL#

将你的负载均衡器配置为以 'TCP' 而不是 'HTTP(S)' 协议通过 443 端口连接。这将连接传递给应用节点的 NGINX 服务不变。NGINX 拥有 SSL 证书并监听 443 端口。

查看 HTTPS 文档 以了解管理 SSL 证书和配置 NGINX 的详细信息。

负载均衡器终止 SSL 而没有后端 SSL#

将你的负载均衡器配置为使用 HTTP(S) 协议而不是 TCP。负载均衡器负责管理 SSL 证书和终止 SSL。

由于负载均衡器和极狐GitLab 之间的通信不安全,因此需要一些额外的配置。查看 代理 SSL 文档 以获取详细信息。

负载均衡器终止 SSL 并具有后端 SSL#

将你的负载均衡器配置为使用 HTTP(S) 协议而不是 TCP。负载均衡器负责管理终端用户看到的 SSL 证书。

在这种情况下,负载均衡器和 NGINX 之间的流量是安全的。由于连接是全程安全的,因此无需为代理 SSL 添加配置。但是,必须在极狐GitLab 中添加配置以配置 SSL 证书。查看 HTTPS 文档 以了解管理 SSL 证书和配置 NGINX 的详细信息。

端口#

基本端口#

LB 端口后端端口协议
8080HTTP (1)
443443TCP 或 HTTPS (1) (2)
2222TCP
  • (1): Web 终端 支持要求你的负载均衡器正确处理 WebSocket 连接。使用 HTTP 或 HTTPS 代理时,这意味着你的负载均衡器必须配置为通过 ConnectionUpgrade hop-by-hop 头。查看 Web 终端 集成指南以获取更多详细信息。
  • (2): 使用 443 端口的 HTTPS 协议时,你必须向负载均衡器添加 SSL 证书。如果你希望在极狐GitLab 应用服务器终止 SSL,请使用 TCP 协议。

极狐GitLab Pages 端口#

如果你使用极狐GitLab Pages 并支持自定义域名,则需要一些额外的端口配置。极狐GitLab Pages 需要一个单独的虚拟 IP 地址。将 DNS 配置指向 /etc/gitlab/gitlab.rb 中的 pages_external_url 到新的虚拟 IP 地址。查看 极狐GitLab Pages 文档 以获取更多信息。

LB 端口后端端口协议
80变化 (1)HTTP
443变化 (1)TCP (2)
  • (1): 极狐GitLab Pages 的后端端口取决于 gitlab_pages['external_http']gitlab_pages['external_https'] 设置。查看 极狐GitLab Pages 文档 以获取更多详细信息。
  • (2): 极狐GitLab Pages 的 443 端口应始终使用 TCP 协议。用户可以配置自定义域名和自定义 SSL,如果 SSL 在负载均衡器终止则无法实现。

替代 SSH 端口#

一些组织有政策反对打开 SSH 端口 22。在这种情况下,配置允许用户在 443 端口上使用 SSH 的替代 SSH 主机名可能会有所帮助。替代 SSH 主机名需要一个与上述其他极狐GitLab HTTP 配置不同的新虚拟 IP 地址。

为替代 SSH 主机名配置 DNS,例如 altssh.gitlab.example.com

LB 端口后端端口协议
44322TCP

准备检查#

强烈建议多节点部署配置负载均衡器以使用 准备检查,以确保节点准备好接受流量,然后再将流量路由到它。这对于使用 Puma 时尤其重要,因为在重启期间有一个短暂的时间 Puma 不接受请求。

在极狐GitLab 版本 15.4 到 15.8 中使用 `all=1` 参数进行准备检查可能导致 [增加 Praefect 内存使用](https://gitlab.com/gitlab-org/gitaly/-/issues/4751) 并导致内存错误。

故障排除#

健康检查通过负载均衡器返回 408 HTTP 代码#

极狐GitLab 版本的默认加密可以查看 files/gitlab-cookbooks/gitlab/attributes/default.rb 文件并选择与你的目标极狐GitLab 版本相关的 Git 标签(例如 15.0.5+ee.0)。如果你的负载均衡器需要,你可以为 NGINX 定义 自定义 SSL 加密

一些极狐GitLab 功能需要使用 WebSocket。在某些没有启用负载均衡器上的 WebSocket 支持的情况下,你可能会遇到一些链接或页面被下载而不是在浏览器中渲染。下载的文件可能包含如下内容:

plaintext
One or more reserved bits are on: reserved1 = 1, reserved2 = 0, reserved3 = 0

你的负载均衡器必须能够支持 HTTP WebSocket 请求。如果链接以这种方式下载,请检查你的负载均衡器配置并确保启用了 HTTP WebSocket 请求。