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:
参考: http://www.javashuo.com/article/p-navsdjcb-gs.html
经过对容器的layer进行扫描,发现漏洞并进行预警,其使用数据是基于Common Vulnerabilities and Exposures数据库(简称CVE), 各Linux发行版通常都有本身的CVE源,而Clair则是与其进行匹配以判断漏洞的存在与否,好比HeartBleed的CVE为:CVE-2014-0160。 node
目前Clair支持以下数据源:mysql
HARBOR:
这是VMWare公司提供的一个docker私有仓库构建程序,功能很是强大.
1. 支持多租户签名和认证
2. 支持安全扫描和风险分析
3. 此次日志审计
4. 基于角色的访问控制
5. 支持可扩展的API和GUI
6. Image replication between instances
7. 国际化作的很好(目前仅支持英文和中文)
linux
Harbor部署:
1. 从GitHub上下载Harbor的二进制发行包.
2. 准备必要的环境:
yum install docker-ce docker-compose
3. 解压后,先编辑harbor.cfg
vim harbor.cfg
hostname = node1.test.com
ui_url_protocol = http
max_job_workers = 3 #启动3个处理用户上传下载的进程,若为4核,3个就是最好的。
admiral_url = NA #NA:不自定义管理URL
harbor_admin_password = Harbor12345 #默认的管理员密码
#默认它会自动建立一个mysql容器,并设置mysql的root密码为root123,
#注意:从harbor v1.7.5之后使用的数据库默认是postgresql
db_password = root123
#若想让其使用外部数据库,可修改下面参数为外部数据库的地址.
db_host = postgresql
#若启用了--with-clair时,注意修改clair的数据库密码,还有redis的密码,由于clair须要使用redis。
clair_db_password = root123
4. 运行 install.sh ,若须要启用harbor的其它功能,可查看 install.sh --help
安装完成后,它会提示你访问harbor的地址是多少,你就能够直接在浏览器中访问这个地址了。
5. 可测试打开harbor,并测试上传镜像。
5.1 在测试上传镜像时,须要先登陆harbor的Web界面,而后建立一个项目,这个项目就至关于公司中不一样的项目组,每一个项目组分别管理各自的项目镜像,以便后期该项目不须要时,可直接删除该项目。
5.2 而后到harbor客户端,测试登陆harbor仓库,并尝试上传镜像
5.2.1 由于这里使用了非安全的HTTP,所以须要修改docker的启动参数
vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --selinux-enabled=false --insecure-registry 192.168.10.154
#若没有启用SELinux可设置不启用它
#--insecure-registry 即指定一个非安全的仓库,这里指定内网harbor地址为192.168.10.154
# 如有多个可重复--insecure-registry
5.2.2 测试上传镜像
~]# docker login http://192.168.10.154
Authenticating with existing credentials...
WARNING! Your password will be stored unencrypted in /root/.docker/config.json. #这里须要注意: 登陆成功后,用户名密码会保存到config.json中。
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
~]# docker push 192.168.10.154/test1/nginx-alpine:v1 #这样就能够上传镜像到harbor上了。
6. 可自行查看 docker-compose.yml, install.sh 实际执行的docker-compose命令.
docker-compose
#命令在运行时,会自动在当前目录下,找docker-compose.yml配置文件,若找到则安装里面的定义
#来决定到哪里去找镜像,先启动那个容器,启动镜像须要挂载什么卷等。
在配置Harbor时,若出现问题,可结合/var/log/harbor中的日志文件来查看问题.
我一般会这样查看:
tail -f /var/log/harbor/*.log
Harbor配置HTTPS:
1. 修改 harbor.cfg
hostname = harbor.zcf.com
ui_url_protocol = https
ssl_cert = /data/docker/certs/harbor.zcf.com.crt
ssl_cert_key = /data/docker/certs/harbor.zcf.com.key
harbor_admin_password = adminpass
2. 建立证书,并放到上面定义的目录中
测试使用,可以使用我用shell写的证书制做工具:
https://github.com/zhang75656/shell-tools/blob/master/gencret.sh
chmod +x gencret.sh
./gencret.sh --help #可查看使用帮助.但前提是必须安装openssl
3. 从新执行 ./install.sh 便可,这样harbor服务端就能够工做了.
Harbor 客户端配置:
1. 在docker配置目录下建立证书目录,
#注意: 证书目录是存放harbor服务器的证书文件.
# docker login harbor.zcf.com
# 当执行上面命令登陆harbor时,默认docker会到/etc/docker/certs.d/下去找 harbor.zcf.com这个目录,看其下面是否有证书可用。
# 因此,须要将harbor服务器上的证书scp过来,放到docker客户端的这个目录中。
mkdir /etc/docker/certs.d/harbor.zcf.com
nginx
Harbor经过Systemd管理时,所须要的systemd脚本参考:git
[Unit]
Description=BigDisk docker-compose container starter
After=docker.service network-online.target
Requires=docker.service network-online.target
[Service]
WorkingDirectory=/[path_to_harbor] #这里须要修改成Harbor的安装目录.
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/docker-compose up -d #这里须要确认,docker-compose的路径是否与本身的系统的路径一致.
ExecStop=/usr/local/bin/docker-compose down
ExecReload=/usr/bin/docker-compose up -d
[Install]
WantedBy=multi-user.targetgithub