「开源摘星计划」Containerd拉取Harbor中的私有镜像,云原生进阶必备技能

网友投稿 364 2022-09-09

「开源摘星计划」Containerd拉取Harbor中的私有镜像,云原生进阶必备技能

【摘要】 配置 Containerd 拉取 harbor 私有仓库中的镜像,打工人必备技能!

本文已参与「开源摘星计划」,欢迎正在阅读的你加入。

活动链接:​​shim作为默认的底层容器运行时,而是通过Container Runtime Interface(CRI)使用containerd来作为容器运行时, 因此原来在docker中配置的个人仓库环境不再起作用,导致k8s配置pods时拉取镜像失败, 本文将进行演示如何在 containerd 配置从Harbor私有仓库拉取镜像。

环境说明

操作系统:CentOSHarbor Version:2.3.5Containerd Version:1.6.5Harbor地址:​​~]# vim /etc/containerd/config.toml...version = 2...[plugins] [plugins."io.containerd.grpc.v1.cri"] [plugins."io.containerd.grpc.v1.cri".cni] ...########################################################配置以下部分: [plugins."io.containerd.grpc.v1.cri".registry] config_path = "" [plugins."io.containerd.grpc.v1.cri".registry.auths] [plugins."io.containerd.grpc.v1.cri".registry.headers] [plugins."io.containerd.grpc.v1.cri".registry.mirrors] [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] endpoint = [" [plugins."io.containerd.grpc.v1.cri".registry.mirrors."harbor.lidabai"] #名称 endpoint = [" #Harbor的Url地址 [plugins."io.containerd.grpc.v1.cri".registry.configs] [plugin."io.containerd.grpc.v1.cri".registry.configs."harbor.lidabai".tls] #tle,harbor 证书认证配置 insecure_skip_verify = true #是否跳过证书认证 ca_file = "/etc/containerd/harbor/ca.crt" # CA 证书 cert_file = "/etc/containerd/harbor/harbor.crt" # harbor 证书 key_file = "/etc/containerd/harbor/harbor.key" # harbor 私钥 [plugin."io.containerd.grpc.v1.cri".registry.configs."harbor.lidabai".auth] #auth,配置注册表凭据 username = "admin" #Harbor用户名 password = "Harbor12345" #Harbor密码 auth = "" identitytoken = ""

重启containerd.service服务

重新加载载 systemd 的 daemon守护进程并重启containerd.service服务,然后k8s集群节点便可正常从Harbor拉取镜像了。

$ systemctl daemon-reload && systemctl restart containerd.service

拉取镜像

虽然上面的方式可以使k8s直接拉取镜像,但是在利用 ctl命令 进行手动拉取镜像此时会报如下错误(巨坑-经过无数次失败测试,原本以为是CA证书签发的harbor证书问题),即使你在config.toml中配置insecure_skip_verify为true也是不行的,可以添加-k参数跳过证书校验。

[root@lidabai ~]# ctr -n harbor.lidabai i pull 192.168.2.22:443/library/prepare:v2.5.1 -k

查看下载的镜像

刚才我们下载镜像时通过-n参数指定了namespace。在查看时也要通过-n指定namespace,否则看不到。

[root@lidabai ~]# ctr -n harbor.lidabai images ls

踩坑记录

unexpected status code [manifests 1.28]: 401 Unauthorized

【问题描述】

下载Harbor中的私有镜像时报错:

[root@lidabai app]# ctr -n harbor.lidabai images pull 192.168.2.22:443/lidabai/busybox:1.28 -kctr: failed to resolve reference "192.168.2.22:443/lidabai/busybox:1.28": unexpected status code [manifests 1.28]: 401 Unauthorized

【原因】401未经授权

【解决】通过-u参数指定Harbor用户名和密码。

$ ctr -n harbor.lidabai images pull 192.168.2.22:443/lidabai/busybox:1.28 -u admin:Harbor12345 -k

x509: certificate signed by unknown authority

【报错描述】在拉取镜像时报出错误:

[root@lidabai ~]# ctr images pull 192.168.2.22:443/library/prepare:v2.5.1error="failed to do request: Head \"x509: certificate signed by unknown authority" host="192.168.2.22:443"ctr: failed to resolve reference "192.168.2.22:443/library/prepare:v2.5.1": failed to do request: Head "x509: certificate signed by unknown authority

【解决办法】:

1)通过-k参数跳过证书校验。

[root@lidabai ~]# ctr -n harbor.lidabai i pull 192.168.2.22:443/library/prepare:v2.5.1 -k

2)指定CA证书、Harbor相关证书文件路径。

$ mkdir /etc/containerd/harbor/ #创建证书存放目录$ scp /app/harbor-cert/{ca.pem,harbor.pem,harbor-key.pem} 192.168.2.41:/etc/containerd/harbor/$ ctr -n harbor.lidabai images pull 192.168.2.22:443/library/prepare:v2.5.1 \--tlscacert /etc/containerd/harbor/ca.pem \ #或ca.crt--tlscert /etc/containerd/harbor/harbor.pem \ #或harbor.crt--tlskey /etc/containerd/harbor/harbor-key.pem #或harbor.key

精品文章阅读

​​Harbor高可用集群设计及部署(实操+视频),基于离线安装方式​​

​​Harbor进阶:使用Harbor存储Helm chart​​

​​Python实现Harbor私有镜像仓库的垃圾自动化​​

​​Harbor jobservice组件异常问题处理​​

​​Harbor高可用设计: 使用外部Redis缓存部分​​

​​阿里云镜像迁移到Harbor详细的操作步骤​​

​​如何将dockerhub上的镜像迁移到Harbor私有镜像仓库中?​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【排错】node not found
下一篇:德奥委会调查:多数运动员对参加奥运会信心坚定!
相关文章

 发表评论

暂时没有评论,来抢沙发吧~