背景:
不知道各位有没有我这种尴尬:kubernetes建立过程中需求拉取到一些镜像,比方: dockerhub的镜像,这个还好。究竟有加快器。but k8s.gcr.io,quay.io.这些怎么搞?正巧建立kubeadm 1.25,helm装置cilium的时分悲摧了。下载不动怎么搞?docker时代的时分我还能够直接导入,可是containerd时代了 导入了仍是要麻烦一些阿?搜索引擎搜了一下,找到下面三个文章,学习一下! 参照:建立Docker镜像库房署理 建立容器库房的镜像服务器(gcr, ghcr, quay, k8s-gcr) 真◉彻底处理 gcr、quay、DockerHub 镜像下载难题!
建立镜像署理库房
其间米开朗基杨大佬写的真◉彻底处理 gcr、quay、DockerHub 镜像下载难题!建立一个k3s集群搞比较全国,可是我国外服务器就一台,仍是轻量级的服务器….开端便是下载镜像然后上传到国内harbor库房的……这儿就用建立Docker镜像库房署理的方法去操作了!
前提条件
服务器在国外 四个域名 以及ssl证书
装置Docker
留意:我这台服务器为轻量服务器,ubuntu操作系统(docker我之前其实早装置了……)
apt-get update
apt-get upgrade
apt-get install docker*
如果是**centos **请参照:
yum update
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce
装备Docker
- 设置 Docker 的日志格式为 json,日志文件巨细为 100M,最多保存 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
发动 Docker
systemctl enable docker && systemctl start docker
装置 Docker Compose
看版别吧,我没有装置什么最新的 ,究竟能跑起来就能够对我来说
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose --version
发动镜像库房署理
git clone 相关registry-proxy库房装备文件
git clone https://github.com/findsec-cn/registry-proxy.git
cd registry-proxy
自定义修正装备文件
- 将域名的证书放置到 cert 目录下,并把证书文件名称命名为该目录下的server名称;
- 其间 server.crt 为 ssl 证书文件, server.key 为 ssl 私钥。
- 留意:证书必定要是对应域名的,不然进行下载镜像会提示x509
- 修正 nginx.conf 装备文件,将装备文件中的域名替换成自己的域名(xxx.com)
docker-compose.yaml修正
我这儿先修正以下docker-compose.yaml,原github项目只署理了gcr.io,k8s.gcr.io,恩我这儿主要是运用署理quay.io库房,如果署理其他库房可类似方法!
version: '2'
services:
local:
container_name: reg-local
image: findsec/registry-proxy:latest
restart: always
environment:
- DELETE_ENABLED=true
volumes:
- ~/data/registry:/var/lib/registry
ports:
- 5000:5000
networks:
- registry-net
quay:
container_name: reg-quay
image: findsec/registry-proxy:latest
restart: always
environment:
- PROXY_REMOTE_URL=https://quay.io
volumes:
- ~/data/registry:/var/lib/registry
networks:
- registry-net
gcr:
container_name: reg-gcr
image: findsec/registry-proxy:latest
restart: always
environment:
- PROXY_REMOTE_URL=https://gcr.io
volumes:
- ~/data/registry:/var/lib/registry
networks:
- registry-net
k8s-gcr:
container_name: reg-k8s-gcr
image: findsec/registry-proxy:latest
restart: always
environment:
- PROXY_REMOTE_URL=https://k8s.gcr.io
volumes:
- ~/data/registry:/var/lib/registry
networks:
- registry-net
ui:
container_name: reg-ui
image: findsec/registry-ui:latest
restart: always
links:
- local:reg-local
environment:
- REGISTRY_TITLE=My Private Docker Registry
- REGISTRY_URL=http://reg-local:5000
- DELETE_IMAGES=true
networks:
- registry-net
nginx:
container_name: reg-nginx
image: nginx:alpine
restart: always
ports:
- 80:80
- 443:443
links:
- ui:reg-ui
- gcr:reg-gcr
- quay:reg-quay
- k8s-gcr:reg-k8s-gcr
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
- ./cert:/etc/nginx/ssl
networks:
- registry-net
networks:
registry-net:
依着葫芦画瓢。依据库房中yaml文件中gcr装备 生成一个quay的装备: nginx相关装备中link也增加上quay装备:
修正nginx.conf中域名:
sed -i 's/xxx.com/zhangpeng.com/g' nginx.conf
增加quay域名相关装备: 终究装备文件如下:
server {
listen 80;
listen 443 ssl;
server_name hub.zhangpeng.com;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
location / {
proxy_pass http://reg-ui:80;
proxy_buffering off;
proxy_request_buffering off;
}
}
server {
listen 80;
listen 443 ssl;
server_name gcr.zhangpeng.com;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
location / {
proxy_pass http://reg-gcr:5000;
proxy_buffering off;
proxy_request_buffering off;
}
}
server {
listen 80;
listen 443 ssl;
server_name k8s-gcr.zhangpeng.com;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
location / {
proxy_pass http://reg-k8s-gcr:5000;
proxy_buffering off;
proxy_request_buffering off;
}
}
server {
listen 80;
listen 443 ssl;
server_name quay.zhangpeng.com;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
location / {
proxy_pass http://reg-quay:5000;
proxy_buffering off;
proxy_request_buffering off;
}
}
ssl证书
必定记得要上传ssl证书到cert目录下: 当然了你也能够修正docker-compose.yaml.修正nginx中volumes中挂载途径 也能够修正nginx.conf文件中ssl_certificate ssl_certificate_key 文件名:
发动镜像库房署理
docker-compose up -d
docker-compose logs -f
可能会出现证书装备不对的报错,哈哈哈自己处理以下…..
解析域名
我的域名用的dnspod
运用镜像库房署理
本地工作环境为rocky 8.5装置了podman 运用podman进行测验:
###要下载镜像
[root@zhangpeng ~]# podman pull k8s.gcr.io/pause:3.6
###通过镜像库房署理方法下载:
[root@zhangpeng ~]# podman pull k8s-gcr.zhangpeng.com/pause:3.6
访问hub.zhangpeng.com。能够看到我们下载的镜像被缓存了
接下来能够进阶的:
image的清理
不能一向缓存吧,空间写满了怎么办,最苯的方法写一个crontab:
* * */2 * * /usr/bin/rm -rf /var/lib/registry/* &>/dev/null
防白嫖认证
服务器镜像署理被白嫖怎么办?最简略的搞一个htpasswd搞一下:
apt-get install apache2-utils
htpasswd -c passwd zhangpeng
然后修正nginx.conf文件,我这儿为了演示只修正了k8s-gcr这一个的相关装备,其他的都如此就能够:
server {
listen 80;
listen 443 ssl;
server_name k8s-gcr.zhangpeng.com;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
auth_basic "请输入用户和暗码"; # 验证时的提示信息
auth_basic_user_file /etc/nginx/passwd; # 认证文件
location / {
proxy_pass http://reg-k8s-gcr:5000;
proxy_buffering off;
proxy_request_buffering off;
}
}
重启docker-compose服务: 注:当前registry目录下
docker-compose down
docker-compose up -d
本地测验: 还拿pause镜像为例,恩显现认证失败了
podman pull k8s-gcr.zhangpeng.com/pause:3.5
podman login k8s-gcr.zhangpeng.com
podman pull k8s-gcr.zhangpeng.com/pause:3.5
如下图,pull成功:
其他的?
容器运行时装备的装备,参照米开朗基杨大佬: blog.csdn.net/alex_yangch… 感谢各位大佬的踩坑,后人能那么方便的运用!