首页 / 常见问题 / 如何为 Gitlab 实例配置外部 LB

如何为 Gitlab 实例配置外部 LB

术语

术语 说明
LB 负载均衡器
外部 LB 集群外部的负载均衡器,如 f5
集群 LB 集群内的负载均衡器

场景说明

通常情况下,通过域名部署 Gitlab 实例时,会将域名证书配置在集群 LB 上。然而,如果希望将域名证书配置在外部 LB(如 f5)上,则需要进行一些额外配置。

常见场景:

  1. 通过 NodePort 方式部署 gitlab,然后通过外部 LB 将流量转发到 NodePort 上。
  2. 通过域名方式(HTTP)部署 gitlab,然后通过外部 LB 将流量转发给集群 LB,最后由集群 LB 转发到 Gitlab 服务。

配置方法

负载均衡器有多种类型,但其原理和配置方法相似。只需在负载均衡器转发流量时设置好 HTTP Header 即可。需要设置的 HTTP Header 如下表所示:

HTTP Header 说明 示例值
Host 原始请求的域名 gitlab.example.cn
X-Forwarded-Proto 原始请求的协议 https
X-Forwarded-Host 原始请求的域名+端口 gitlab.example.cn:443
X-Forwarded-Port 原始请求的端口号 443
X-Forwarded-Ssl 原始请求是否使用 SSL on

下面通过实际案例介绍配置过程,例如希望通过 https://gitlab.example.cn 这个域名访问 Gitlab 工具 UI 页面,并可以正常克隆代码。

场景一:配置外部 LB 转发到 Gitlab 服务对应的 NodePort Service 上

前置条件

  1. 已通过 NodePort 方式部署 Gitlab。
  2. 可以通过 http://<node-ip>:<node-port> (如:http://192.168.1.100:30000)访问 Gitlab 服务

修改 Gitlab 实例的访问地址

  1. 在左侧导航栏中,单击 工具链管理 > 实例管理
  2. 编辑对应的 Gitlab 实例,将 服务访问地址 改为 https://gitlab.example.cn

配置外部 LB

以 Nginx 配置为例,将转发地址设置为 Gitlab 服务对应的 NodePort 地址:

server {
    listen 443 ssl;
    server_name https://gitlab.example.cn;

    # SSL 配置
    ssl_certificate /etc/nginx/certs/domain.pem;
    ssl_certificate_key /etc/nginx/certs/domain.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    location / {
        # 转发地址写 Gitlab 服务对应的 NodePort 地址
        proxy_pass http://192.168.1.100:30000;
        proxy_set_header Host $host;
        proxy_redirect   off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Host $server_name:$server_port;
        proxy_set_header X-Forwarded-Port $server_port;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Ssl on;
    }
}

测试验证

浏览器访问 https://gitlab.example.cn ,应能正常访问 Gitlab 服务 UI 页面,并可以正常克隆代码。

场景二:配置外部 LB 转发到集群 LB 上

前置条件

  1. 已通过 Ingress 方式部署 Gitlab,且协议是 HTTP。
  2. Gitlab 所在集群已经配置好了集群 LB,集群外可以通过集群 LB 绑定的 IP 正常访问(如:http://192.168.100.10:80)。

修改 Gitlab 实例的访问地址

  1. 在左侧导航栏中,单击 工具链管理 > 实例管理
  2. 编辑对应的 Gitlab 实例。
    • 域名 改为 gitlab.example.cn
    • 协议 改为 HTTP
    • 服务访问地址 改为 https://gitlab.example.cn

配置外部 LB

以 Nginx 配置为例,将转发地址设置为集群 LB 对应的 IP 地址:

server {
    listen 443 ssl;
    server_name https://gitlab.example.cn;

    # SSL 配置
    ssl_certificate /etc/nginx/certs/domain.pem;
    ssl_certificate_key /etc/nginx/certs/domain.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    location / {
        # 转发地址写集群 LB 绑定的 IP 地址
        proxy_pass http://192.168.100.10;
        proxy_set_header Host $host;
        proxy_redirect   off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Host $server_name:$server_port;
        proxy_set_header X-Forwarded-Port $server_port;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Ssl on;
    }
}

测试验证

浏览器访问 https://gitlab.example.cn ,应能正常访问 Gitlab 服务 UI 页面,并可以正常克隆代码。