使用Kaniko构建镜像推送至Docker Registry时遇x509证书错误
解决Kaniko推送镜像至Docker Registry时的x509证书未知权威问题
问题场景
在自托管GitHub Runner上使用Kaniko executor构建镜像并推送至私有Docker Registry,执行以下步骤后触发证书验证错误:
执行步骤
配置Docker认证
环境变量:DOCKER_CONFIG_JSON: ${{ secrets.DOCKER_CONFIG_JSON }}
执行命令:mkdir -p ${{ github.workspace }}/.docker echo -n "$DOCKER_CONFIG_JSON" > ${{ github.workspace }}/.docker/config.json构建并推送镜像
执行命令:pwd ls -ltr docker run --rm \ -v ${{ github.workspace }}:/workspace \ -v `pwd`/.docker/config.json:/kaniko/.docker/config.json:ro \ gcr.io/kaniko-project/executor:latest \ --context=/workspace \ --dockerfile=/workspace/alertmanager/Dockerfile \ --destination=xyz/dsc/alertmanager:1.0
报错信息
错误检查推送权限 -- 请确保输入了正确的标签名称,并且已正确认证,然后重试:检查"xyz/abc/alertmanager:1.0"的推送权限失败:为xyz创建推送检查传输失败:Get "https://xyz/v2/": tls: 无法验证证书:x509: 由未知权威机构签名的证书
解决方案
方案1:挂载私有CA证书到Kaniko(推荐生产环境)
Kaniko默认只信任系统根CA,对于私有CA签发的Registry证书,需要将CA证书挂载到Kaniko的信任证书目录:
修改构建推送步骤的命令,添加CA证书挂载参数:
docker run --rm \ -v ${{ github.workspace }}:/workspace \ -v ${{ github.workspace }}/.docker/config.json:/kaniko/.docker/config.json:ro \ -v /path/to/your/ca-root.crt:/kaniko/ssl/certs/ca-root.crt:ro \ gcr.io/kaniko-project/executor:latest \ --context=/workspace \ --dockerfile=/workspace/alertmanager/Dockerfile \ --destination=xyz/dsc/alertmanager:1.0
- 替换
/path/to/your/ca-root.crt为自托管Runner上私有CA证书的实际路径; - 如果CA证书存储在GitHub Secrets中,可以先在步骤中写入文件再挂载:
然后挂载路径改为echo -n "${{ secrets.PRIVATE_CA_CRT }}" > ${{ github.workspace }}/ca-root.crt${{ github.workspace }}/ca-root.crt:/kaniko/ssl/certs/ca-root.crt:ro
方案2:配置Docker跳过Registry证书验证(仅测试环境)
如果是测试场景,可以在Docker配置文件中标记目标Registry为不安全:
修改DOCKER_CONFIG_JSON对应的Secret内容,添加insecure-registries字段:
{ "auths": { "xyz": { "auth": "base64编码的用户名密码" } }, "insecure-registries": ["xyz"] }
Kaniko会读取该配置,跳过对目标Registry的证书验证。
方案3:验证Registry地址与证书匹配
确认目标Registry地址xyz的拼写正确,且对应的证书确实由你的私有CA签发,避免因地址错误导致证书不匹配。
内容的提问来源于stack exchange,提问作者user25052396
相关产品推荐
相关产品推荐

