我有一个自定义文件,其中/etc/containerd/certs.d/registry.at.my.company/hosts.toml
为在我的服务器上运行的本地注册表容器设置了一些配置。当我为 Kubernetes 的 CRI 配置它时,它工作得很好,但我和我的同事发现令人沮丧的是,我们必须在手动运行时添加--hosts-dir /etc/containerd/certs.d
所有命令(在 K8s 之外)。当我们使用 docker 执行此操作时,它非常简单:我们只需在 docker 守护进程的 JSON 配置文件 ( ) 上设置正确的选项,并且运行良好。但我很难找到具有类似行为的等效设置。当然,CRI插件正在使用ctr image pull
ctr
"insecure-registry": "127.0.0.1"
ctr
hosts.toml
文件我设置得很好,但我希望能够手动提取图像,而不必向命令添加额外的标志。有没有一种方法可以配置containerd,这样就ctr image pull
不需要--hosts-dir
每次都通过?
该hosts.toml
文件如下所示:
server = "http://registry.at.my.company"
[host."http://registry.at.my.company"]
skip_verify = true
plain-http = true
在文件中/etc/containerd/config.toml
,我有 CRI 指向它,如下所示:
[plugins."io.containerd.grpc.v1.cri".registry]
config_path = "/etc/containerd/certs.d"
但是,正如我在上面猜测和所说的,这似乎只影响 kubelet 与 containerd 的交互方式,而不是如何ctr
交互。
一些背景上下文:
我们运行这个本地注册表,其中包含/etc/hosts
如下条目:127.0.1.1 registry.at.my.company
。加上一些防火墙规则,这使得使用我们 Kubernetes 集群的每个人都必须将其镜像推送到registry.at.my.company
并配置其 pod 以使用来自那里的镜像,因为我们的 kubelet 将无法从该域以外的任何地方拉取;为了使我们的注册表不是 SPoF,我们将这些本地注册表容器作为只读镜像运行(并且注册表容器的服务器本身只接受本地连接,从而避免了缺少 SSL 证书的问题。)我不确定这是否与我的问题相关,但它应该有助于解释为什么我在谈论insecure-registry
docker 中的旧选项以及为什么我hosts.toml
使用http
而不是https
,以免引起任何人的担忧。
另外,这是我正在使用的containerd 版本1.6.19。