Harbor部署

作者: 大鹏之动 | 来源:发表于2019-05-07 19:33 被阅读1次

    Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜像的效率。

    Harbor架构

    Harbor架构

    主要的特征

    • 多租户签名和验证
    • 安全和漏洞扫描
    • 身份识别和基于角色的访问控制
    • 实例间的镜像复制
    • 可扩展的API和图形用户界面
    • 国际化(多国语音支持,含中文)

    安装步骤

    • 下载安装包
    • 配置harbor.cfg
    • 运行install.sh安装并开启harbor

    下载安装包

    wget https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.5.tgz
    tar -zxf harbor-offline-installer-v1.7.5.tgz
    cd harbor
    

    配置harbor.cfg

    这个文件包含2个部分,一个是必须参数,一个是可选项参数
    必要参数:这些参数被修改,如果需要生效需要运行install.sh才能生效;

    • hostname:需要用FQDN,这个地址是外部访问,用于访问portal和仓库服务;
    • ui_url_prototol:(http或者https,默认是http),这个协议用于访问Portal和token/通知服务;配置https参考:https://github.com/goharbor/harbor/blob/master/docs/configure_https.md
    • db_password:postgreSQL的root密码;
    • max_job_workers:(默认是10),最大副本worker;
    • customize_crt:(on或者off,默认是on),当设置为on时,prepare脚本会创建私钥和根证书为了生成和验证仓库的token。设置为off时,需要自己提供,参照:https://github.com/goharbor/harbor/blob/master/docs/customize_token_service.md
    • ssl_cert:ssl证书的路径,当协议设置为https才能生效;
    • ss_cert_key:ssl私钥,当协议设置为https才能生效;
    • secretkay_path:为加、解密私钥的密码路径;
    • log_rotate_count:在log_rotate_count次之前的文件会被删除。假如设置为0,则老版本直接删除,而不做日志轮回;
    • log_rotate_size:假如日志增长到log_rotate_size大小会被轮回,单位:k,M,G;
    • http_proxy:配置proxy为Clair;
    • https_proxy:配置https prozy为Clair;
    • no_proxy:不配置代理为Clair;

    可选参数:可选择参数是选择性更改,你可以保留默认在web portal上也可以进行修改。假如你改动了harbor.cfg,只能在首次启动有效,再次修改将被忽略。注意:当你选定了auth_mode后并且注册和创建任何用户在harbor,认证模式就不能更改了。

    • Email settings:
    email_server = smtp.mydomain.com
    email_server_port = 25
    email_identity =
    email_username = sample_admin@mydomain.com
    email_password = abc
    email_from = admin sample_admin@mydomain.com
    email_ssl = false
    email_insecure = false
    
    • harbor_admin_password:(默认:admin/Harbor12345);
    • auth_mode:默认是db_auth,这个认证会存放在数据库中。对于LDAP认证,设置ldap_auth;注意:如果升级了版本,请和原来保持一致,不然不能登录;
    • token_expiration:token被token服务创建后默认30分钟失效;
    • project_creation_restriction:这个标签用于控制哪些用户有权限创建项目,默认每个人都能创建项目,设置它为“adminonly”,只有admin才能创建项目;

    配置存储

    默认Harbor使用本地存储。在生产环境中你可能考虑使用其他存储,如S3,OpenStack Swift,Ceph等。

    • registry_storage_provider_name:可以是filesystem,s3,gcs,azure等,默认是filesystem;
    • registry_storage_provider_config:逗号分割的"key:value"对,为存储提供配置;
    • registry_custom_ca_bundle:当使用自签证书时,需要把根证书注册到仓库的truststore和chart仓库容器;

    如下:

    registry_storage_provider_name=swift
    registry_storage_provider_config="username: admin, password: ADMIN_PASS, authurl: http://keystone_addr:35357/v3/auth, tenant: admin, domain: default, region: regionOne, container: docker_images"
    

    安装harbor并启动harbor

    一旦配置好harbor.cfg和存储,你就可以开始使用install.sh脚本安装。

    • 默认安装(不包含Notary/Clair服务),Clair服务集成漏洞扫描。
    $sudo ./install.sh
    

    假如安装过程没有任何异常,可以使用浏览器打开:http://域名(harbor.cfg配置的hostname),默认使用admin/Harbor12345帐号密码登录。登录后,创建一个项目,如myproject。你能使用 docker命令登录并push镜像。注意:默认安装的是使用HTTP,你需要在docker客户端程序添加一个--insecure-registry选项并重启Docker服务。

    $ docker login reg.yourdomain.com             #登录后会把密码保存在:/root/.docker/config.json
    $ docker push reg.yourdomain.com/myproject/myrepo:mytag
    
    $ sudo ./install.sh --with-clair
    
    • 安装带有chart仓库服务
    $ sudo ./install.sh --with-chartmuseum
    

    配置Harbor通过 HTTPS访问

    Harbor默认不带有任何认证,使用HTTP访问服务,这种方式很容易配置并且运行,适合于开发和测试环境,如果在生产环境,推荐启动HTTPS。请参照链接:https://github.com/goharbor/harbor/blob/master/docs/configure_https.md

    管理Harbor的生命周期

    使用docker-compase管理,需要运行在harbor的目录,下面包含docker-compose.yaml(或yml)文件

    • 停止harbor服务
    $ docker-compose stop
    Stopping nginx             ... done
    Stopping harbor-portal     ... done
    Stopping harbor-jobservice ... done
    Stopping harbor-core       ... done
    Stopping registryctl       ... done
    Stopping harbor-db         ... done
    Stopping registry          ... done
    Stopping redis             ... done
    Stopping harbor-log        ... done
    
    • 启动Harbor服务
    $docker-compose start
    Starting log         ... done
    Starting registry    ... done
    Starting registryctl ... done
    Starting postgresql  ... done
    Starting adminserver ... done
    Starting core        ... done
    Starting portal      ... done
    Starting redis       ... done
    Starting jobservice  ... done
    Starting proxy       ... done
    
    • 修改Harbor配置文件生效
      为了使修改的Harbor的配置生效,需要先将停止所有存在的Harbor实例,更新harbor.cfg,再运行prepare脚本,最后重建新的Harbor实例。
    $ sudo docker-compose down -v
    $ vim harbor.cfg
    $ sudo prepare
    $ sudo docker-compose up -d
    
    • 干净的重新安装Harbor
      首先删除所有的Harbor容器,然后删除Harbor的数据和镜像数据
    $ sudo docker-compose down -v
    $ rm -r /data/database
    $ rm -r /data/registry
    

    管理带有附加组建(Notary/Clair/chartmuseum)的harbor

    管理命令:

    $ sudo docker-compose -f ./docker-compose.yml -f ./docker-compose.notary.yml -f ./docker-compose.clair.yml -f ./docker-compose.chartmuseum.yml down -v
    $ vim harbor.cfg
    $ sudo prepare --with-notary --with-clair --with-chartmuseum
    $ sudo docker-compose -f ./docker-compose.yml -f ./docker-compose.notary.yml -f ./docker-compose.clair.yml -f ./docker-compose.chartmuseum.yml up -d
    

    持久化数据和日志文件

    默认Harbor持久化数据在这台主机的/data目录,即使Harbor的容器删除或者重建都会保持不变。另外Harbor使用rsyslog为每个容器收集日志。默认日志文件存放在/var/log/harbor目录,可以方便定位问题。

    修改Harbor自定义的端口

    • 对于HTTP协议

      • 修改docker-compose.yml文件,将第一个80改为8888:80
        proxy:
            image: goharbor/nginx-photon:v1.6.0
            container_name: nginx
            restart: always
            volumes:
            - ./common/config/nginx:/etc/nginx:z
            ports:
            - 8888:80
            - 443:443
        
      • 修改harbor.cfg,修改hostname
        hostname = 192.168.0.2:8888
        
      • 重新部署Harbor
    • 对于HTTPS协议

      proxy:
        image: goharbor/nginx-photon:v1.6.0
        container_name: nginx
        restart: always
        volumes:
          - ./common/config/nginx:/etc/nginx:z
        ports:
          - 80:80
          - 8888:443
      
      • 修改harbor.cfg并添加8888端口
      hostname = 192.168.0.2:8888
      
      • 重新部署Harbor

    性能调优

    默认Harbor限制Clair容器占用CPU资源,为了避免过度使用CPU,可以修改docker-compose.clair.yml文件。

    故障定位

    • 当Harbor工作不正常,运行下面命令检查
    $ sudo docker-compose ps
    

    假如有一个容器不是UP状态,检查这个容器的日志文件,在/var/log/harbor目录下。

    Clair不能在线更新缺陷库(一般更新时间比较长,需要等待)

    当Harbor安装的环境没有外网访问,Clair不能获取到公共的缺陷库。在这种情况下,需要管理员手动去更新缺陷库。
    解决这个思路:部署一台Clair在外网,让其更新到最新的缺陷库,然后将Postgres的2个库导出,然后导进内网Clair即可。参照连接:https://github.com/goharbor/harbor/blob/master/docs/import_vulnerability_data.md

    参考链接

    https://docs.docker.com/engine/security/trust/content_trust/
    https://coreos.com/clair/docs/2.0.1/
    https://github.com/goharbor/harbor/blob/master/docs/user_guide.md
    https://github.com/appc/spec
    https://github.com/goharbor/harbor/blob/master/docs/configure_https.md
    https://github.com/goharbor/harbor/blob/master/docs/import_vulnerability_data.md
    https://github.com/goharbor/harbor/wiki/Architecture-Overview-of-Harbor

    相关文章

      网友评论

        本文标题:Harbor部署

        本文链接:https://www.haomeiwen.com/subject/fynyoqtx.html