Docker 私有仓库 Harbor搭建与使用
背景
harbor:
Harbor是构建企业级私有docker镜像的仓库的开源解决方案,它是Docker Registry的更高级封装,它除了提供友好的Web
UI界面,角色和用户权限管理,用户操作审计等功能外,它还整合了K8s的插件(Add-ons)仓库,即Helm通过chart方式下载,管理,安装K8s插件,而chartmuseum可以提供存储chart数据的仓库【注:helm就相当于k8s的yum】。另外它还整合了两个开源的安全组件,一个是Notary,另一个是Clair,Notary类似于私有CA中心,而Clair则是容器安全扫描工具,它通过各大厂商提供的CVE漏洞库来获取最新漏洞信息,并扫描用户上传的容器是否存在已知的漏洞信息,这两个安全功能对于企业级私有仓库来说是非常具有意义的。
补充:
Nexus 是Maven仓库管理器,如果你使用Maven,你可以从Maven中央仓库
下载所需要的构件(artifact),但这通常不是一个好的做法,你应该在本地架设一个Maven仓库服务器,在代理远程仓库的同时维护本地仓库,以节省带宽和时间,Nexus就可以满足这样的需要。此外,他还提供了强大的仓库管理功能,构件搜索功能,它基于REST,友好的UI是一个extjs的REST客户端,它占用较少的内存,基于简单文件系统而非数据库。这些优点使其日趋成为最流行的Maven仓库管理器。
Notary是一个允许任何人信任任意数据集合的项目。Notary项目包括服务器和客户端,用于运行和与可信集合交互。Notary旨在通过让人们轻松发布和验证内容,使互联网更加安全。我们经常依靠TLS来保护我们与Web服务器的通信,这本身就存在缺陷,因为服务器被攻破时可使恶意内容替代合法内容。借助Notary,发布商可以使用保持高度安全的密钥离线签署其内容。一旦发布者准备好内容,他们可以将他们签名的可信集合推送到Notary服务器。消费者通过安全渠道获得了发布者的公钥,然后可以与任何Notary服务器或(不安全)镜像进行通信,仅依靠发布者的密钥来确定接收内容的有效性和完整性。Notary基于TUF项目,一个针对软件分发和更新问题的安全通用设计。
Clair:
参考: https://blog.csdn.net/liumiaocn/article/details/76697022
通过对容器的layer进行扫描,发现漏洞并进行预警,其使用数据是基于Common Vulnerabilities
and Exposures数据库(简称CVE),
各Linux发行版一般都有自己的CVE源,而Clair则是与其进行匹配以判断漏洞的存在与否,比如HeartBleed的CVE为:CVE-2014-0160。
目前Clair支持如下数据源:
项目介绍
HARBOR是VMWare公司提供的一个docker私有仓库构建程序,功能非常强大.
1. 支持多租户签名和认证
2. 支持安全扫描和风险分析
3. 这次日志审计
4. 基于角色的访问控制
5. 支持可扩展的API和GUI
6. Image replication between instances
7. 国际化做的很好(目前仅支持英文和中文)
安装
harbor支持k8s的helm安装和本地安装,我这次先择的安装方式是本地安装。
0. 前置条件
1. 需要安装docker并运行
yum install docker # 安装docker ... systemctl start docker # 运行docker服务
2. 需要安装docker-compose
yum install docker-compose
1. 下载安装包
直接选择编译好的包
这里有两个包Harbor offline installer
和 Harbor online installer
,两者的区别的是 Harbor offline installer
里就包含的 Harbor 需要使用的镜像文件。
下载成功,并解压
tar -zxvf harbor-offline-installer-v2.0.0.tgz
进入解压的目录,并 ls
harbor.v2.0.0.tar.gz
里就是 Harbor 用到的镜像
2. 编辑配置文件
1.配置https:harbor默认工作方式是http,但是这只能在页面访问,默认harbor推送拉取镜像时走的是https,所以需要配置下https。
需要的文件:
harbor.yx.com.crt:服务器端的证书文件
harbor.yx.com.key:服务器端的秘钥
ca.crt:客户端的证书文件
生成秘钥和自签名证书:
openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 365 -out ca.crt
生成证书签名请求(域名访问,就把common name的值写为域名):
openssl req -newkey rsa:4096 -nodes -sha256 -keyout harbor.yx.com.key -out harbor.xy.com.csr
生成服务器证书:
openssl x509 -req -days 365 -in harbor.yx.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out harbor.yx.com.crt
最终得到的是这样的目录:
安装证书:在docker目录下目录/data/cert/harbor/
mkdir -p /data/cert/harbor/
cp harbor.yx.com.key harbor.yx.com.crt /data/cert/harbor/
2.配置harbor: harbor的模板配置文件是harbor.yml.tmpl,拷贝一份 -> harbor.yml
3. 安装并启动harbor:直接执行harbor目录下的install.sh脚本即可。
4.配置下host,打开浏览器就可以用https访问了
默认账号是 admin 密码 Harbor12345
5. docker 登录:在 /etc/docker/certs.d目录下创建目录,目录名称就是配置的hostname。然后将客户端证书放入该目录即可。
sudo mkdir -p /etc/docker/certs.d/harbor.yx.com
udo cp ca.crt /etc/docker/certs.d/harbor.yx.com
6.docker推送镜像:登录harbor,可以看到有一个预置的项目,library。
docker tag xxx harbor.yx.com/library/xxx
docker push harbor.yx.com/library/xxx:latest
可以看到已经推送成功: