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 git 地址

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 installerHarbor 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

      可以看到已经推送成功:

      

 

 

原文地址:https://www.cnblogs.com/yx88/p/12932310.html