K3s无法解析registries.yaml,导致无法从非安全私有镜像仓库拉取镜像
K3s无法解析registries.yaml,导致无法从非安全私有镜像仓库拉取镜像
我看到你的问题了,核心问题出在registries.yaml的格式不符合K3s的要求——你现在的文件只是单纯的镜像仓库配置片段,但K3s期望这个文件是一个完整的Kubernetes Addon资源对象,所以才会报Object 'Kind' is missing的错误,进而导致镜像拉取时没有应用你的HTTP配置,出现http: server gave HTTP response to HTTPS client的问题。
问题根源
你看journalctl里的警告已经说得很明确了:
Parse manifest at "/root/k3s/server/manifests/registries.yaml" failed: Object 'Kind' is missing in '{"mirrors":{"registry.cube.local:5000":{"endpoint":["http://registry.cube.local:5000"]}}}'
K3s的server/manifests目录下的所有文件,都是作为Kubernetes资源清单来加载的,必须符合K8s资源的标准结构(要有apiVersion、kind、metadata这些字段),而不是单纯的配置键值对。你之前写的内容只是资源里的spec部分,缺少了外层的资源定义。
正确的registries.yaml配置
把你的文件改成下面的完整结构,就能解决解析问题:
apiVersion: k3s.cattle.io/v1 kind: Addon metadata: name: registries spec: mirrors: "registry.cube.local:5000": endpoint: - "http://registry.cube.local:5000"
后续操作
- 替换你的
/root/k3s/server/manifests/registries.yaml文件为上面的内容 - 重启K3s服务生效:
systemctl restart k3s.service - 再次查看日志,确认没有
ParseManifestFailed的警告:journalctl -xn -u k3s.service | less - 尝试重新拉取镜像,应该就会使用你配置的HTTP endpoint了
额外检查点
- 确保K3s节点能正常访问
http://registry.cube.local:5000,可以用curl http://registry.cube.local:5000/v2/测试连通性 - 确认节点防火墙/安全组允许5000端口的HTTP流量通过
备注:内容来源于stack exchange,提问作者lauksas
相关产品推荐
相关产品推荐

