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

执行kubectl apply出现ImagePullBackOff错误,工作节点拉取镜像遇未知CA证书签名问题及AKS安装疑问

解决AKS工作节点拉取镜像时的x509证书信任问题

首先得戳破一个关键误区:你在操作机器(或控制节点)的/etc/ssl/certs/ca-certificates.crt里添加CA证书根本没用——因为实际执行镜像拉取操作的是工作节点上的容器运行时(AKS默认是containerd),kubectl只是把部署请求提交给集群,它本身不参与镜像拉取流程。

问题根源拆解

你的错误日志已经把原因说得很明确:

Warning Failed 4s (x2 over 17s) kubelet Failed to pull image "nginx:1.14.2": rpc error: code = Unknown desc = failed to pull and unpack image "docker.io/library/nginx:1.14.2": failed to resolve reference "docker.io/library/nginx:1.14.2": failed to do request: Head "https://registry-1.docker.io/v2/library/nginx/manifests/1.14.2": x509: certificate signed by unknown authority

工作节点上的containerd在请求docker.io镜像仓库时,无法验证对方的证书(大概率是你的环境通过代理或内部CA拦截了HTTPS请求),所以必须让containerd信任你的自定义根CA证书。

具体解决步骤

针对AKS默认的containerd运行时,按以下步骤操作:

  1. 登录到每个工作节点
    可以通过az aks ssh命令(Azure AKS场景)或集群允许的其他方式,登录到集群的所有工作节点。

  2. 为containerd配置自定义CA信任

    • 创建docker.io的证书配置目录(不存在则新建):
      sudo mkdir -p /etc/containerd/certs.d/docker.io/
      
    • 将你的根CA证书复制到该目录,命名为ca.crt:
      sudo cp /path/to/your/root-ca.crt /etc/containerd/certs.d/docker.io/ca.crt
      
    • (可选)如果需要让系统全局信任该CA,也同步更新系统证书:
      sudo cp /path/to/your/root-ca.crt /usr/local/share/ca-certificates/
      sudo update-ca-certificates
      
  3. 重启containerd服务使配置生效

    sudo systemctl restart containerd
    
  4. 验证配置是否生效
    在工作节点上用crictl测试拉取镜像:

    crictl pull nginx:1.14.2
    

    如果能成功拉取,回到控制节点重新执行kubectl apply命令即可正常部署。

关于AKS安装未失败的疑惑

这完全合理:AKS安装过程中拉取的是**微软托管的MCR镜像仓库(mcr.microsoft.com)**里的集群组件(比如kubelet、kube-proxy等),这些仓库的证书是公共信任机构签发的,不需要自定义CA就能通过验证。而你现在拉取的是docker.io的公共镜像,你的环境可能对外部HTTPS请求做了拦截,所以才需要额外配置自定义CA。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 22:27:34