微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 containerd 中添加不安全的注册表

如何解决在 containerd 中添加不安全的注册表

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

[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 registry 添加daemon.json 文件中,docker 会从中提取图像,我如何在 containerd 中实现相同的效果? 在 k8s 集群中替换 docker 作为运行时。

解决方法

添加以下配置:

[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"]
        [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 验证。另请参阅 registry TLS communication configuration 上的文档。

,

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

错误日志http: server gave HTTP response to HTTPS client,显示registry使用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 <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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。