You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes中使用自签名证书Minio的Docker Registry出现x509错误

排查点梳理

第一步:定位错误发生的链路节点

首先先明确x509错误是哪一段链路抛出的,避免错配配置:

  • 拉取Registry的完整运行日志,确认错误信息中关联的请求目标地址:如果地址是Minio的访问地址,说明是Registry访问Minio时证书校验失败;如果地址是Registry自身的访问地址,说明是上游的dind/客户端访问Registry时校验失败
  • 逐层手动验证证书有效性:
    • 进入Registry容器内部,执行curl -v https://<你的Minio访问地址>,查看是否返回证书校验错误
    • 进入dind容器内部,执行curl -v https://<你的Registry访问地址>,查看是否返回证书校验错误
    • 到客户端节点,执行curl -v https://<你推送镜像时用的Registry地址>,查看是否返回证书校验错误

第二步:证书配置问题排查

  • 检查自签名证书的SAN(使用者备用名称)字段:Minio的证书SAN必须包含你在Registry中配置的Minio访问地址(支持域名、集群服务名、IP),如果SAN字段没有匹配的地址,哪怕CA已经被系统信任,也会触发证书校验失败
  • 确认系统CA证书加载生效:
    • 如果容器是Alpine基础镜像,需要先安装ca-certificates依赖包,再将CA证书放入/usr/local/share/ca-certificates/目录,且证书后缀必须为.crt,最后执行update-ca-certificates才能正常加载
    • 执行完更新命令后,可以执行awk -v cmd='openssl x509 -noout -subject' '/BEGIN/{close(cmd)};{print | cmd}' < /etc/ssl/certs/ca-certificates.crt | grep <你的CA证书主题名>,确认CA证书确实被写入系统根证书库
  • 确认Docker的certs.d配置正确:
    • 路径必须和你访问Registry的地址完全匹配,如果你用的是非443端口,路径必须包含端口,比如Registry访问地址是registry.mydomain:5000,则证书必须放在/etc/docker/certs.d/registry.mydomain:5000/目录下
    • 目录下的CA证书必须命名为ca.crt,文件权限设置为644,修改完成后必须重启Docker daemon才会生效
  • Registry访问Minio的证书配置:不需要修改Registry源码,直接在Registry的config.yml配置文件的storage.s3配置段添加ca: /path/to/minio-ca.crt字段,指定Minio CA证书的路径即可,该配置优先级高于环境变量,适配Registry内置的S3存储客户端

第三步:运行态配置校验

  • 检查K8s Deployment的卷挂载配置,确认你放置的CA证书文件确实被正确挂载到运行中的容器对应路径,没有出现路径拼写错误、挂载为空、权限不足的问题
  • 如果你是用K8s Service暴露Minio服务,建议Registry用集群内部服务名访问Minio,且Minio证书的SAN需要包含<Minio服务名>.<命名空间>.svc.cluster.local的集群内部域名,避免走外部链路访问带来的额外校验问题

内容的提问来源于stack exchange,提问作者Hannah Ritter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 04:42:03