docker构建失败

docker构建登录harbor仓库报错,显示证书过期

kubectl get secret --namespace kube-system harbor-harbor-ingress -o jsonpath="{.data.ca.crt}" | base64 --decode |sudo tee /etc/docker/certs.d/registry.inc.cn/harbor.crt
然后我重启docker还是显示过期

我发现通过上面的命令生成的ca.crt证书和harbor仓库里面的根证书是同一个证书,image ,现在怎么生成这个 镜像库根证书呢?

  1. 生成CA证书私钥。
openssl genrsa -out ca.key 4096
  1. 生成CA证书。
openssl req -x509 -new -nodes -sha512 -days 36500 \
-subj "/C=CN/ST=Shanghai/L=Shanghai/O=harbor/OU=huanengleasing.com/CN=registry.fr-inc.cn" \
-key ca.key \
-out ca.crt
  1. 生成证书私钥。
openssl genrsa -out registry.fr-inc.cn.key 4096
  1. 生成证书签名请求(CSR)。
openssl req -sha512 -new \
-subj "/C=CN/ST=Shanghai/L=Shanghai/O=harbor/OU=huanengleasing.com/CN=registry.fr-inc.cn" \
-key registry.fr-inc.cn.key \
-out registry.fr-inc.cn.csr
  1. 生成一个x509 v3扩展文件。
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=registry.fr-inc.cn
EOF
  1. 签发 Harbor 证书。
openssl x509 -req -sha512 -days 36500 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in registry.fr-inc.cn.csr \
-out registry.fr-inc.cn.crt
  1. 替换现有证书
kubectl create secret generic harbor-harbor-ingress \
--dry-run -o yaml \
--from-file=ca.crt=ca.crt \
--from-file=tls.crt=registry.fr-inc.cn.crt \
--from-file=tls.key=registry.fr-inc.cn.key | kubectl apply -n c7n-system -f -
  1. 分发ca.crt证书文件
  • 将得到的 ca.crt证书文件拷贝至其他会使用到该Harbor的主机上

  • 证书放置于/etc/docker/certs.d/<Harbor域名>目录下(eg. 若Harbor域名为registry.fr-inc.cn,则将ca.crt证书文件放于/etc/docker/certs.d/registry.fr-inc.cn目录下即可)

1 个赞

感谢大佬支持,搞定了

请问一下,这个情况也是因为harbor证书的问题吗?我导入模板springboot项目是可以的。但是在导入模板项目MicroService后在进行ci构建的过程报了这个错,域名不是公网域名,是我在coredns配置的。

你好,请按照文档进行 证书分发 。

https://choerodon.io/zh/docs/installation-configuration/steps/install/parts/base/harbor/

你好,前面部署的时候就是按照这个操作了。刚刚重复操作了一次,下载该证书然后复制放到4台机器对应的文件路径,重新执行CI还是报同样的错。是我的操作不对吗?麻烦你了
image

您好,请确认你放到4台机器是运行runner的机子吗?

是的,这次搭建的集群就4台机器。为了避免没有生效,所以在四台机器的 /etc/docker 文件夹都配置了。 通过命令docker login harbor.choerodon-01.com.cn -u xxx -p xxx 是可以登录的

你好,请在 kaniko 命令中 添加 --insecure 标记。

例如:

kaniko --insecure -c $CI_PROJECT_DIR/docker -f $CI_PROJECT_DIR/docker/Dockerfile -d ${DOCKER_REGISTRY}/${GROUP_NAME}/${PROJECT_NAME}:${CI_COMMIT_TAG}

你好,添加 了--insecure 标记也是不可以。只能添加–skip-tls-verify 跳过harbor的证书校验才可以通过CI。