自建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
相关产品推荐
相关产品推荐

