6

尝试将不安全的注册表添加到容器配置中,如下所示:

[plugins."io.containerd.grpc.v1.cri".cni]
      bin_dir = "/opt/cni/bin"
      conf_dir = "/etc/cni/net.d"
      max_conf_num = 1
      conf_template = ""
    [plugins."io.containerd.grpc.v1.cri".registry]
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
          endpoint = ["https://registry-1.docker.io"]
        [plugin."io.containerd.grpc.v1.cri".registry.mirrors."test.http-registry.io"]
          endpoint = ["http://v048011.dom600.lab:5000"]

即使将其添加到config.toml,当从不安全的注册表中提取图像时,它也会失败:

sudo ctr image pull v048011.dom600.lab:5000:5000/myjenkins:latest

ctr: failed to resolve reference "v048011.dom600.lab:5000/myjenkins:latest": failed to do request: Head https://v048011.dom600.lab:5000:5000/v2/myjenkins/manifests/latest: http: server gave HTTP response to HTTPS client

docker我们可以添加insecure registrydaemon.json文件中,docker 会从中提取图像,我怎样才能实现相同的效果containerd?将 docker 替换为 k8s 集群中的运行时。

4

2 回答 2

6

ctr读取 cri 使用此配置的/etc/containerd/config.toml 配置文件
,这意味着kubectlcrictl将使用它。

错误日志http: server gave HTTP response to HTTPS client显示注册表正在使用 http,但 ctr 正在尝试使用 https 连接它。
因此,如果您想从 http 中提取图像,则应--plain-http使用 ctr 添加参数,如下所示:

ctr i pull --plain-http <image>

注册表配置文档是:https ://github.com/containerd/containerd/blob/master/docs/cri/registry.md

你应该可以用crictl拉取镜像,记得重启containerd。

sudo crictl -r /run/containerd/containerd.sock pull <image>

#or config runntime once for all
sudo crictl config runtime-endpoint /run/containerd/containerd.sock
sudo crictl pull <image>

配置示例:

# /etc/containerd/config.toml
# change <IP>:5000 to your registry url

[plugins."io.containerd.grpc.v1.cri".registry]
  [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
    [plugins."io.containerd.grpc.v1.cri".registry.mirrors."<IP>:5000"]
      endpoint = ["http://<IP>:5000"]
  [plugins."io.containerd.grpc.v1.cri".registry.configs]
    [plugins."io.containerd.grpc.v1.cri".registry.configs."<IP>:5000".tls]
      insecure_skip_verify = true
于 2021-04-29T03:04:40.593 回答
2

添加以下配置:

    [plugins."io.containerd.grpc.v1.cri".cni]
      bin_dir = "/opt/cni/bin"
      conf_dir = "/etc/cni/net.d"
      max_conf_num = 1
      conf_template = ""
    [plugins."io.containerd.grpc.v1.cri".registry]
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
          endpoint = ["https://registry-1.docker.io"]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."test.http-registry.io"]
          endpoint = ["http://v048011.dom600.lab:5000"]
        [plugins."io.containerd.grpc.v1.cri".registry.configs]
          [plugins."io.containerd.grpc.v1.cri".registry.configs."test.http-registry.io".tls]
            insecure_skip_verify = true

应该跳过测试注册表的 TLS 验证。另请参阅有关注册表 TLS 通信配置的文档。

编辑:请注意插件中的“s”,您的配置中有错字。

于 2021-01-12T10:25:24.783 回答