文章目录
一、Harbor概述
- Habor是由VMWare公司开源的容器镜像仓库。事实上,Habor是在Docker-Registry上进行了相应的企业级扩展,从而获得了更加广泛的应用;
- 这些新的企业级特性包括:管理用户界面,基于角色的访问控制,AD/LDAP集成以及审计日志等,足以满足基本企业需求。
- 官方地址:https://goharbor.io/
二、Harbor和Registry的比较
Harbor和Registry都是Docker的镜像仓库,但是Harbor作为更多企业的选择,是因为相比较于Regisrty来说,它具有很多的优势。
-
提供分层传输机制,优化网络传输
Docker镜像是是分层的,而如果每次传输都使用全量文件(所以用FTP的方式并不适合),显然不经济。必须提供识别分层传输的机制,以层的UUID为标识,确定传输的对象。 -
提供WEB界面,优化用户体验
只用镜像的名字来进行上传下载显然很不方便,需要有一个用户界面可以支持登陆、搜索功能,包括区分公有、私有镜像。 -
支持水平扩展集群
当有用户对镜像的上传下载操作集中在某服务器,需要对相应的访问压力作分解。 -
良好的安全机制
企业中的开发团队有很多不同的职位,对于不同的职位人员,分配不同的权限,具有更好的安全性。 -
Harbor提供了基于角色的访问控制机制,并通过项目来对镜像进行组织和访问权限的控制。
kubernetes中通过namespace来对资源进行隔离,在企业级应用场景中,通过将两者进行结合可以有效将kubernetes使用的镜像资源进行管理和访问控制,增强镜像使用的安全性。尤其是在多租户场景下,可以通过租户、namespace和项目相结合的方式来实现对多租户镜像资源的管理和访问控制。
三、Harbor核心组件解释
Proxy:
他是一个nginx的前端代理,代理Harbor的registry,UI, token等服务。db:
负责储存用户权限、审计日志、Dockerimage分组信息等数据。UI:
提供图形化界面,帮助用户管理registry上的镜像, 并对用户进行授权。jobsevice:
jobsevice是负责镜像复制工作的,他和registry通信,从一个registry pull镜像然后push到另一个registry,并记录job_log。Adminserver:
是系统的配置管理中心附带检查存储用量,ui和jobserver启动时候回需要加载adminserver的配置。Registry:
镜像仓库,负责存储镜像文件。Log:
为了帮助监控Harbor运行,负责收集其他组件的log,供日后进行分析。
四、Harbor配置文件所需参数
这些参数需要在配置文件 Harbor.cfg 中设置。如果用户更新它们并运行 install.sh脚本重新安装 Harbour,参数将生效。具体参数如下:
hostname:
用于访问用户界面和 register 服务。它应该是目标机器的 IP 地址或完全限 定的域名(FQDN)
例如:192.168.195.128 或 hub.aaa.cn。不要使用 localhost 或 127.0.0.1 为主机名。ui_url_protocol:
(http 或 https,默认为 http)用于访问 UI
和令牌/通知服务的协议。如果公证处于启用状态,则此参数必须为 https。max_job_workers:
镜像复制作业线程。db_password:
用于db_auth 的MySQL数据库root 用户的密码。customize_crt:
该属性可设置为打开或关闭,默认打开。打开此属性时,准备脚本创建私钥和根证书,用于生成/验证注册表令牌。
当由外部来源提供密钥和根证书时,将此属性设置为 off。ssl_cert:
SSL 证书的路径,仅当协议设置为 https 时才应用。ssl_cert_key:
SSL 密钥的路径,仅当协议设置为 https 时才应用。secretkey_path:
用于在复制策略中加密或解密远程 register 密码的密钥路径。
五、Harbor部署
- Harbor 被部署为多个 Docker 容器,因此可以部署在任何支持 Docker 的 Linux 发行版 上。
- 服务端主机需要安装 Python、Docker 和 Docker Compose
1、环境介绍
- Harbor服务器:192.168.5.129
- 节点服务器:192.168.5.233
2、Harbor服务器配置
部署Docker-ce引擎docker引擎部署,点此跳
- 下载 compose编排工具和Harbor 安装程序
[root@harbor ~]# curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
[root@harbor ~]# chmod 755 docker-compose
[root@harbor ~]# cp -p docker-compose /usr/local/bin/
[root@harbor ~]# wget http:// harbor.orientsoft.cn/harbor-1.2.2/harbor-offline-installer-v1.2.2.tgz
[root@harbor ~]# tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/
- 配置 Harbor 参数文件
[root@harbor ~]# vim /usr/local/harbor/harbor.cfg
###修改第五行为本机ip
hostname = 192.168.5.129
- 启动 Harbor
[root@harbor ~]# sh /usr/local/harbor/install.sh
Now you should be able to visit the admin portal at http://192.168.5.129.
For more details, please visit https://github.com/vmware/harbor .
- 输入本机ip和账号密码即可登录网页版harbor
六、Harbor基本操作
1、镜像的上传/拉取
添加项目并且填写项目名称
此时可使用 Docker 命令在本地通过 127.0.0.1 来登录和推送镜像。默认情况下, Register 服务器在端口 80 上侦听。
[root@harbor harbor]# docker login -u admin -p Harbor12345 http://127.0.0.1
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
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
从公有仓库下载镜像然后上传到harbor私有仓库
##下载镜像
[root@harbor harbor]# docker pull httpd
##更改镜像标签
[root@harbor harbor]# docker tag httpd 127.0.0.1/myjob/httpd:v1
##查看镜像
[root@harbor harbor]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
127.0.0.1/myjob/httpd v1 b2c2ab6dcf2e 13 hours ago 166MB
httpd latest b2c2ab6dcf2e 13 hours ago 166MB
.......省略其它镜像信息
###上传镜像到harbor
[root@harbor harbor]# docker push 127.0.0.1/myjob/httpd:v1
登录harbor网页查看镜像信息
2、client节点镜像上传/拉取
节点服务器在登录Harbor仓库上进行传和下载时会报错,出现这问题的原因 Docker Registry 交互默认使用的是 HTTPS,但是搭建私有镜 像默认使用的是 HTTP 服务,所以与私有镜像交互时出现以下错误。
root@client ~]# docker login -u admin -p Harbor12345 http://192.168.5.129
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get https://192.168.5.129/v2/: dial tcp 192.168.5.129:443: connect: connection refused
解决:
[root@client ~]# vim /usr/lib/systemd/system/docker.service
##修改14行
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 192.168.5.129 --containerd=/run/containerd/containerd.sock
重启服务尝试下载镜像
[root@client ~]# systemctl daemon-reload
[root@client ~]# systemctl restart docker
[root@client ~]# docker login -u admin -p Harbor12345 http://192.168.5.129
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
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 ###可以成功登录
[root@client ~]# docker pull 192.168.5.129/myjob/httpd:v1
[root@client ~]# docker images ##镜像已成功下载
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.5.129/myjob/httpd v1 b2c2ab6dcf2e 14 hours ago 166MB
查看harbor的日志可以看见上传下载记录
3、创建 Harbor 用户
在client节点上用abc用户登录
##注销登录
[root@client ~]# docker logout 192.168.5.129
Removing login credentials for 192.168.5.129
##使用abc账号登录
[root@client ~]# docker login 192.168.5.129
Username: abc
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