1. 概述
在局域网内部,有多个k8s节点,都需要使用公网下载镜像,占用带宽且部分镜像仓库速度慢。
这时可以使用Nexus3
在内网代理所有容器镜像仓库并缓存在本地。
Nexus3介绍
官方文档: https://help.sonatype.com/repomanager3/product-information
Nexus3 (Nexus Repository Manager 3
) 是一个用于存储、组织和管理软件组件(如 JAR 文件、npm 包、Docker 镜像等)的仓库管理系统。它由 Sonatype 开发并维护。Nexus Repository Manager 支持许多流行的包管理工具和格式,包括 Maven
, npm
, rpm
, apt
, PyPI
, Docker
。
Nexus3 提供了一个 Web UI,用户可以通过浏览器轻松地管理仓库和组件。
2. 部署Nexus3
2.1 使用dokcer部署Nexus3
# 这里为演示方便,直接使用docker一键部署
docker run -d --network=host --name nexus sonatype/nexus3
2.2 获取Nexus3默认密码
docker exec nexus cat /nexus-data/admin.password
输出
515579c3-c2f9-4c07-93e7-7d0354f98e05
2.3 登录Nexus3
使用浏览打开 http://${YOUR_SERVER_IP}:8081
账号: admin
密码: 515579c3-c2f9-4c07-93e7-7d0354f98e05
3. Nexus3创建镜像仓库代理
3.1 创建Blob Store
3.2 创建 docker hub 代理
3.3 创建 registry.k8s.io 代理
3.4 创建docker-group
docker-group用于将多个docker-proxy聚合,统一对外提供服务;
这样客户端可以只需要配置一个地址就可以代理多个仓库;
4. containerd配置代理
本文
containerd
版本为1.6.21
编辑 containerd 配置文件。通常情况下,配置文件位于
/etc/containerd/config.toml
。在 config.toml 文件中,找到 [plugins."io.containerd.grpc.v1.cri"] 部分,然后编辑或添加以下内容:
[plugins."io.containerd.grpc.v1.cri".registry.configs]
[plugins."io.containerd.grpc.v1.cri".registry.configs."docker.io".tls]
insecure_skip_verify = true
[plugins."io.containerd.grpc.v1.cri".registry.configs."registry.k8s.io".tls]
insecure_skip_verify = true
[plugins."io.containerd.grpc.v1.cri".registry.headers]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
# 在此配置中,“docker.io”有两个镜像端点,Containerd 将首先使用 http://nexus3.tiga.cc:8888 拉取镜像。如果 http://nexus3.tiga.cc:8888 不可用,将会使用 https://index.docker.io 。
endpoint = ["http://nexus3.tiga.cc:8888","https://index.docker.io"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.k8s.io"]
endpoint = ["http://nexus3.tiga.cc:8888"]
- 重启 containerd 服务
systemctl restart containerd
5. 验证代理
5.1 crictl命令拉取镜像
crictl pull registry.k8s.io/ingress-nginx/controller:v1.7.1