You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自建GitLab内部仅通过HTTP而非HTTPS使用容器仓库的配置问询

解决方案:内网环境下GitLab Container Registry HTTP访问配置

1. 配置GitLab Container Registry支持内网HTTP访问

完全可以实现内外网访问分离,外部保持HTTPS加密,内网使用HTTP简化通信。具体操作如下:

  • 修改GitLab主配置文件/etc/gitlab/gitlab.rb:
    # 外部访问(通过Cloudflare)保留HTTPS配置
    external_url 'https://your-gitlab-domain.com'
    registry_external_url 'https://registry.your-gitlab-domain.com'
    
    # 配置内网专属的Registry HTTP访问地址
    registry['internal_url'] = 'http://gitlab-internal-ip:5000'
    # 允许Registry监听内网IP的HTTP端口
    registry['listen_addr'] = '0.0.0.0:5000'
    
    # (可选)如果使用GitLab自带Nginx,添加内网Registry的反向代理规则
    nginx['custom_gitlab_server_config'] = <<-NGINX
    location /registry {
      proxy_pass http://gitlab-internal-ip:5000;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    NGINX
    
  • 执行gitlab-ctl reconfigure使配置生效。
  • 在内网DNS服务器中配置registry.your-gitlab-domain.com指向GitLab的内网IP,让内网机器访问该域名时自动走HTTP通道,外部访问则通过Cloudflare走HTTPS。

2. 配置GitLab CI/CD流水线使用HTTP访问Registry

2.1 GitLab Runner端配置

修改Runner的config.toml文件,添加不安全仓库授权(允许HTTP访问Registry):

[[runners]]
  name = "Internal CI Runner"
  url = "http://gitlab-internal-ip/"
  token = "your-runner-token"
  executor = "docker"
  [runners.docker]
    tls_verify = false
    image = "docker:latest"
    privileged = true
    # 将内网Registry地址加入不安全仓库列表
    insecure_registries = ["gitlab-internal-ip:5000", "registry.your-gitlab-domain.com"]

重启Runner使配置生效:gitlab-runner restart

2.2 流水线脚本配置(.gitlab-ci.yml)

在流水线中覆盖默认CI变量,指定内网HTTP的Registry地址:

variables:
  CI_REGISTRY: "http://gitlab-internal-ip:5000"
  CI_REGISTRY_IMAGE: "$CI_REGISTRY/your-project-group/your-project"

build-image:
  stage: build
  image: docker:latest
  services:
    - docker:dind
  script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
    - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA .
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA

也可以直接在脚本中使用内网HTTP地址完成镜像的推送与拉取操作。

3. 安全注意事项与最佳实践

  • 严格限制内网端口访问:在Proxmox集群防火墙或GitLab服务器防火墙中,仅允许内部IP段访问Registry的HTTP端口(默认5000),绝对禁止外部IP访问该端口,避免HTTP流量暴露到公网。
  • 保留完整认证机制:即使使用HTTP,也必须启用GitLab的Registry认证,使用项目令牌或个人访问令牌完成登录,禁止匿名推送/拉取镜像,防止未授权访问敏感镜像。
  • 确认内网设备可信性:确保内网中的所有虚拟机、容器及终端设备都是可信的,无恶意入侵风险——如果内网存在不可信设备或人员,HTTPS加密仍然是必要的防护手段。
  • 开启访问日志监控:启用GitLab Registry的访问日志功能,定期检查内网镜像操作记录,及时发现异常访问行为。
  • 确保DNS解析正确性:验证内网机器的DNS解析规则,避免将Registry域名解析到Cloudflare公网IP,防止内网流量意外绕行公网。

内容的提问来源于stack exchange,提问作者Nicetyone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 14:16:00