操作系统信息
虚拟机(1台node)+物理机(一台node,一台master),Ubuntu24.04,4C/16G

Kubernetes版本信息
kubectl version 命令执行结果贴在下方

Client Version: v1.31.2

Kustomize Version: v5.4.2

Server Version: v1.31.2

容器运行时
docker version / crictl version / nerdctl version 结果贴在下方

RuntimeName: containerd

RuntimeVersion: v1.7.13

RuntimeApiVersion: v1

KubeSphere版本信息

v4.1.2 离线安装,使用kk安装

另外harbor是独立安装的,不是在k8s中部署, harbor使用https

问题是什么
devops流水线中执行镜像build提示: x509: certificate signed by unknown authority

harbor的证书都已经根据harbor官方的教程生成并拷贝到所有节点的指定的目录,ca证书也已经拷贝到/etc/ssl/certs所有节点目录下

保密字典已配置了镜像服务信息,并验证通过,并创建新的工作负载可以搜索到私服的镜像,就是流水线执行docker build失败,提示 x509: certificate signed by unknown authority

另外coredns和nodelocaldns都配置了

流水线Jenkins配置如下

pipeline {
  agent {
    node {
      label 'maven-jdk21'
    }

  }
  stages {
    stage('Clone repository') {
      agent none
      steps {
        container('maven') {
          git(url: 'http://192.168.1.135/student-job/student-job-admin.git', credentialsId: 'gitlab', branch: 'deploy', changelog: true, poll: false)
        }

      }
    }

    stage('Run clean') {
      steps {
        container('maven') {
          sh '''
            echo $M2_HOME
            mvn -X help:effective-settings
            mvn -v
            java -version
            ls
            pwd
            mvn clean
          '''
        }

      }
    }

    stage('Run build') {
      steps {
        container('maven') {
          sh '''
          ls
          pwd
          mvn package
          '''
          stash name: 'maven-artifacts', includes: 'studentjob-server/target/*.jar'
          stash name: 'dockerfile', includes: 'Dockerfile'
        }

      }
    }
    stage('Docker build') {
      agent {
        node {
          label 'base'
        }

      }
      steps {
        container('base') {
          unstash 'maven-artifacts'  // 恢复 Maven 构建的产物
          unstash 'dockerfile'  // 恢复 Dockerfile
          sh 'ls'
          sh 'pwd'
          sh 'docker build -t dockerhub.kubekey.local/company/student-job-backend:latest -f Dockerfile  .'
        }

      }
    }

  }
}

Dockerfile文件如下

FROM dockerhub.kubekey.local/library/eclipse-temurin:21-jre

RUN mkdir -p /app
WORKDIR /app
COPY studentjob-server.jar app.jar
ENV TZ=Asia/Shanghai
ENV JAVA_OPTS="-Xms512m -Xmx512m"
ENV ARGS=""
EXPOSE 8080

CMD java ${JAVA_OPTS} -jar app.jar $ARGS
  • 已编辑

直接把证书重新打包进去base镜像是可以使用的, 有没有其他方案,不需要重新打包把证书放到镜像更优雅的方案

FROM dockerhub.kubekey.local/ks/kubesphere/builder-base:v3.2.2-podman

# 确保证书目录存在
RUN mkdir -p /etc/docker/certs.d/dockerhub.kubekey.local

# 复制证书到 CA 目录
COPY ca.crt /etc/pki/ca-trust/source/anchors/dockerhub.kubekey.local.crt

# 复制证书到 Docker 证书目录
COPY ca.crt /etc/docker/certs.d/dockerhub.kubekey.local/ca.crt

# 更新 CA 证书存储
RUN update-ca-trust extract

一种方法是按照楼上所说,将证书挂载到agent pod中。

另一种方法是配置insecure registry. 参考 . 需要修改容器中的 /etc/containers/registries.conf 文件。这种方法适用于测试环境或不严格要求 HTTPS 的场景

商业产品与合作咨询