Gitlab CI - 注册表和 nginx
Posted
技术标签:
【中文标题】Gitlab CI - 注册表和 nginx【英文标题】:Gitlab CI - registry and nginx 【发布时间】:2021-03-26 23:43:52 【问题描述】:我正在尝试使用自己的注册表设置自托管 gitlab CI。我还使用 TLS 的自签名证书,使用我自己的 CA 签署了这个证书,它作为受信任的 CA 安装在我的主机中
Gitlab-CE 13.6.3 版本安装在 Ubuntu 18.04 上。已在同一主机上安装 snap microk8s 集群
问题(一些非常基础的)
Gitlab 注册表是否使用 docker 守护进程?
连接是如何实现的
Docker 客户端 --> nginx (5050) --> Gitlab 注册表 (5000)
我在 gitlab.rb 文件中有以下配置
registry['enable'] = true
registry['registry_http_addr'] = "127.0.0.1:5000"
registry['log_directory'] = "/var/log/gitlab/registry"
registry['env'] =
'SSL_CERT_DIR' => "/etc/gitlab/ssl"
# Below you can find settings that are exclusive to "Registry NGINX"
registry_nginx['enable'] = true
registry_nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.local.crt"
registry_nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.local.key"
registry_nginx['proxy_set_headers'] =
"Host" => "$http_host",
"X-Real-IP" => "$remote_addr",
"X-Forwarded-For" => "$proxy_add_x_forwarded_for",
"X-Forwarded-Proto" => "https",
"X-Forwarded-Ssl" => "on"
# When the registry is automatically enabled using the same domain as `external_url`,
# it listens on this port
registry_nginx['listen_port'] = 5050
registry_nginx['listen_addresses'] = ['*', '[::]']
当我尝试 docker login 时,观察到以下错误。是根据上面的配置预期的吗?
- with URL: https://127.0.0.1:5000 - > Login Success
- with URL: https://127.0.0.1:5050 - > Login Success
- with URL: https://gitlab.local:5050 - > x509 certificate signed by unknown authority
我有 gitlab k8s 和 docker runner,他们可以从容器内访问 gitlab 注册表 (nginx) 端口 5050 吗?
[[runners]]
name = "docker"
token = "xxxxxxx"
executor = "docker"
[runners.docker]
image = "docker:stable"
privileged = true
volumes = ["/cache", "/var/run/docker.sock:/var/run/docker.sock"]
注意:我尝试了各种关于 gitlab 注册表上的证书问题的 gitlab 论坛/帖子来构建/推送图像,但没有成功
谢谢
【问题讨论】:
【参考方案1】:尝试通过以下方式将证书放在 docker 中:
sudo mkdir -p /etc/docker/certs.d/gitlab.local:5050
cp /yourcerts/gitlab.local.crt /etc/docker/certs.d/gitlab.local:5050/ca.crt
sudo service docker reload
【讨论】:
感谢您的反馈,是的 - 我确实尝试过,并且 ca 证书在该目录中 我正在使用带有自签名证书的注册表,但在单独的容器中,gitlab-runner 和 gitlab 所有三个都在同一主机上。我正面临这个问题并使用它来解决这个问题,并通过在 /etc/gitlab/ssl 中添加证书和密钥并在 /etc/gitlab/trusted-certs/ 中添加注册表证书来将证书添加到 gitlab 容器中,试试这个。跨度> 感谢您的帮助,因为在 gitlab 论坛/docker 论坛中发帖并没有吸引那么多声音 :) 。我复制了里面的 ca.crt - /etc/gitlab/ssl/, /etc/gitlab/ssl/gitlab.local:5050/, /etc/gitlab/trusted-certs/。能不能把你以前交叉检查的 gitlab.rb 和 config.toml 分享一下? 因为我使用的是外部注册表而不是 gitlab 提供的注册表,所以我在 gitlab.rb 中没有太大变化。只编辑了这两个选项 registry_external_url 'registry.local:5000' & gitlab_rails['registry_api_url'] = "registry.local:5000"。并修改了上面的配置,否则默认注释由gitlab提供。 您使用的是公共外部注册表还是其他自托管注册表 - microk8s、docker?以上是关于Gitlab CI - 注册表和 nginx的主要内容,如果未能解决你的问题,请参考以下文章
gitlab-ci docker-in-docker 访问不安全的注册表
Gitlab CI持续集成 - GitLab Runner 安装与注册