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
  • 相关阅读:
    【leetcode】1365. How Many Numbers Are Smaller Than the Current Number
    【leetcode】1363. Largest Multiple of Three
    【leetcode】1362. Closest Divisors
    【leetcode】1361. Validate Binary Tree Nodes
    【leetcode】1360. Number of Days Between Two Dates
    【leetcode】1359. Count All Valid Pickup and Delivery Options
    【leetcode】1357. Apply Discount Every n Orders
    【leetcode】1356. Sort Integers by The Number of 1 Bits
    ISE应用入门的一些问题
    DDR的型号问题
  • 原文地址:https://www.cnblogs.com/kingle-study/p/10422534.html
Copyright © 2011-2022 走看看