使用Helm安装GitLab时如何配置内部CA签发的私有信任证书
解决步骤
1. 先验证TLS Secret的证书链完整性
你创建gitlab-cert这个Secret时用到的.pem证书文件,必须按「站点证书 → 中间CA证书 → 内部根CA证书」的顺序拼接完整,不能只放站点单证书。缺失CA链会直接导致访问时触发证书不被信任的报错。
如果确认证书链不全,重新拼接后更新Secret即可:
kubectl create secret tls gitlab-cert --cert=完整拼接后的证书.pem --key=证书.key -n <你的GitLab命名空间> --dry-run=client -o yaml | kubectl apply -f -
2. 新增内部CA全局信任配置
GitLab内部组件间互相调用时,也需要信任你的内部CA,否则内部请求也会出现证书校验失败。先单独把你的内部根CA证书存为internal-ca.pem文件,创建专属CA Secret:
kubectl create secret generic internal-ca --from-file=ca.crt=./internal-ca.pem -n <你的GitLab命名空间>
3. 修正并补充Helm安装参数
你之前的配置里存在参数拼写错误,同时缺失CA信任相关配置,更新后的完整安装/升级参数如下:
helm upgrade --install gitlab gitlab/gitlab \ --timeout 600s \ --namespace ${helm_namespace} \ --set global.hosts.domain=${hosts_domain} \ --set global.hosts.externalIP=${static_ip} \ --set global.hosts.https=true \ --set postgresql.install=false \ --set global.psql.host=${postgres_sql_ip} \ --set global.psql.password.secret=${k8s_password_secret} \ --set global.psql.username=${postgres_sql_user} \ --set global.psql.password.key=${k8s_password_key} \ --set global.psql.ssl.secret=${psql_ssl_secret} \ --set global.psql.ssl.clientCertificate=${psql_ssl_client_certificate} \ --set global.psql.ssl.clientKey=${psql_ssl_client_key} \ --set global.psql.ssl.serverCA=${psql_ssl_server_ca} \ --set global.extraEnv.PGSSLCERT=${extra_env_pg_ssl_cert} \ --set global.extraEnv.PGSSLKEY=${extra_env_pg_ssl_key} \ --set global.extraEnv.PGSSLROOTCERT=${extra_env_pg_ssl_root_cert} \ --set global.ingress.tls.enabled=true \ --set global.ingress.tls.secretName=gitlab-cert \ --set certmanager.install=false \ --set global.ingress.configureCertmanager=false \ --set gitlab.webservice.ingress.tls.secretName=gitlab-cert \ --set global.certificates.customCAs[0].secret=internal-ca \ --set global.certificates.customCAs[0].key=ca.crt
4. 验证配置生效
执行完升级命令等待Pod重启完成后,用以下命令验证证书配置:
# 验证Ingress是否正确关联TLS Secret kubectl get ingress gitlab-webservice-default -n ${helm_namespace} -o jsonpath='{.spec.tls}' # 验证站点返回的证书链完整性 openssl s_client -connect ${你的GitLab域名}:443 -servername ${你的GitLab域名}
5. 客户端侧配置
如果是浏览器/本地客户端访问报错,需要将你的内部根CA证书导入到客户端操作系统或浏览器的「受信任的根证书颁发机构」列表中,客户端才会认可内部CA签发的证书。
内容的提问来源于stack exchange,提问作者floormind
相关产品推荐
相关产品推荐

