gitlab-ci-multi-runner register
给了我
couldn't execute POST against https://xxxx/ci/api/v1/runners/register.json:
Post https://xxxx/ci/api/v1/runners/register.json:
x509: cannot validate certificate for xxxx because it doesn't contain any IP SANs
有办法禁用认证验证吗?
我正在使用 Gitlab 8.13.1 和 gitlab-ci-multi-runner 1.11.2。
根据 Wassim 的回答,以及 关于 tls 自签名和自定义 CA 签名证书的 gitlab 文档,如果您不是 gitlab 服务器的管理员,而只是带有运行程序的服务器的管理员(并且如果跑步者以 root 身份运行):
SERVER=gitlab.example.com
PORT=443
CERTIFICATE=/etc/gitlab-runner/certs/${SERVER}.crt
# Create the certificates hierarchy expected by gitlab
sudo mkdir -p $(dirname "$CERTIFICATE")
# Get the certificate in PEM format and store it
openssl s_client -connect ${SERVER}:${PORT} -showcerts </dev/null 2>/dev/null | sed -e '/-----BEGIN/,/-----END/!d' | sudo tee "$CERTIFICATE" >/dev/null
# Register your runner
gitlab-runner register --tls-ca-file="$CERTIFICATE" [your other options]
更新1:
CERTIFICATE
必须是证书文件的绝对路径。
更新 2:由于 gitlab-runner bug #2675
,自定义 CA 签名可能仍会失败在我的例子中,我通过添加 .pem 文件的路径来使其工作,如下所示:
sudo gitlab-runner register --tls-ca-file /my/path/gitlab/gitlab.myserver.com.pem
通常,gitlab-runner 托管在 Docker 容器中。在这种情况下,需要确保
tls-ca-file
在容器中可用。
好吧,我一步步跟着这篇文章http://moonlightbox.logdown.com/posts/2016/09/12/gitlab-ci-runner-register-x509-error然后它就像一个魅力。 为了防止死链接,我复制以下步骤:
首先在 GitLab 服务器(而不是运行器)上编辑 ssl 配置
vim /etc/pki/tls/openssl.cnf
[ v3_ca ]
subjectAltName=IP:192.168.1.1 <---- Add this line. 192.168.1.1 is your GitLab server IP.
重新生成自签名证书
cd /etc/gitlab/ssl
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/gitlab/ssl/192.168.1.1.key -out /etc/gitlab/ssl/192.168.1.1.crt
sudo openssl dhparam -out /etc/gitlab/ssl/dhparam.pem 2048
sudo gitlab-ctl restart
将新 CA 复制到 GitLab CI 运行程序
scp /etc/gitlab/ssl/192.168.1.1.crt [email protected]:/etc/gitlab-runner/certs
谢谢@月光@Wassim Dhif
在我的设置中,以下内容也有效。重要的是用于创建证书的 IP/名称与用于注册运行者的 IP/名称相匹配。
gitlab-runner register --tls-ca-file /my/path/gitlab/gitlab.myserver.com.pem
此外,可能还需要在 runners config.toml 文件中添加一行用于主机名查找([runners.docker] 部分):
extra_hosts = ["git.domain.com:192.168.99.100"]
另请参阅https://gitlab.com/gitlab-org/gitlab-runner/issues/2209
此外,如果使用 gitlab/gitlab-runner 网络模式主机,则可能会出现一些网络问题,也必须将其添加到 config.toml 中,因为它会启动其他容器,否则可能会出现问题连接到 gitlab-host (([runners.docker] 部分):
network_mode="host"
最后,自签名 SSL 证书可能存在问题 (https://gitlab.com/gitlab-org/gitlab-runner/issues/2659)。 一个肮脏的解决方法是添加
environment = ["GIT_SSL_NO_VERIFY=true"]
前往 [[跑步者]] 部分。
以下步骤在我的环境中有效。 (Ubuntu)
下载证书
我无法访问 gitlab 服务器。因此,
在 gitlab-runner 主机中
将下载的证书重命名为.crt
$ mv some-host-gitlab.com some-host-gitlab.com.crt
立即使用此文件注册跑步者
$ sudo gitlab-runner register --tls-ca-file /path/to/some-host-gitlab.com.crt
我能够将跑步者注册到项目中。
目前无法使用不安全的 ssl 选项运行多运行程序。
GitLab 目前有一个关于此的未决问题。
您仍然应该能够获取您的证书,将其设为 PEM 文件并使用
--tls-ca-file
将其提供给运行程序命令
要使用 openssl 制作 PEM 文件。
openssl x509 -in mycert.crt -out mycert.pem -outform PEM
我遇到了同样的问题,在我的例子中,我必须使用以下命令生成 SAN SSL 证书(将 vars 替换为您的特定环境) :
openssl genrsa -out ca.key 2048
openssl req -new -x509 -days 365 -key ca.key -subj "/C=__country__/ST=__state_or_province__/L=__locality__/O=__organisation(s)__/CN=__common_name__" -out ca.crt
openssl req -newkey rsa:2048 -nodes -keyout __domain_name__.key -subj "/C=__country__/ST=__state_or_province__/L=__locality__/O=__organisation(s)__/CN=__common_name__" -out __domain_name__.csr
openssl x509 -req -extfile <(printf "subjectAltName=DNS:__domain_name_could__use_wildcard__") -days 365 -in __domain_name__.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out __domain_name__.crt
证书标识符属性备忘单:https://www.ibm.com/docs/en/ibm-mq/7.5?topic=certificates-distinguished-names
然后我只是将 gitlab 服务器上生成的 domain_name.crt 文件传输到 gitlab runner 到 /etc/gitlab_runner/certs 中,就像上面的响应建议的那样
就是这样,之后我就可以注册我的跑步者了。希望我的帖子能有所帮助。