前言
在学习、研究 Kubernetes 的过程中,经常遇到镜像拉取不了的网络问题,这并不是镜像本身的问题,而是国内的"国情"导致无法正常访问墙外资源。
这些镜像有的是 Kubernetes 团队自研的插件,也有一些是爱好者开发的第三方组件,正常来说,它们会存放于 gcr.io 或者 quay.io 中。
gcr.io是谷歌的镜像仓库,在国内是禁止访问的quay.io是 Red Hat 的镜像仓库,可以访问,但速度较慢
那如何应对这种网络问题呢?
现成的镜像代理仓库
k8s.gcr.io 源代理仓库
这是 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 地址:DaoCloud/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 协议的(SOCKS5 的不行),可以先在自己的电脑上使用 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,然后再推送到私人仓库,速度都是非常快的。

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