在生产环境中我们使用共有仓库或私有仓库都不太合适,这里搭建一个企业级的私有仓库,操作极其简单。
Harbor 是一个开源镜像仓库,可通过基于角色的访问控制来保护镜像,新版本的Harbor还增加了扫描镜像中的漏洞并将镜像签名为受信任。
作为CNCF孵化项目,Harbor提供合规性,性能和互操作性,以帮助你跨Kubernetes和Docker等云原生计算平台持续,安全地管理镜像。
Harbor组件均以Docker容器方式启动,因此,你可以将其部署在任何支持Docker的Linux发行版上。
特性:
☆ 易于部署:可通过Docker compose或Helm Chart 部署 Harbor。
☆ 云原生注册表:Harbor 支持容器镜像和Helm图表,可作为容器原生运行时和编排平台等云原 生环境的注册表。
☆ 基于角色控制:用户通过项目访问不同的存储库,并且用户可以对项目下的镜像或Helm图表具 有不同的权限。
☆ 基于策略的复制:可以使用过滤器基于策略在多个注册表实例之间复制(同步)镜像和图表。
☆ 镜像删除和垃圾收集:系统管理员可以运行垃圾收集作业,以便可以删除镜像,并可以定期释 放其空间。
☆ 漏洞扫描:Harbor会定期扫描映像中的漏洞,并进行策略检查以防止部署易受攻击的映像。
☆ 公证人:支持对容器镜像进行签名,以确保真实性和出处。
☆ 审核:通过日志跟踪对存储库的所有操作。
☆ 图形门户:用户可以轻松浏览,搜索存储库和管理项目。
☆ 外部集成:提供RESTful API有助于管理操作,并且易于与外部系统集成。
硬件要求
处理器 | 最低2个cpu |
内存 | 最低4GB |
磁盘 | 最低40GB |
软件要求
Docker-engine | v17.06.0-ce 或更高版本 |
Docker-compose | v1.18.0 或更高版本 |
Opecssl | 最好是最新的 |
端口需求,都可以在配置文件中修改
端口 | 协议 | 说明 |
443 | HTTPS | Harbor与API请求HTTPS端口 |
4443 | HTTPS | Harbor与Docker信任互联端口,尽在启用Notary时需要 |
80 | HTTP | Harbor与API请求HTTP端口 |
添加一台docker作为私有仓库存放。实验环境如下
k8s-master :192.168.0.30
k8s-node1: 192.168.0.40
k8s-node2: 192.168.0.50
harbor: 192.168.0.90
1、下载并解压到/usr/src/haebor, https://github.com/goharbor/harbor/releases/
[root@k8s-1 ~]# wget https://github.com/goharbor/harbor/releases/download/v1.10.8/harbor-offline-installer-v1.10.8.tgz
2、cd /usr/src下
[root@k8s-1 harbor]# ll
total 575952
-rw-r--r-- 1 root root 3398 Jun 27 07:54 common.sh
-rw-r--r-- 1 root root 589739559 Jun 27 07:54 harbor.v1.10.8.tar.gz
-rw-r--r-- 1 root root 5882 Jun 27 07:54 harbor.yml
-rwxr-xr-x 1 root root 2284 Jun 27 07:54 install.sh
-rw-r--r-- 1 root root 11347 Jun 27 07:54 LICENSE
-rwxr-xr-x 1 root root 1749 Jun 27 07:54 prepare
3、编辑harbor.yaml文件,hostname为本地ip,port随意,避免冲突就好,https暂时注释掉
4、安装docker-ce-20.10.7和docker-compose,前面说过这里不再演示。
5、下载镜像
[root@k8s-1 ~]# docker pull goharbor/prepare:v1.10.8
6、使用./prepare进行测试
7、测试成功,使用install.sh安装
需要下载几个必须的镜像,所以稍稍等一会,如果最后出现了? ----Harbor has been installed and started successfully.---- 就是成功了。
8、运行docker-compose.yaml文件
[root@k8s-4 harbor]# docker-compose up -d
harbor-log is up-to-date
registry is up-to-date
registryctl is up-to-date
redis is up-to-date
harbor-portal is up-to-date
harbor-db is up-to-date
harbor-core is up-to-date
nginx is up-to-date
harbor-jobservice is up-to-date
9、在浏览器中输入192.168.0.90:180,输入用户和密码登录,密码和用户在配置文件里面
默认的用户是admin,密码是Harbor12345
10、创建一个项目,起名字,选择公开就行
选择左侧的用户管理,创建一个新用户
把用户添加到我们新创建的项目中
添加成功,接下来实验能否推送和拉取镜像,用bosybox镜像为例子
先下载busybox镜像
[root@k8s-4 ~]# docker pull busybox
Using default tag: latest
latest: Pulling from library/busybox
b71f96345d44: Pull complete
Digest: sha256:930490f97e5b921535c153e0e7110d251134cc4b72bbb8133c6a5065cc68580d
Status: Downloaded newer image for busybox:latest
docker.io/library/busybox:latest
11、docker默认找到仓库是公有仓库,所以要先编辑配置文件,把我们的私有仓库添加信任。每一台docker都添加,方便我们一会拉取镜像测试
vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn"
],
"insecure-registries":["192.168.0.90:180"]
}
重启docker
[root@k8s-4 ~]# systemctl daemon-reload
[root@k8s-4 ~]# systemctl restart dockerdocker info查看
接下来如果网站出现问题,就重新执行/usr/src/harbor/下install.sh文件。
12、登录到我们的仓库
docker login 192.168.0.90:180
13、指定仓库,项目名修改镜像,进行测试
到浏览器查看是否成功
成功!
14、到k8s-node2上进行拉取测试
成功!