Docker / Kubernetes / 云原生

解决国内无法拉取 k8s.gcr.io 镜像的方法与思路

浅时光博客 · 4月12日 · 2021年 · · 33.8w 次已读

一、场景描述

大家都知道,在部署K8S时,一些关键组件的镜像地址通常存储在k8s.gcr.io,然而对于国内用户而言,访问这些地址可能会受限。国内用户想要解决这个问题,一般有两种方法,可以通过搭建代理来实现,也可以替换成国内镜像地址。但是,这些方法都有一些挑战。

使用代理可能对许多用户来说比较复杂,需要配置等步骤,不太方便。另一方面,替换成国内镜像地址可能会带来新问题,例如某些版本可能无法找到合适的镜像。

针对这些问题,我想分享一个可能的解决思路,供大家参考。这个思路是将K8S相关镜像预先下载并制作成一个可用的镜像集合,然后将这个集合上文章来源(Source):浅时光博客传到国内的镜像仓库。用户只需要从国内镜像仓库中拉取这个预制集合,而不需要自己搭建代理或者担心版本不匹配的问题。

这个方法可以简化国内用户在部署K8S时的镜像获取过程,减少了复杂的配置步骤和可能出现的问题。当然,每种解决方案都有其优缺点,这只是其中的一种思路,希望能够对大家有所帮助。

公共镜像代理服务:https://dockerproxy.com/ 也可以参考下面的文章进行自建镜像代理服务:

二、操作实践

  • 假设我们需要拉取的镜像是 gcr.io/kubernetes-helm/tiller:v2.16.10
  • 首先搜索一下哪些源提供了你需要拉的镜像:
docker search tiller
  • 从结果可以看出 sapcc/tiller 是缓存 gcr.io/kubernetes-helm 的镜像,我们去docker.hub 上面去搜索一下 sapcc/tiller,验证一下源信息:
  • 发现版本信息也吻合,那直接将地址换成该第三方的即可:
docker pull sapcc/tiller:v2.16.10
  • 拉好之后可以查看本地镜像:
docker images
  • 再通过以下命令 把来下来的镜像修改成 k8s.gcr.io 域名下的:
docker tag sapcc/tiller:v2.16.10 gcr.io/kubernetes-helm/tiller:v2.16.10
这就相当于从别的服务上,把镜像已经拉到本地了。

三、其他方式

另外的一种方式,是最靠谱的,就是自己买台国外的服务器,然后通过国外的服务器把镜像下载下来,进行打包后导入到国内的服务器上,然后将导入的镜像重新命名和打TAG;还有一种方式也是需要有国外的服务器,然后通过Docker开源的registry实现代理缓存k8s.gcr.io仓库,这种方式比较麻烦。

例如我部署ingress-nginx时,需要用到的镜像就是k8s.gcr.io仓库的,这里我进行演示

1、下载ingress镜像

  • 查看ingress-nginx所需要下载的镜像
[root@k8s-master1 ingress-nginx]# grep image deploy.yaml
  • 登入到国外的服务器上下载对应的镜像
docker pull k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.0
docker pull k8s.gcr.io/ingress-nginx/controller:v1.0.0

2、打包镜像为tar包

  • 查看下载的镜像ID
docker images | grep ingress-nginx 
  • 打包镜像
docker save ef43679c2cae -o /root/ingress-nginx-controller_v1.tar
docker save 17e55ec30f20 -o /root/ingress-nginx-kube-webhook-certgen_v1.tar

3、导入到国原文链接:https://dqzboy.com内服务器

docker load -i ingress-nginx-controller_v1.tar 
docker load -i ingress-nginx-kube-webhook-certgen_v1.tar

4、镜像重命名打TAG

说明:导入的镜像名称和TAG显示为<none>,但是镜像的ID跟打包之前的ID是一样的,我们根据镜像ID可以确定镜像的名称和TAG叫啥,然后给导入进来的镜像重新命名和打TAG

docker tag ef43679c2cae k8s.gcr.io/ingress-nginx/controller:v1.0.0
docker tag 17e55ec30f20 k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.0

本文作者:浅时光博客
原文链接:https://www.dqzboy.com/5306.html
版权声明:知识共享署名-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)协议进行许可,转载时请以>超链接形式标明文章原始出处和作者信息
免责声明:本站内容仅供个人学习与研究,严禁用于商业或非法目的。请在下载后24小时内删除相应内容。继续浏览或下载即表明您接受上述条件,任何后果由用户自行承担。

0 条回应

必须 注册 为本站用户, 登录 后才可以发表评论!