Containerd 注册表主机配置
大家好,我是秋意零。今天分享如何配置 Containerd 注册表主机配置。
不知道大家在使用 Containerd 作为容器运行时时,是否有遇到下列情况?
-
为啥我配置了 config_path
路径不生效,反而Containerd
还报错呢? -
拉取镜像时为啥我 nerdctl
命令可以跳过证书验证,使用ctr
命令就不行了呢?
带着这两个疑问,我们接着往下看!
注册表主机配置
containerd 配置文件中registry.mirrors
和registry.configs
部分已被弃用。现在,由config_path="/etc/containerd/certs.d"
配置路径取代。
注意:如果配置config_path
,就不要配置registry.mirrors
和registry.configs
。如下图:
下面这两个Containerd报错原因:提供config_path
时无法设置mirrors
与configs
level=warning msg="failed to load plugin io.containerd.grpc.v1.cri" error="invalid plugin config: mirrors
cannot be set when config_path
is provided"
Nov 19 14:00:36 k8s-master-1 containerd[65105]: time="2024-11-19T14:00:36.952445827+08:00" level=warning msg="failed to load plugin io.containerd.grpc.v1.cri" error="invalid plugin config: configs.tls
cannot be set when config_path
is provided"
注册表主机命名空间
注册表主机(Registry Host): 是容器拉取和推送的的地址,可以是本地和远程。
名称空间(NameSpace)这里指:registry.first.qiuyl.com
,也就是我们镜像仓库主机的域名或IP。这里必须以该方式进行命名,否则无效。
hosts.toml:是我们配置Registry Host
规则的地方
[root@k8s-master-3]# mkdir -p /etc/containerd/certs.d/
[root@k8s-master-3]# mkdir registry.first.qiuyl.com
[root@k8s-master-3]# cat /etc/containerd/certs.d/registry.first.qiuyl.com/hosts.toml
# server = "https://registry-1.docker.io"
[host."https://registry.first.qiuyl.com"]
capabilities = ["pull", "resolve", "push"]
skip_verify = true
# ca = "/etc/certs/mirror.pem"
1)参数解析
1. server = "https://registry-1.docker.io"
-
指定一个默认的镜像注册表。
2. [host."https://registry.first.qiuyl.com"]
-
配置一个私有镜像仓库。
3. capabilities = ["pull", "resolve", "push"]
-
含义:
-
-
定义了客户端对这个自定义镜像仓库的操作能力:
-
-
-
-
**pull**
:允许从这个仓库拉取镜像。 -
**resolve**
:允许解析镜像的名称和标签。 -
**push**
:允许向这个仓库推送镜像。
-
-
-
-
这表示你对 https://registry.first.qiuyl.com
仓库拥有完整的操作权限。
-
4. skip_verify = true
-
绕过 TLS 验证,如果不绕过,配置 ca 字段。例如: ca = "/etc/certs/mirror.pem"
2)server与host字段,使用上的区别与体现
场景/特性 | registry-1.docker.io (默认官方库) |
https://registry.first.qiuyl.com (私有库) |
---|---|---|
镜像地址格式 | nginx:latest |
registry.first.qiuyl.com/myimage:latest |
默认行为 | 未指定地址时,默认去官方仓库 | 需要明确指定完整地址 |
支持能力 | 仅支持拉取公开镜像 | 支持拉取和推送镜像 |
使用场景 | 拉取公共镜像(如 nginx , redis 等) |
企业内部镜像存储、部署或镜像发布 |
安全性 | 使用 Docker 官方签名镜像,安全性高 | 如果未配置 HTTPS 或认证,可能存在安全隐患 |
配置要求 | 无需额外配置 | 需配置 hosts.toml 和私有仓库访问规则 |
ctr与nerdctl差异
经过上诉的配置,重启Containerd生效后。我们分别使用nerdctl
与ctr
命令进行pull镜像,由于我们这里的Harbor仓库配置的自建TLS证书,所以配置绕过TLS验证或者配置ca字段。
更具上面的配置,可以看到我们配置了绕过TLS验证skip_verify = true
但好像对ctr
命令无效?
1. 配置差异的原因
nerdctl
-
nerdctl
是一个更加用户友好的 CLI 工具,底层基于containerd
,且默认会读取/etc/containerd/certs.d/
下的hosts.toml
文件配置。 -
hosts.toml
文件启用了skip_verify = true
,因此nerdctl
可以跳过证书验证。
ctr
-
ctr
是containerd
的官方 CLI 工具,但它设计为开发者调试工具,不会完全加载containerd
的配置(如hosts.toml
或config.toml
)。 -
ctr
更偏向直接调用底层 API,因此不会自动处理skip_verify
之类的配置。
如何使ctr命令也能读取我们hosts.toml
配置呢?
-
指定 --hosts-dir /etc/containerd/certs.d
参数即可
ctr -n k8s.io image pull --hosts-dir /etc/containerd/certs.d registry.first.qiuyl.com/goodrain/rbd-api:v5.17.3-release
最后,推荐大家使用 nerdctl 命令,这也是 Containerd 官网的推荐。ctr 与 crictl 仅用于调试。
参考
Containerd 官网:https://containerd.io/docs/
Containerd GitHub doc:https://github.com/containerd/containerd/blob/main/docs/hosts.md
Containerd GitHub 开始:https://github.com/containerd/containerd/blob/main/docs/getting-started.md
End
个人博客:博客介绍
欢迎各位-加群交流(推荐微信群聊):运维交流/商务合作,集合
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://www.qiuyl.com/cloudnative/318
共有 0 条评论