自托管的 Gitlab runner 注册失败的 x509 证书由未知权威机构在 GKE 上使用 helm install 签名
self-hosted Gitlab runner register failed x509 certificate signed by unknown authority on GKE with helm install
我使用 helm 在 GKE 上安装了 Gitlab(版本 13.7.1-ee)。
并且作为先决条件,由于防火墙规则,并且没有可控域,我无法使用 cert-manager 的有效证书。然后我想使用自签名证书或 wildcard-cert supported by gitlab.
Gitlab-runner 在 运行 时显示错误。
status=couldn't execute POST against https://gitlab.xxx.xxx.xxx.xip.io/api/v4/runners: Post https://gitlab.xxx.xxx.xxx.xip.io/api/v4/runners: x509: certificate signed by unknown authority
我尝试了几种方法,例如,
一个。 setting envVars
values.yaml
gitlab-runner:
envVars:
- name: CI_SERVER_TLS_CA_FILE
value: /home/gitlab-runner/.gitlab-runner/certs/gitlab.xxx.xxx.xxx.xxx.xip.io.crt
- name: CONFIG_FILE
value: /home/gitlab-runner/.gitlab-runner/config.toml
b。在 gitlab.web-service 和 gitlab-runner
上使用相同的证书
自签名,在我的本地机器上使用
openssl genrsa
command
values.yaml
gitlab:
webservice:
ingress:
tls:
secretName: selfsigned-cert-tls
gitlab-runner:
runners:
certsSecretName: selfsigned-cert-tls
c。在 GKE 上使用证书管理器创建自签名证书并使用该证书。
使用外部证书管理器和外部 nginx-ingress-controller(使用 helm 自行安装)并设置
入口
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: self-ingress
namespace: gitlab
annotations:
kubernetes.io/ingress.class: "nginx"
cert-manager.io/issuer: "selfsigned-issuer"
spec:
tls:
- hosts:
- gitlab.xxx.xxx.xxx.xxx.xip.io
secretName: selfsigned-cert-tls
rules:
- host: gitlab.xxx.xxx.xxx.xxx.xip.io
http:
paths:
- backend:
serviceName: gitlab-webservice-default
servicePort: 8181
path: /
- backend:
serviceName: gitlab-webservice-default
servicePort: 8080
path: /admin/sidekiq
values.yaml
global:
ingress:
configureCertmanager: false
nginx-ingress:
enabled:false
certmanager:
install: false
d。使用 gitlab 制作的通配符自签名证书,并为 gitlab-runner 使用自己的自签名证书
这种方式不推荐使用Gitlab-runner
https://docs.gitlab.com/charts/installation/tls.html#option-4-use-auto-generated-self-signed-wildcard-certificate
values.yaml
certmanager:
install: false
ingress:
configureCertmanager: false
gitlab-runner:
runners:
certsSecretName: selfsigned-cert-tls
但所有这些仍然显示错误
x509: certificate signed by unknown authority
sometimes x509: certificate is valid for ingress.local and not valid for gitlab.xxx.xxx.xxx.xxx.xip.io
我完全迷路了
- 必须如何在 GKE 上创建自签名证书?
- 必须为 gitlab-runner 设置什么秘密?
- 可能我不能使用
xip.io
作为自签名证书?
非常感谢您的帮助。
我过去遇到过类似的问题,CA 文件的配置选项对我来说从来没有用过。起作用的是告诉运行你的 gitlab-runner 的主机信任那个证书。
您可能需要 GKE 的根签名证书和中间证书。我从未使用过 GKE 或您提到的证书管理器,因此您将研究如何获得这两个证书(或者如果他们为您合并它们可能只是一个)。如果您分别获得两者,则必须通过将文本放在其中一个中并将其放在第二个中(文字 copy/paste)来组合它们。
获得包含根证书和中间证书的文件后,您可以按照 OS 的说明信任它。这将取决于您的 OS,但对于 Centos,我已按照此处的说明进行操作:https://manuals.gfi.com/en/kerio/connect/content/server-configuration/ssl-certificates/adding-trusted-root-certificates-to-the-server-1605.html. This works for any version of Centos (up to 8 so far), but I'm unsure about the directions for Ubuntu/Debian. https://manuals.gfi.com/en/kerio/connect/content/server-configuration/ssl-certificates/adding-trusted-root-certificates-to-the-server-1605.html
如果您使用的不是 Centos/Debian-Ubuntu,或者上述说明不适用于 Debian/Ubuntu,您必须研究如何信任根证书。
我根据一篇文章解决了这个问题。
https://docs.d2iq.com/dkp/konvoy/1.4/tutorials/gitlab/
因此,使用由 gitlab 制作的通配符自签名证书,并从 wildcard-tls-gitlab 获取证书数据
kubectl get secret gitlab-wildcard-tls --template='{{ index .data "tls.crt" }}' | base64 -D > gitlab.crt
kubectl create secret generic gitlab-runner-certs --from-file=gitlab.xxx.xxx.xxx.xxx.xip.io.crt=xxx.xxx.xxx.xxx.xip.io.crt
我可以使用 gitlab-runner-certs
作为 gitlab-runner 的秘密。
我发现我的 value.yaml 有误
gitlab-runner:
certsSecretName: gitlab-runner-certs # correct
runners:
certsSecretName: gitlab-runner-certs # wrong
我使用 helm 在 GKE 上安装了 Gitlab(版本 13.7.1-ee)。
并且作为先决条件,由于防火墙规则,并且没有可控域,我无法使用 cert-manager 的有效证书。然后我想使用自签名证书或 wildcard-cert supported by gitlab.
Gitlab-runner 在 运行 时显示错误。
status=couldn't execute POST against https://gitlab.xxx.xxx.xxx.xip.io/api/v4/runners: Post https://gitlab.xxx.xxx.xxx.xip.io/api/v4/runners: x509: certificate signed by unknown authority
我尝试了几种方法,例如,
一个。 setting envVars
values.yaml
gitlab-runner:
envVars:
- name: CI_SERVER_TLS_CA_FILE
value: /home/gitlab-runner/.gitlab-runner/certs/gitlab.xxx.xxx.xxx.xxx.xip.io.crt
- name: CONFIG_FILE
value: /home/gitlab-runner/.gitlab-runner/config.toml
b。在 gitlab.web-service 和 gitlab-runner
上使用相同的证书自签名,在我的本地机器上使用
openssl genrsa
command
values.yaml
gitlab:
webservice:
ingress:
tls:
secretName: selfsigned-cert-tls
gitlab-runner:
runners:
certsSecretName: selfsigned-cert-tls
c。在 GKE 上使用证书管理器创建自签名证书并使用该证书。
使用外部证书管理器和外部 nginx-ingress-controller(使用 helm 自行安装)并设置
入口
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: self-ingress
namespace: gitlab
annotations:
kubernetes.io/ingress.class: "nginx"
cert-manager.io/issuer: "selfsigned-issuer"
spec:
tls:
- hosts:
- gitlab.xxx.xxx.xxx.xxx.xip.io
secretName: selfsigned-cert-tls
rules:
- host: gitlab.xxx.xxx.xxx.xxx.xip.io
http:
paths:
- backend:
serviceName: gitlab-webservice-default
servicePort: 8181
path: /
- backend:
serviceName: gitlab-webservice-default
servicePort: 8080
path: /admin/sidekiq
values.yaml
global:
ingress:
configureCertmanager: false
nginx-ingress:
enabled:false
certmanager:
install: false
d。使用 gitlab 制作的通配符自签名证书,并为 gitlab-runner 使用自己的自签名证书
这种方式不推荐使用Gitlab-runner https://docs.gitlab.com/charts/installation/tls.html#option-4-use-auto-generated-self-signed-wildcard-certificate
values.yaml
certmanager:
install: false
ingress:
configureCertmanager: false
gitlab-runner:
runners:
certsSecretName: selfsigned-cert-tls
但所有这些仍然显示错误
x509: certificate signed by unknown authority sometimes x509: certificate is valid for ingress.local and not valid for gitlab.xxx.xxx.xxx.xxx.xip.io
我完全迷路了
- 必须如何在 GKE 上创建自签名证书?
- 必须为 gitlab-runner 设置什么秘密?
- 可能我不能使用
xip.io
作为自签名证书?
非常感谢您的帮助。
我过去遇到过类似的问题,CA 文件的配置选项对我来说从来没有用过。起作用的是告诉运行你的 gitlab-runner 的主机信任那个证书。
您可能需要 GKE 的根签名证书和中间证书。我从未使用过 GKE 或您提到的证书管理器,因此您将研究如何获得这两个证书(或者如果他们为您合并它们可能只是一个)。如果您分别获得两者,则必须通过将文本放在其中一个中并将其放在第二个中(文字 copy/paste)来组合它们。
获得包含根证书和中间证书的文件后,您可以按照 OS 的说明信任它。这将取决于您的 OS,但对于 Centos,我已按照此处的说明进行操作:https://manuals.gfi.com/en/kerio/connect/content/server-configuration/ssl-certificates/adding-trusted-root-certificates-to-the-server-1605.html. This works for any version of Centos (up to 8 so far), but I'm unsure about the directions for Ubuntu/Debian. https://manuals.gfi.com/en/kerio/connect/content/server-configuration/ssl-certificates/adding-trusted-root-certificates-to-the-server-1605.html
如果您使用的不是 Centos/Debian-Ubuntu,或者上述说明不适用于 Debian/Ubuntu,您必须研究如何信任根证书。
我根据一篇文章解决了这个问题。
https://docs.d2iq.com/dkp/konvoy/1.4/tutorials/gitlab/
因此,使用由 gitlab 制作的通配符自签名证书,并从 wildcard-tls-gitlab 获取证书数据
kubectl get secret gitlab-wildcard-tls --template='{{ index .data "tls.crt" }}' | base64 -D > gitlab.crt
kubectl create secret generic gitlab-runner-certs --from-file=gitlab.xxx.xxx.xxx.xxx.xip.io.crt=xxx.xxx.xxx.xxx.xip.io.crt
我可以使用 gitlab-runner-certs
作为 gitlab-runner 的秘密。
我发现我的 value.yaml 有误
gitlab-runner:
certsSecretName: gitlab-runner-certs # correct
runners:
certsSecretName: gitlab-runner-certs # wrong