正常部署可拉取私有镜像,Knative拉取失败求助
问题原因
普通Kubernetes Pod拉取镜像由节点上的containerd处理,你已经将私有仓库配置为containerd的不安全镜像仓库,因此可以正常拉取。但Knative在创建Revision前,会先执行镜像摘要解析操作(将镜像tag转换为固定digest,避免镜像被篡改),这个操作由Knative Serving的控制平面组件(如serving-controller)完成,而这些组件并未配置信任该HTTP私有仓库,默认会使用HTTPS协议访问,从而触发http: server gave HTTP response to HTTPS client错误。
解决方案
需要给Knative Serving控制平面配置信任该HTTP私有仓库,具体操作如下:
- 编辑Knative Serving的
config-deployment配置映射:
kubectl edit configmap config-deployment -n knative-serving
- 在
data字段下添加私有仓库的不安全访问配置:
data: # 保留已有配置,新增以下内容 registries.insecure: | <ip>:5000
若你的私有仓库是带自签名证书的HTTPS仓库,替换为
registries.skip-cert-verify: | <ip>:5000即可
- 保存退出后,Knative Serving的控制平面组件会自动重启,之后镜像解析操作就会使用HTTP协议访问你的私有仓库,拉取失败问题即可解决。
额外验证
- 确认
container-registrySecret的docker-server字段确实为http://<ip>:5000,避免协议配置错误。 - 确保集群所有节点的containerd都已正确配置该私有仓库为不安全镜像仓库(你已完成此步骤,可跳过)。
内容的提问来源于stack exchange,提问作者Chris G.
相关产品推荐
相关产品推荐

