自托管的 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


我完全迷路了

非常感谢您的帮助。

我过去遇到过类似的问题,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