Kubernetes部署的自定义GitLab CI Runner无法连接gitlab.com Docker仓库
问题根因
该报错是因为你的自定义Runner的构建环境中,Docker客户端不信任registry.gitlab.com返回的SSL证书,通常有三类触发场景:
- Runner部署的AKS集群内部存在SSL流量拦截代理,签发了自定义签名的GitLab站点证书
- 你使用的Docker-in-Docker服务镜像/CI执行镜像默认缺失公网根证书信任列表
- CI执行镜像属于精简版本,未预装
ca-certificates工具包,无法识别公网可信根证书
解决方案
方案1:修改GitLab Runner部署配置(持久生效,适配所有任务)
如果你是通过Helm部署的AKS Runner,修改values.yaml配置,追加证书挂载规则:
- 先将需要信任的根证书存入AKS集群的Secret中:
kubectl create secret generic gitlab-registry-ca --from-file=./gitlab-ca.crt
- 在values.yaml的runners配置段增加挂载配置:
runners: config: | [[runners]] [runners.kubernetes] image = "docker:latest" privileged = true [[runners.kubernetes.volumes.secret]] name = "gitlab-registry-ca" mount_path = "/etc/docker/certs.d/registry.gitlab.com/" read_only = true [[runners.kubernetes.volumes.secret]] name = "gitlab-registry-ca" mount_path = "/usr/local/share/ca-certificates/" read_only = true
- 升级Runner部署后生效
helm upgrade gitlab-runner gitlab/gitlab-runner -f values.yaml
方案2:在CI流水线中临时注入证书(无需修改Runner配置,仅适配当前项目)
在项目的.gitlab-ci.yml的before_script段增加证书导入逻辑:
before_script: # 若使用alpine基础镜像需先安装证书工具 - apk add --no-cache ca-certificates openssl - | echo "$GITLAB_REGISTRY_CA" > /usr/local/share/ca-certificates/gitlab-ca.crt update-ca-certificates mkdir -p /etc/docker/certs.d/registry.gitlab.com/ cp /usr/local/share/ca-certificates/gitlab-ca.crt /etc/docker/certs.d/registry.gitlab.com/ca.crt - docker login registry.gitlab.com -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD
提前将根证书内容存入项目CI变量GITLAB_REGISTRY_CA即可。
验证操作
配置完成后重新执行构建任务,docker login操作即可正常完成,后续镜像构建、推送流程可正常执行。
内容的提问来源于stack exchange,提问作者ghostika
相关产品推荐
相关产品推荐

