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

求助:Kubernetes节点拉取私有镜像遇x509未知证书权威问题

解决Kubernetes拉取私有自签名证书Registry镜像的x509错误

Docker和Kubernetes的证书信任机制相互独立,你给Docker配置的证书与不安全Registry规则仅对Docker生效,但kubelet或容器运行时(如containerd)并不认可这套配置,因此会出现证书不被信任的错误。以下是几种可行的解决办法:

方法1:给节点系统证书池添加CA证书(单节点/少量节点适用)

  • 将自签名CA证书复制到节点的系统证书目录:
    cp /path/to/your/ca.crt /usr/local/share/ca-certificates/private-registry-ca.crt
    
  • 更新系统证书信任列表:
    • Debian/Ubuntu系统执行:update-ca-certificates
    • RHEL/CentOS/Fedora系统执行:update-ca-trust extract
  • 重启kubelet服务,使其加载新的证书配置:
    systemctl restart kubelet
    

方法2:用ConfigMap批量给所有节点挂载CA证书(集群节点多适用)

  • 在kube-system命名空间下创建存储CA证书的ConfigMap:
    kubectl create configmap registry-ca --from-file=ca.crt=/path/to/your/ca.crt -n kube-system
    
  • 编辑kubelet的配置文件(以systemd管理的kubelet为例,路径通常是/etc/systemd/system/kubelet.service.d/10-kubeadm.conf),在[Service]段的ExecStart下方添加卷挂载配置:
    ExecStartPre=-mkdir -p /etc/ssl/certs/registry-ca
    VolumeMounts=
      - name: registry-ca
        mountPath: /etc/ssl/certs/registry-ca/ca.crt
        subPath: ca.crt
    Volumes=
      - name: registry-ca
        configMap:
          name: registry-ca
    
    若使用kubeadm动态配置,可修改/var/lib/kubelet/config.yaml,在volumeMounts和volumes字段中添加对应配置。
  • 重载systemd配置并重启kubelet:
    systemctl daemon-reload
    systemctl restart kubelet
    

方法3:针对containerd容器运行时单独配置(集群用containerd而非Docker时)

如果你的Kubernetes集群使用containerd作为容器运行时,需单独配置containerd的证书信任:

  • 编辑containerd的配置文件/etc/containerd/config.toml,找到[plugins."io.containerd.grpc.v1.cri".registry]段,添加私有Registry的TLS配置:
    [plugins."io.containerd.grpc.v1.cri".registry.configs."private_regsitry_domain:port".tls]
      ca_file = "/etc/ssl/certs/private-registry-ca.crt"
    
  • 重启containerd服务:
    systemctl restart containerd
    

完成上述操作后,重新部署Pod即可正常拉取私有Registry的镜像。

内容的提问来源于stack exchange,提问作者Vanitha Varadharajan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 23:35:20