Harbor部署

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容