一、场景说明
在部署K8S集群时,最大的一个k8s.gcr.io
这个仓库的,因为国内的GFW拦截,这个网站在国内是完全无法访问的;有些镜像可以通过阿里云上用户同步的k8s.gcr.io
上的镜像解决国内无法下载gcr镜像的问题,但是有些镜像还是在阿里云镜像仓库上搜索不到的,这个时候我们就需要自己动手解决了。
二、解决思路
- 购买一台国外的云服务器,用来搭建docker镜像仓库代理
- 官网文档:https://docs.docker.com/config/daemon/systemd/
三、操作步骤
1、环境说明
- 一台国外服务器
- 一个域名和域名相关的SSL证书(docker pull 镜像时需要验证域名证书)
2、安装Docker
(1)添加 Docker yum 仓库
[root@dqzboy ~]# yum update
[root@dqzboy ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
[root@dqzboy ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
(2)安装 Docker
#可以查看所有仓库中所有docker版本,并选择特定版本安装
[root@dqzboy ~]# yum list docker-ce --showduplicates | sort -r
[root@dqzboy ~]# yum install -y docker-ce
(3)配置 Docker
- 设置 Docker 的日志格式为
json
,日志文件大小为 1文章来源(Source):https://www.dqzboy.com 00M,最多保存 3 个日志; - 设置 Docker 镜像私有仓库和官方镜像加速地址;
- 设置 Docker 的数据目录到
/data/docker
; - 设置 Docker 的 Storage Driver 为
overlay2
。
[root@dqzboy ~]# mkdir /etc/docker
[root@dqzboy ~]# cat << EOF > /etc/docker/daemon.json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
},
"insecure-registry": [
"hub.dqzboy.com"
],
"registry-mirror": "https://a7ye1cuu.mirror.aliyuncs.com",
"data-root": "/data/docker",
"exec-opts": ["native.cgroupdriver=systemd"],
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
EOF
(4)启动 Docker
[root@dqzboy ~]# systemctl enable docker && systemctl start docker
(5)安装 Docker Compose
[root@dqzboy ~]# curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
[root@dqzboy ~]# chmod +x /usr/local/bin/docker-compose
[root@dqzboy ~]# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
[root@dqzboy ~]# docker-compose --version
(6)启动镜像仓库代理
- 从 github 下载 registry-proxy 配置文件:
[root@dqzboy ~]# git clone https://github.com/findsec-cn/registry-proxy.git
[root@dqzboy ~]# cd registry-proxy
- 将域名的证书放置到 cert 目录下,并把证书文件名称命名为该目录下的server名称;
- 其中 server.crt 为 ssl 证书文件, server.k
文章来源(Source):浅时光博客 ey 为 ssl 私钥。 - 注意:证书一定要是对应域名的,不然进行下载镜像会提示x509
- 修改 nginx.conf 配置文件,将配置文件中的域名替换成自己的域名(dqzboy.com)
[root@dqzboy ~]# sed -i 's/xxx.com/dqzboy.com/g' nginx.conf
#确认更换后的域名
[root@dqzboy registry-proxy]# grep com nginx.conf
server_name hub.dqzboy.com;
server_name gcr.dqzboy.com;
server_name k8s-gcr.dqzboy.com;
#启动镜像仓库代理:
[root@dqzboy registry-proxy]# docker-compose up -d
#查看启动日志:
[root@dqzboy registry-proxy]# docker-compose logs -f
(7)解析域名
- 将 hub.dqzboy.com、gcr.dqzb
原文链接:https://www.dqzboy.com oy.com、k8s-gcr.dqzboy.com解析到此服务器的地址上。 - 通过 http://hub.dqzboy.com 查看镜像仓库缓存的镜像;
- 通过gcr.dqzboy.com下载镜像。
(8)使用镜像仓库代理
比如我们要下载镜像:
[root@dqzboy ~]# docker pull k8s.gcr.io/pause:3.1
可以如下通过镜像仓库代理下载:
[root@dqzboy ~]# docker pull gcr.dqzboy.com/google-containers/pause:3.1

- 访问hub.dqzboy.com页面就可以看到上面我们下载的镜像已经被缓存了

(9)修改docker配置
- 在docker的
daemon.json
配置文件中添加上我们的代理服务的域名,然后重启docker程序
{
"registry-mirrors": [
"https://gcr.dqzboy.com"
]
}
#重启docker
systemctl restart docker
这台服务器应该是国外的吧