Harbor是一个开源可信的企业级Registry项目,用于Docker镜像的存储分发和签名,安全扫描;通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜像的效率。Harbor支持安装在多个Registry节点的镜像资源复制,镜像全部保存在私有Registry中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。
安装与配置
1、软硬件及环境要求
目标主机需要安装Python,Docker和Docker Compose。
硬件
资源 | 容量 | 说明 |
---|---|---|
中央处理器 | 最小2 CPU | 4 CPU是首选 |
内存 | 最小4GB | 8GB是首选 |
磁盘 | 最小40GB | 160GB是首选 |
软件
软件 | 版本 | 说明 |
---|---|---|
Pyhton | 2.7 及以上 | 我用的是CenOS 7 默认安装 2.7 版本,未装的装上 |
Docker | 1.10 及以上 | Docker安装 |
Docker Compose | 1.6.0 以上 | docker-compose |
Openssl | 推荐用最高版本 | 为Harbor生成证书和密钥 |
网络端口
港口 | 协议 | 描述 |
---|---|---|
443 | HTTPS | Harbor入口和核心API将接受此端口上的https协议请求 |
4443 | HTTPS | 只有在启用“Notary”时才需要连接到Dock的Docker Content Trust服务 |
80 | HTTP | Harbor端口和核心API将接受此端口上的http协议请求 |
2、安装步骤
- 下载安装程序;
- 配置harbor.yml ;
- 运行install.sh安装并启动Harbor;
2.1下载安装程序:
可以从发布页面下载安装程序的二进制文件,选择在线或离线安装程序,使用tar命令解压缩包。
$ wget -c https://storage.googleapis.com/harbor-releases/release-1.8.0/harbor-offline-installer-v1.8.1.tgz $ tar xvf harbor-offline-installer-v1.8.1.tgz
2.2 配置harbor.yml
在harbor.yml中有两类参数,必需参数和可选参数。
- 系统级参数:需要在配置文件中设置这些参数。如果用户更新它们并运行install.sh脚本以重新安装Harbor,它们将生效。
- 用户级参数:这些参数可以在Web Portal上首次启动港口后更新。特别是,您必须在Harbour中注册或创建任何新用户之前设置所需的auth_mode。当系统中有用户时(除默认管理员用户外),无法更改auth_mode。
必需参数
- hostname:目标主机的主机名,用于访问web界面和注册表服务。它应该是目标计算机的IP地址或完全限定的域名。
- data_volume:存储harbor数据的位置
- harbor_admin_password:管理员的初始密码。此密码仅在Harbor首次启动时生效。之后,将忽略此设置,并且应在入口中设置管理员密码。请注意,默认用户名/密码为admin / Harbor12345。
- db_password:用于PostgreSQL数据库的root密码。更改此密码以用于任何生产用途!
- max_job_workers :(默认值为10)镜像复制作业线程。
- level: 日志级别:log level, options are debug, info, warning, error, fatal
- log_rotate_count:日志文件在被删除之前会被轮换。如果count为0,则删除旧版本而不是轮换。
- log_rotate_size:仅当日志文件大于log_rotate_size字节时才会轮换日志文件。如果大小后跟k,则假定大小以千字节为单位。如果使用M,则大小以兆字节为单位,如果使用G,则大小为千兆字节。
可选参数
- http: 默认http访问,端口80
- https: 用于访问入口和令牌/通知服务的协议。如果启用了公证,则此参数必须为https。默认情况下http。要设置https协议,请参阅使用HTTPS访问配置Harbor。
- port: port number for https
- ssl_cert:SSL证书的路径,仅在协议设置为https时应用。
- ssl_cert_key:SSL密钥的路径,仅在协议设置为https时应用。
- external_url:如果使用外部代理,则启用它,当启用时,将不再使用主机名
clair: Clair related configs
- updaters_interval: The interval of clair updaters, the unit is hour, set to 0 to disable the updaters
- http_proxy: Config http proxy for Clair, e.g. http://my.proxy.com:3128.
- https_proxy: Config https proxy for Clair, e.g. http://my.proxy.com:3128.
- no_proxy: Config no proxy for Clair, e.g. 127.0.0.1,localhost,core,registry
external_database:外部数据库配置,目前只支持POSTGRES
……………………………………..
配置存储后端(可选)
默认情况下,Harbor将镜像存储在本地文件系统中。在生产环境中,可以考虑使用其他存储后端而不是本地文件系统,如S3,OpenStack Swift,Ceph等。这些参数是register的配置。
- storage_service:默认情况下,Harbor将图像和图表存储在本地文件系统中。在生产环境中,您可以考虑使用其他存储后端而不是本地文件系统,如S3,OpenStack Swift,Ceph等。这些参数是注册表的配置。
- ca_bundle:自定义根证书的路径,它将被注入到注册表和图表存储库容器的信任库中。当用户使用自签名证书托管内部存储时,通常需要这样做。
- provider_name:注册表的存储配置,默认是文件系统。有关此配置的更多信息,请参阅https://docs.docker.com/registry/configuration/
- redirect:
- disable:当您要禁用注册表重定向时,将disable设置为true
这里以生产环境配置为主,配置letsencrypt的https证书。
#复制并重命名证书 cp fullchain.pem /data/cert/server.crt #服务器证书公钥 cp privkey.pem /data/cert/server.key #私钥 update-ca-trust
修改harbor.yml配置文件:
hostname = harbor.anonym0x1.com #主机或域名访问地址 https: port: 443 certificate: /data/cert/server.crt private_key: /data/cert/server.key database: password: root123 #PostgreSQL数据库的root密码 harbor_admin_password = Harbor12345 #Harbor的管理员密码 # The default data volume data_volume: /data
2.3 安装启动Harbor
$ ./install.sh Creating network "harbor_harbor" with the default driver Creating harbor-log ... done Creating harbor-adminserver ... done Creating redis ... done Creating registry ... done Creating harbor-db ... done Creating registryctl ... done Creating harbor-core ... done Creating harbor-portal ... done Creating harbor-jobservice ... done Creating nginx ... done ✔ ----Harbor has been installed and started successfully.---- Now you should be able to visit the admin portal at https://harbor.anonym0x1.com.
3、浏览器访问https://harbor.anonym0x1.com,管理员账号:admin,密码为配置中设置的。
4. Harbor已与Notary和Clair集成(用于漏洞扫描)。但是,默认安装不包括Notary或Clair服务.
如果想安装Notary, Clair and chart repository service, 必须执行以下命令:
$ ./install.sh --with-notary --with-clair --with-chartmuseum
5、Harbor状态管理
5.1 需要在docker-compose.yml在同一目录中运行
#停止harbor $ docker-compose stop #启动harbor $ docker-compose start
5.2 要更改Harbour的配置,请先停止现有的Harbor实例并进行更新harbor.yml。然后运行prepare脚本以填充配置。最后重新创建并启动Harbor的实例:
$ docker-compose down -v $ vim harbor.yml $ ./prepare $ docker-compose up -d
5.3 删除Harbor的数据库和图像数据(用于干净的重新安装):
$ rm -rf /data/database $ rm -rf /data/registry
客户端配置
http访问:如果harbor没有配置https访问
因为docker 默认不支持http方式登陆,所以客户端要以http方式登陆,需修改下配置:
方法一:更改daemon.json文件
[[email protected] ~]#vim /etc/docker/daemon.json { "registry-mirrors": ["https://registry.docker-cn.com"], "insecure-registries":["192.168.1.235"] }
方法二:更改docker.service文件
vim /usr/lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd --insecure-registry 192.168.1.235
完成后重新启动服务
$ systemctl daemon-reload && systemctl restart docker
测试上传下载镜像
1、客户端登陆
[[email protected] ~]# docker login docker.dapp-api.com Username: admin Password: WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded
2、更改tag标记
docker tag nginx:1.14.2-alpine 139.159.143.74/test/nginx:1.14.2-alpine
3、推送到harbor
The push refers to repository [139.159.143.74/test/nginx] 59b059d445c1: Pushed 0246bb21855f: Pushed 42acf078bf60: Pushed 7bff100f35cb: Pushed 1.14.2-alpine: digest: sha256:507234ea54dc6a9c7dd6a4b5d8649802bf711bcc7a7b2381ce404982f0f6966e size: 1153
4、Web界面查看上传的镜像
5、拉取harbor的镜像
docker pull 139.159.143.74/test/nginx:1.14.2-alpine
Harbor官方参考资料