前言
在学习、研究 K8S 的过程中,经常遇到镜像拉取不了的网络问题,这并不是镜像本身的问题,而是国内的“国情”导致无法正常访问墙外资源。
这些镜像有的是 K8S 团队自研的插件,也有一些是爱好者开发的第三方组件,正常来说,他们会存放于 gcr.io 或者 quay.io 中。
gcr.io 是 谷歌的镜像仓库,是禁止访问的,而 quay.io 是 RedHat 的镜像仓库,可以访问,但速度较慢。
那如何应对这种网络问题呢?
现成的镜像代理仓库
k8s.gcr.io 源代理仓库
ctr images tag k8s.m.daocloud.io/scheduler-plugins/kube-scheduler:v0.24.9
这是 gcr.io/google-containers 的仓库,使用阿里云镜像
| 1 | k8s.gcr.io/sig-storage/csi-node-driver-registrar:v2.3.0 | 
也可以使用 lank8s.cn,他们的对应关系 k8s.gcr.io –> lank8s.cn,gcr.io –> gcr.lank8s.cn
| 1 | k8s.gcr.io/sig-storage/csi-node-driver-registrar:v2.3.0 | 
quay.io 源代理仓库
这是Red Hat运营的镜像库,虽然没有被墙,但下载还是比较慢,可以使用中科大镜像
| 1 | quay.io/kubevirt/virt-api:v0.45.0 | 
gcr.io和k8s.gcr.io 双源代理仓库
github地址 - anjia0532/gcr.io_mirror
该仓库提供在线镜像代理服务,只要你以固定格式创建issue,就会自动触发脚本去下载镜像,然后你再使用对应的仓库名去下载即可
| 1 | # 原镜像名称 | 
该仓库目前仅支持 gcr.io和k8s.gcr.io 镜像
支持多源的加速仓库
最近发现了个多源镜像加速的开源项目
github地址 - public-image-mirror
已支持的替换源镜像
如果想要新增, 提 PR 修改即可。例如 PR#1, 并请在 PR 提交前排序: ./hack/fmt.sh mirror.txt
使用方法
增加前缀 (推荐方式)。比如:
| 1 | k8s.gcr.io/coredns/coredns => m.daocloud.io/k8s.gcr.io/coredns/coredns | 
或者 支持的镜像仓库 的 前缀替换 就可以使用。比如:
| 1 | k8s.gcr.io/coredns/coredns => k8s-gcr.m.daocloud.io/coredns/coredns | 
提前同步的 Registry
用于 github action 从源 registry 提前同步到 m.daocloud.io 下
如果想要新增, 提 PR 修改即可。例如 PR#28, 并请在 PR 提交前排序:./hack/fmt.sh domain.txt
支持前缀替换的 Registry
如有新增, 提 PR 修改下面的表格, 合并后由人工配置
| 源站 | 替换为 | 
|---|---|
| cr.l5d.io | l5d.m.daocloud.io | 
| docker.elastic.co | elastic.m.daocloud.io | 
| docker.io | docker.m.daocloud.io | 
| gcr.io | gcr.m.daocloud.io | 
| ghcr.io | ghcr.m.daocloud.io | 
| k8s.gcr.io | k8s-gcr.m.daocloud.io | 
| registry.k8s.io | k8s.m.daocloud.io | 
| mcr.microsoft.com | mcr.m.daocloud.io | 
| nvcr.io | nvcr.m.daocloud.io | 
| quay.io | quay.m.daocloud.io | 
| registry.jujucharms.com | jujucharms.m.daocloud.io | 
| rocks.canonical.com | rocks-canonical.m.daocloud.io | 
ReTag(可选操作)
ctr为镜像打tag
| 1 | ctr images tag oldimage:v1 newimage:v2 | 
docker为镜像打tag
| 1 | docker tag oldimage:v1 newimage:v2 | 
使用自己的代理下载
若你自己有梯子,并且是 http 和 https 协议的(sock5 的不行),可以先在自己的电脑上使用 docker 中配置代理
| 1 | { | 
有了代理后,就可以访问外面的镜像,下载完成后,使用 docker save 打包成 tar 包,再把 tar 上传到服务器上,最后使用 docker load 导入到服务器的镜像仓库中。
| 1 | # 导出 | 
使用 docker playground 下载
docker playground 提供一个在线的 docker 运行环境,方便新手上去操作学习。
巧的是,docker playground 服务器也在墙外,因此拉取 gcr 的镜像非常快。
利用这个,可以用来拉取 gcr 的镜像,最后再 push 到我们的私人仓库(比如 docker hub,或者 harbor)
首先登陆 docker playground
没帐号的注册一个,进去后,新增一个实例
然后在终端上拉取镜像,打新 tag,然后再推送到私人仓库,速度都是非常快的。

完成后,在其他机器上,就可以直接拉取我们私人仓库的镜像
