我已经设置了一个带有不安全私有注册表的 k3s Kubernetes 独立服务器,但 k3s 无法从中提取镜像。该registries.yaml
文件的设置与文档所述一致。如下所示。
mirrors:
"registry.cube.local:5000":
endpoint:
- "http://registry.cube.local:5000"
该图像位于注册表中,但 k3s pod 不会推送它们,并显示以下错误:
failed to do request: Head "https://registry.cube.local:5000/v2/batch/manifests/v0.9": http: server gave HTTP response to HTTPS client
根据registries.yaml
配置,这种情况不应该发生,因为它配置为使用 http。我去检查日志以journalctl -xn -u k3s.service | less
发现错误,我可以看到以下警告:
Oct 17 21:51:20 local k3s[25571]: I1017 21:51:20.401763 25571 event.go:294] "Event occurred" object="kube-system/registries" fieldPath="" kind="Addon" apiVersion="k3s.cattle.io/v1" type="Warning" reason="ParseManifestFailed" message="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\"]}}}'"
我确实对 yaml 文件进行了 lint,并且根据日志,转换为 JSON 似乎是正确的,所以我不认为这是一个文件格式化的问题。
我尝试设置一个安全的私人注册表,但没有成功,因为它也依赖于registries.yaml
文件配置才能工作,而且出现了同样的错误。
我很好奇在我向他们的 github 提交 bug 之前,是否有人看到了这个问题。这对我来说真的毫无意义。
答案1
一位 Github 贡献者帮助了我:https://github.com/k3s-io/k3s/issues/8677#issuecomment-1768569901
我把文件放在了错误的位置。尽管将安装位置设置为其他位置,registries.yaml 仍按/etc/rancher/k3s/registries.yaml
文档所述读取。