https://github.com/yanghao5/ircs
Intranet Registry Cache Server
https://github.com/yanghao5/ircs
docker ghcr k8s registry
Last synced: about 2 months ago
JSON representation
Intranet Registry Cache Server
- Host: GitHub
- URL: https://github.com/yanghao5/ircs
- Owner: yanghao5
- License: mit
- Created: 2024-10-15T10:18:18.000Z (7 months ago)
- Default Branch: main
- Last Pushed: 2024-10-17T04:38:38.000Z (7 months ago)
- Last Synced: 2025-03-15T11:33:19.455Z (2 months ago)
- Topics: docker, ghcr, k8s, registry
- Language: Shell
- Homepage:
- Size: 8.79 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# ircs
Intranet Registry Cache Server需要频繁拉取 dockerhub、dockerhub、quay.io、nvcr.io、ghcr.io、registry.k8s.io这些镜像时
无论你的网多好,都很“慢”
在内网搭建一个镜像缓存服务器,就非常快了
> NB
> 如果你仅仅需要 dockerhub 缓存镜像
> 你可以参考 USTC 镜像站给出的教程,不必往下看了
> https://mirrors.ustc.edu.cn/help/dockerhub.html#self-host
> dockerhub的镜像比较好搭,不需要多少操作总体思路:
dockerhub、quay.io、nvcr.io、ghcr.io、registry.k8s.io 这些镜像需要 DNS 劫持
才能像原版一样拉取,不需要额外的加上镜像站的域名。
核心的地方有两个:
1。如何做 DNS 劫持
2。如何搭建镜像缓存服务器
你要根据实际情况做变通
在这里我只举一个 k8s 的搭建例子,其余的类似。
过程中涉及到的配置文件、脚本等,我放到了这个仓库里。
https://github.com/nealhallyoung/ircs)
## 准备
机器都安装上 docker
你需要有两个路由器
一个做主路由,一个做旁路由,并拥有其完全的控制权
> NB
> 你可以使用虚拟机,虚拟机全部使用 NAT 模式。
> 这样,就不需要旁路由了。## ip 规划
整个过程涉及到机器有
主路由器、DNS 服务器、缓存服务器、旁路由、若干台需要拉取镜像的机器
主路由器网段:`192.168.3.0/24`
DNS 服务器 `192.168.3.78`
缓存服务器 `192.168.3.80`
旁路由 ip `192.168.3.79`
旁路由网段 `192.168.40.0/24`
剩下的机器,连接旁路由,全部设置 DHCP 自动获取 ip
## 搭建 DNS 服务器
```text
os debian 12.7
```使用 coredns 来搭建
https://github.com/coredns/coredns
1。到 CoreDNS 的github项目地址那,下载二进制文件,得到可执行文件 coredns
2。编写配置文件 CoreDNS
```text
.:53 {
# 绑定interface ip
bind 0.0.0.0
# 先走本机的hosts
# https://coredns.io/plugins/hosts/
hosts {
# 设置缓存服务器的 ip
192.168.3.80 registry.k8s.io
# ttl
ttl 60
# 重载hosts配置
reload 1m
# 继续执行
fallthrough
}# 最后所有的都转发到系统配置的上游dns服务器去解析
forward . /etc/resolv.conf
# 缓存时间ttl
cache 120
# 自动加载配置文件的间隔时间
reload 6s
# 输出日志
log
# 输出错误
errors
}
```3。放开端口 53
用你喜欢的方式放开
4。运行
```text
sudo ./coredns -conf CoreDNS
```5。测试
```text
# 用同局域的其他的机器测试
dig registry.k8s.io @192.168.3.79
```> NB
> DNS 服务器的搭建,有多种方式
> 你只需要保证最后能完成 DNS 劫持就行
> 同样,我并没有给出,如何开机自启运行 coredns 的方法
> 方法太多,选择你喜欢的## 旁路由设置
1。在 DHCP 设置中,将 DNS 服务器设置成 `192.168.3.78`
2 。测试
用旁路由下的机器测试
```text
# 不用跟上具体的 ip 地址
dig registry.k8s.io
```> NB
> 不同的路由器,有不同的设置方法。
> 根据实际情况操作。## 镜像缓存服务器
1。创建docker网络
```bash
docker network create docker-registry
```2。下载配置文件
```text
git clone --depth=1 https://github.com/nealhallyoung/ircs.git && cd ircs
```3。生成证书
```text
./gencert.sh
```4。启动 docker
```text
mkdir data
docker compose up -d
```5。修改机器配置文件
在旁路由网段的机器中修改 daemon.json 文件,添加不安全镜像源
```text
vim /etc/docker/daemon.json{
"insecure-registries" : ["registry.k8s.io"]
}sudo systemctl daemon-reload
sudo systemctl restart docker
```> NB
> 因为我们使用的是自签证书
> 也没有将证书加入到系统的信任证书中
> 所以只能将其列入不安全镜像源
> 这也是唯一不完美的地方6。测试
```bash
docker pull registry.k8s.io/pause:3.6
docker pull registry.k8s.io/kube-apiserver:v1.23.0
```docker-registry 是边拉取镜像,边推送镜像
再次拉取时,速度会非常快
以上有很多可以改进的地方,有时间再调整吧
一些优化方向
- nginx 换成 caddy
- 找一些运维工具,批量地添加证书,就不用修改配置文件了
- 搭建内网 CA 证书服务器,彻底解决证书问题
- 现在有三个容器,nginx 可以和 redis 整合到一起
- DNS服务器可以和路由器合并
- docker registry 缓存镜像的有效期最大168小时,也就是一周,是在代码里写死的,可以改一下源码,重新编译,拉长有效期## 参考
docker registry 的文档
https://distribution.github.io/distribution/