zoukankan      html  css  js  c++  java
  • harbor 仓库搭建

    一,介绍

    1. Harbor是一个用于存储Docker镜像的企业级Registry服务。
    2. Registry是Dcoker官方的一个私有仓库镜像,可以将本地的镜像打标签进行标记然后push到以Registry起的容器的私有仓库中。企业可以根据自己的需求,使用Dokcerfile生成自己的镜像,并推到私有仓库中,这样可以大大提高拉取镜像的效率

    二,Harbor和Registry的比较

        Harbor和Registry都是Docker的镜像仓库,但是Harbor作为更多企业的选择,是因为相比较于Regisrty来说,它具有很多的优势。
        1.提供分层传输机制,优化网络传输
          Docker镜像是是分层的,而如果每次传输都使用全量文件(所以用FTP的方式并不适合),显然不经济。必须提供识别分层传输的机制,以层的UUID为标识,确定传输的对象。
        2.提供WEB界面,优化用户体验
          只用镜像的名字来进行上传下载显然很不方便,需要有一个用户界面可以支持登陆、搜索功能,包括区分公有、私有镜像。
        3.支持水平扩展集群
          当有用户对镜像的上传下载操作集中在某服务器,需要对相应的访问压力作分解。
        4.良好的安全机制
          企业中的开发团队有很多不同的职位,对于不同的职位人员,分配不同的权限,具有更好的安全性。
        5.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,供日后进行分析。

    四,安装软件必须

    软件名版本描述
    Python 2.7或更高版本 注意: 你可能必须在Linux发行版(Gentoo,Arch)上安装Python,默认情况下没有安装Python解释器
    Docker 1.10或更高版本 有关安装说明,请参考: https://docs.docker.com/engine/installation/
    Docker-Compose 1.6.0或更高版本 有关安装说明,请参考: https://docs.docker.com/compose/install/
    Openssl 推荐最新版本 为Harbor生成证书和密钥

    五,安装软件

       01,python --默认有

    [root@rancher1 ~]# python -V
    Python 2.7.5

       02, Docker

     https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.3.ce-1.el7.noarch.rpm
    
     https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm
     
    下载 rpm -ivh 同时安装两个软件包 

       03, docker-compose

     sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    [root@rancher1 ~]# sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100   617    0   617    0     0    660      0 --:--:-- --:--:-- --:--:--   660
    100 11.2M  100 11.2M    0     0  1054k      0  0:00:10  0:00:10 --:--:-- 1390k
    [root@rancher1 ~]# sudo chmod +x /usr/local/bin/docker-compose
    [root@rancher1 ~]# sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
    [root@rancher1 ~]# docker-compose --version
    docker-compose version 1.23.2, build 1110ad01
    

        04,安装harbor

     wget https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-online-installer-v1.7.1.tgz
    
    tar zxvf harbor-online-installer-v1.7.1.tgz
    

         更改harbor.cnf

    harbor参数详解
    
        必要参数:需要在配置文件中设置这些参数。如果用户更新harbor.cfg并运行install.sh脚本以重新安装Harbor,更改的参数将生效。
    
        可选参数:这些参数对于更新是可选的,即用户可以将它们保留为默认值,并在启动Harbour后在Web UI上更新它们。如果已经配置harbor.cfg,这些参数只会在首次启动Harbour时生效。harbor.cfg将忽略对这些参数的后续修改。
    
    
    必需参数
    
        hostname:目标主机的主机名,用于访问UI和Harbor服务。它应该是目标计算机的IP地址或域名(FQDN),例如,192.168.1.10或reg.yourdomain.com。不要使用localhost或127.0.0.1作为主机名,因为外部客户端需要访问Harbor服务!
    
        ui_url_protocol :( http或https。默认为http)用于访问UI和令牌/通知服务的协议。如果启用了公证,则此参数必须为*https*。默认情况下,这是*http*。要设置https协议,请参阅使用HTTPS访问配置Harbor。
    
        db_password:用于db_auth的MySQL数据库的root密码。生产环境请修改此密码
    
        max_job_workers :(默认值为3)作业服务中的最大复制工作数。对于每个镜像复制作业,程序将存储库的所有标记同步到远程目标。增加此数量可以在系统中实现更多并发复制作业。但是,由于每个复制进程都消耗一定的网络/CPU/IO资源,请根据主机的硬件资源仔细选择该参数的值。
    
        customize_crt:(on或off,默认为on),如果此属性on,准备脚本创建私钥和根证书,用于生成/验证registry的令牌。当外部源提供密钥和根证书时,将此属性设置为off。有关详细信息,请参阅自定义密钥和harbor令牌服务证书。
    
        ssl_cert:SSL证书的路径,仅在协议设置为https时应用
    
        ssl_cert_key:SSL密钥的路径,仅在协议设置为https时应用
    
        secretkey_path:用于加密或解密复制策略中远程Harbor密码的密钥路径。
    
        log_rotate_count:日志文件在被删除之前会被轮转log_rotate_count次。如果count为0,则删除旧版本而不是轮转。
    
        log_rotate_size:仅当日志文件大于log_rotate_size字节时才会轮转日志文件。如果大小后跟k,则假定大小以千字节为单位。如果使用M,则大小以兆字节为单位,如果使用G,则大小为千兆字节。尺寸100,尺寸100k,尺寸100M和尺寸100G都是有效的。
    
    可选参数
    
        Email settings:Harbor需要这些参数才能向用户发送“密码重置”电子邮件,并且仅在需要该功能时才做配置。另外,请注意,在默认情况下SSL连接没有启用,如果你的SMTP服务器需要SSL,那么你应该通过设置email_ssl = TRUE参数来启用SSL,但不支持STARTTLS。如果电子邮件服务器使用自签名证书或不受信任证书,则需要设置email_insecure = true。有关email_identity的详细说明
    
    
    
        harbor_admin_password:管理员的初始密码。此密码仅在Harbor首次启动时生效。之后将忽略此设置,并且应在UI中设置管理员密码。请注意:默认用户名/密码为admin/Harbor12345
    
        auth_mode:使用的身份验证类型。默认情况下,它是db_auth,即凭据存储在数据库中。对于LDAP身份验证,请将其设置为ldap_auth。
    
        重要信息:从现有Harbor实例升级时,必须确保在启动新版本的Harbor之前,harbor.cfg配置文件中auth_mode相同。否则,用户可能无法在升级后登录。
    
        ldap_url:LDAP连接URL(例如ldaps://ldap.mydomain.com)。 仅在**auth_mode**设置为ldap_auth时使用。
    
        ldap_searchdn:具有搜索LDAP/AD服务器权限的用户的DN(例如uid=admin,ou=people,dc=mydomain,dc=com)。
    
        ldap_search_pwd:ldap_searchdn指定的用户密码。
    
        ldap_basedn:查找用户的基本DN,例如ou=people,dc=mydomain,dc=com。 仅在**auth_mode**设置为ldap_auth时使用。
    
        ldap_filter:用于查找用户的搜索过滤器,例如(objectClass=person)。
    
        ldap_uid:用于在LDAP搜索期间匹配用户的属性,它可以是uid,cn,email或其他属性。
    
        ldap_scope:搜索用户的范围,0-LDAP_SCOPE_BASE,1-LDAP_SCOPE_ONELEVEL,2-LDAP_SCOPE_SUBTREE。默认值为2。
    
        self_registration :( on或off。默认on)启用/禁用用户自助注册功能。禁用时,新用户只能由管理员用户创建,只有管理员可以在Harbor中创建新用户。 *注意:当auth_mode设置为ldap_auth时,始终*禁用自助注册功能,并忽略此设置。
    
        token_expiration:令牌服务创建的令牌到期时间(以分钟为单位),默认为30分钟。
    
        project_creation_restriction:用于控制用户有权创建项目的设置。默认情况下,每个人都可以创建一个项目,设置为“adminonly”,只有管理员才能创建项目。

        测试环境的话更改hostname就可以了

        改docker-compose.yml

        只需要更改端口就行

        

        运行./install.sh

     

        等待安装

    默认密码Harbor12345  用户admin

     六,配置https访问

      因为harbor使用的是基于官方registy:v2,官方默认使用https,否则无法进行正常的login,pull和push操作

      1:创建证书存放目录

          mkdir -p /data/cert && cd /data/cert    

      2:创建自己的CA证书(不使用第三方权威机构的CA来认证)
        openssl genrsa -out ca.key 2048   #生成根证书私钥(无加密)

      3: 生成自签名证书(使用已有私钥ca.key自行签发根证书)

      openssl req -x509 -new -nodes -key ca.key -days 10000 -out ca.crt -subj "/CN=Harbor-ca"

    req     产生证书签发申请命令
    -x509   签发X.509格式证书命令。X.509是最通用的一种签名证书格式。
    -new    生成证书请求
    -key     指定私钥文件
    -nodes   表示私钥不加密
    -out    输出
    -subj    指定用户信息
    -days    有效期


        4:生成服务器端私钥和CSR签名请求

    openssl req -newkey rsa:4096 -nodes -sha256 -keyout server.key -out server.csr
      
        5:签发服务器证书

    echo subjectAltName = IP:192.168.88.128 > extfile.cnf
    openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 365 -extfile extfile.cnf -out server.crt
    x509           签发X.509格式证书命令。
    -req           表示证书输入请求。
    -days          表示有效天数
    -extensions    表示按OpenSSL配置文件v3_req项添加扩展。
    -CA            表示CA证书,这里为ca.crt
    -CAkey         表示CA证书密钥,这里为ca.key
    -CAcreateserial表示创建CA证书序列号
    -extfile      指定文件

      6:设置docker证书

     如果如下目录不存在,请创建,如果有域名请按此格式依次创建
    mkdir -p /etc/docker/certs.d/192.168.50.84
    # mkdir -p /etc/docker/certs.d/[IP2]
    # mkdir -p /etc/docker/certs.d/[example1.com]
    # 如果端口为443,则不需要指定。如果为自定义端口,请指定端口
    # /etc/docker/certs.d/yourdomain.com:port
    
    # 将ca根证书依次复制到上述创建的目录中
    cp ca.crt /etc/docker/certs.d/192.168.50.84/

    其他服务器使用harbor方法

    [root@rancher1 ~]# mkdir /etc/docker/certs.d/rancher1/ -p
    [root@rancher1 ~]# scp 192.168.0.167:/etc/docker/certs.d/192.168.0.167/ca.crt  /etc/docker/certs.d/rancher/
    [root@rancher1 ~]# vim /etc/docker/daemon.json
    {
      "registry-mirrors": ["https://usb391x6.mirror.aliyuncs.com"]
    }
    { "insecure-registries":["192.168.0.167"] }
    [root@rancher1 ~]# systemctl daemon-reload
    [root@rancher1 ~]# systemctl restart docker
    [root@rancher2 ~]# docker login -u admin -p Harbor12345 192.168.0.167
    Login Succeeded
  • 相关阅读:
    select_tag in rails about selected not change and onchange()
    debian7 请把标有“Debian GNU/Linux 7.1.0 _Wheezy_
    rails关于utf8问题-------------------utf8申明必须置顶
    ruby 删除文件
    svn conflict
    40亿个有序不同的数的文件中找一个缺失的数
    马云语录
    语音识别概率问题,一段在数学之美了看到的话
    两个有序数组的中位数
    磁盘文件排序-编程珠玑
  • 原文地址:https://www.cnblogs.com/kingle-study/p/10422534.html
Copyright © 2011-2022 走看看