Kubernetes
相关的docker
镜像存放在Google的镜像仓库 k8s.gcr.io,在国内网络环境内无法访问。有人已经将这些镜像同步到了阿里云,你可以在阿里云容器镜像服务中搜索到它们。几乎所有的k8s镜像都已经同步到了阿里云。阿里云容器服务团队甚至还有一个开源项目sync-repo,专门做Docker Registry
之间的同步。但是,如果你不放心别人同步的镜像,或者最新版本的镜像还没人同步过来,你可以按照本文将介绍的步骤,自己将gcr.io
上的docker
镜像搬到阿里云。
# 安装配置shadowsocks客户端
先简单介绍下Shadowsocks
协议,详细的工作原理可以参考这篇博客:
当我们启动shadowsocks client
时,实际上是启动了一个 ss-local
进程,左侧绿色的 Socks5 Client
可以是浏览器,也可以是Telegram
等本地应用,它们和ss-local
之间是使用 socks
协议进行通信。也就是说,浏览器像连接普通 socks
代理一样,连接到ss-local
进程。ss-local
会将收到的请求,转发给ss-server
,由ss-server
完成实际的访问,并将结果通过ss-local
返回给浏览器。ss-server
部署在国内网络之外,和ss-local
之间是加密传输,这样就实现了跨越长城。其实防火长城已经能够识别Shadowsocks
协议,但发现我们是在努力学习先进技术,就先放我们过关。
好了,我们现在首先要做的是在本机安装配置shadowsocks
客户端。推荐使用shadowsocks-libev,纯C实现的shadowsocks
协议,已经在很多操作系统的官方repository
中 ,安装非常方便。
macOS
|
|
Ubuntu
|
|
接下来填写shadowsocks client
配置文件,JSON
格式,简单易懂:
|
|
至于shadowsocks
服务器端,可以租用国内网络外的云主机自己搭建,也可以购买现成的机场服务,本文就不讨论了。
然后启动shadowsocks client
:
|
|
# 安装配置HTTP代理
shadowsocks client
创建的是socks5
代理,不过一些程序无法使用 socks5
,它们需要通过 http_proxy
和 https_proxy
环境变量,使用 HTTP
代理。polipo
可以帮助我们将 socks5
代理转换为 HTTP
代理。
macOS
下安装polipo
|
|
Ubuntu
下安装polipo
|
|
启动HTTP
代理
|
|
socksParentProxy
配置为localhost
和ss-local
监听端口,proxyPort
是启动的HTTP
代理端口。
我们可以在命令行终端测试HTTP
代理的效果:
|
|
应该可以正常访问到Google。
# 设置Docker HTTP代理
如果是在macOS
上使用Docker Desctop
,可以在Preference
中的Proxies
设置上一步启动的HTTP代理:
如果是Linux
平台,请参考Docker的官方文档进行设置。
# 在阿里云创建容器镜像的命名空间
为了将镜像同步到阿里云,首先需要在阿里云的容器镜像服务控制台创建镜像的命名空间。
建议将仓库类型设置为“公开”,这样其他人也能搜索、下载到镜像。
#
从gcr.io
下载镜像
在本机从gcr.io
下载镜像,我们以镜像pause:3.1
为例:
|
|
#
给镜像标记新的tag
根据前面在阿里云创建的命名空间,给镜像标记新的tag
:
|
|
mz-k8s
是在前面创建的命名空间。 查看tag结果:
|
|
通过IMAGE ID
可以看出,两个镜像为同一个。
# 将镜像上传到阿里云
登录阿里云镜像仓库:
|
|
根据提示输入password,登录成功后,显示Login Succeeded。
上传镜像:
|
|
# 从阿里云下载镜像
现在可以在其他机器上从阿里云下载pause:3.1
镜像,这时候已经不需要科学上网了:
|
|
给镜像打上原来的tag,这样kubeadm
等工具就可以使用本地仓库中的pause:3.1
镜像了:
|
|
至此,我们跨越长城,将一个docker镜像从gcr.io
搬到了Aliyun
。
如果是需要批量、定时的从gcr.io
同步镜像,建议考虑使用阿里开源的sync-repo。