docker - Microk8s 无法从私有注册表中提取
问题描述
我在 EC2 实例上运行 Microk8s。我无法从我们的私有注册表中提取容器。尝试运行这样的容器时kubectl describe pod
显示:
无法提取图像“docker.xxx.com/import:v1”:rpc 错误:代码 = 未知 desc = 无法解析图像“docker.xxx.com/import:v1”:没有可用的注册表端点:无法获取匿名令牌:意外状态:401 Unauthorized
我可以从那台机器上docker login
。docker pull
我用来部署容器的 yaml 在另一个(非容器化)集群上运行良好。它指的是一个 pull secret,它与另一个集群中使用的相同,并且在那里工作正常。
我在 Microk8s 的 containerd-template.toml 中添加了以下条目:
[plugins.cri.registry]
[plugins.cri.registry.mirrors]
...
[plugins.cri.registry.mirrors."docker.xxx.com"]
endpoint = ["https://docker.xxx.com"]
我不知道我可能还缺少什么。
解决方案
如果您收到401
错误,则身份验证可能有问题。例如,您缺少私有注册表的凭据。
为了确保 microk8s 使用正确的凭据,除了mirrors
配置中的部分之外,您还必须指定auths
放置 docker 注册表凭据的部分。
[plugins.cri.registry.auths]
[plugins.cri.registry.auths."https://gcr.io"]
username = ""
password = ""
auth = ""
identitytoken = ""
该部分中的属性与您可以在.docker/config.json
.
请注意,这是同一级别的部分,因为mirrors
它不应该是mirrors
条目的一部分,而是作为新部分添加。另一个重要部分是确保auth
主机与您的注册表主机匹配(例如 https 与 http)。
有关更多详细信息,请查看参考:https ://github.com/containerd/cri/blob/master/docs/registry.md
ps 请记住,containerd
microk8s[1] 支持,v1.14
如果您使用旧版本,您应该检查其他选项,如官方 kubernates 文档[2]
[1] https://microk8s.io/docs/working
[2] https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
推荐阅读
- twilio - Twilio 函数 - 传入参数并格式化 SMS 正文以包含参数
- npm - 在 Azure Pipeline 中安装对等依赖项
- python - 如何在 for 循环的每次迭代中循环显示绘图中的颜色
- python - 如何从 .yuv 视频文件中提取某些帧并使用 FFmpeg、OpenCV 和 python 创建新视频?
- asp.net-core - 管理 TagHelper 的范围
- python - 安全的正则表达式从 html 中查找电子邮件
- vb.net - 如何使用管理员权限编写注册表?
- ssl - 让我们加密证书颁发
- vlcj - 带有运行时选项的 MediaList 播放项目
- scala - Scala中的LazyList和List有什么区别?