docker harbor 安装

harbor简介

Harbor Registry(又称 Harbor 云原生制品仓库或 Harbor 镜像仓库)由 VMware 公司中国研发中心云原生实验室原创,并于 2016 年 3 月开源。Harbor 在 Docker Distribution的基础上增加了企业用户必需的权限控制、镜像签名、安全漏洞扫描和远程复制等重要功能,还提供了图形管理界面及面向国内用户的中文支持,开源后迅速在中国开发者和用户社区流行,成为中国云原生用户的主流容器镜像仓库。

Harbor是由VMWare在Docker Registry的基础之上进行了二次封装,加进去了很多额外程序,而且提供了一个非常漂亮的web界面。

  • Project Harbor 是一个开源的受信任的云原生注册表项目,用于存储、签名和扫描上下文。
  • Harbor 通过添加用户通常需要的功能(如安全性、身份和管理)来扩展开源 Docker 发行版。
  • Harbor 支持用户管理、访问控制、活动监控、实例间复制等高级功能。

harbor的功能

  • 云原生注册表:支持容器镜像和Helm图表,Harbor 充当云原生环境(如容器运行时和编排平台)的注册表。
  • 基于角色的访问控制:用户通过“项目”访问不同的存储库,用户可以对项目下的图像或 Helm 图表具有不同的权限。
  • 基于策略的复制:可以使用过滤器(存储库、标签和标签)基于策略在多个注册表实例之间复制(同步)图像和图表。如果遇到任何错误,Harbor 会自动重试复制。这可用于辅助负载平衡、实现高可用性以及促进混合和多云场景中的多数据中心部署。
  • 漏洞扫描:Harbor 定期扫描映像以查找漏洞,并进行策略检查以防止部署易受攻击的映像。
  • LDAP/AD 支持:Harbor 与现有的企业 LDAP/AD 集成以进行用户身份验证和管理,并支持将 LDAP 组导入 Harbor,然后可以授予特定项目的权限。
  • OIDC 支持:Harbor 利用 OpenID Connect (OIDC) 来验证由外部授权服务器或身份提供者认证的用户的身份。可以启用单点登录以登录到 Harbor 门户。
  • 图像删除和垃圾收集:系统管理员可以运行垃圾收集作业,以便可以删除图像(悬空清单和未引用的 blob)并定期释放它们的空间。
  • Notary:支持使用 Docker Content Trust(利用 Notary)对容器镜像进行签名,以保证真实性和出处。此外,还可以激活防止部署未签名映像的策略。
  • 图形用户门户:用户可以轻松浏览、搜索存储库和管理项目。
  • 审计:通过日志跟踪对存储库的所有操作。
  • RESTful API:提供 RESTful API 是为了方便管理操作,并且易于用于与外部系统集成。嵌入式 Swagger UI 可用于探索和测试 API。
  • 易于部署:Harbor 可以通过 Docker compose 以及 Helm Chart 进行部署,最近还添加了一个 Harbor Operator。

安装条件及方式

系统要求:

在 Linux 主机上: docker 17.06.0-ce+ 和 docker-compose 1.18.0+ 。

您可以从 官方发布页面下载 Harbor 安装程序。下载在线安装程序或离线安装程序。

  • 在线安装程序:在线安装程序从 Docker 中心下载 Harbor 镜像。因此,安装程序的尺寸非常小。
  • 离线安装程序:如果要部署 Harbor 的主机没有连接到 Internet,请使用离线安装程序。离线安装程序包含预先构建的镜像,因此它比在线安装程序大。

在线和离线安装程序的安装过程几乎相同。

下载并解压安装程序

  1. 转到 Harbor 发布页面

  2. 下载您要安装的版本的在线或离线安装程序。

    image-20220419104247135.png
mkdir -p /usr/local/service && cd /usr/local/service
wget https://github.com/goharbor/harbor/releases/download/v2.3.5/harbor-offline-installer-v2.3.5.tgz
  1. (可选--跳过也无妨)下载相应*.asc文件以验证包是否为正版。

    *.asc文件是一个 OpenPGP 密钥文件。执行以下步骤以验证下载的捆绑包是否为正版。

    1. 获取文件的公钥*.asc

      gpg --keyserver hkps://keyserver.ubuntu.com --receive-keys 644FF454C0B4115C
      

      你应该看到消息public key "Harbor-sign (The key for signing Harbor build) <jiangd@vmware.com>" imported

    2. 通过运行以下命令之一来验证软件包是否为正版。

      • 在线安装程序:

        gpg -v --keyserver hkps://keyserver.ubuntu.com --verify harbor-online-installer-version.tgz.asc
        
      • 离线安装程序:

        gpg -v --keyserver hkps://keyserver.ubuntu.com --verify harbor-offline-installer-version.tgz.asc
        

      gpg命令验证捆绑包的签名是否与*.asc密钥文件的签名匹配。您应该看到签名正确的确认。

      gpg: armor header: Version: GnuPG v1
      gpg: assuming signed data in 'harbor-online-installer-v2.0.2.tgz'
      gpg: Signature made Tue Jul 28 09:49:20 2020 UTC
      gpg:                using RSA key 644FF454C0B4115C
      gpg: using pgp trust model
      gpg: Good signature from "Harbor-sign (The key for signing Harbor build) <jiangd@vmware.com>" [unknown]
      gpg: WARNING: This key is not certified with a trusted signature!
      gpg:          There is no indication that the signature belongs to the owner.
      Primary key fingerprint: 7722 D168 DAEC 4578 06C9  6FF9 644F F454 C0B4 115C
      gpg: binary signature, digest algorithm SHA1, key algorithm rsa4096
      
  2. 用于tar解压安装包:

    • 在线安装程序:

      tar xzvf harbor-online-installer-v2.5.0.tgz
      
    • 离线安装程序:

      tar xzvf harbor-offline-installer-v2.5.0.tgz
      

配置HTTPS访问 (http访问可以跳过)

默认情况下,Harbor 不附带证书。可以在没有安全性的情况下部署 Harbor,以便您可以通过 HTTP 连接到它。但是,只有在没有连接到外部 Internet 的气隙测试或开发环境中才能使用 HTTP。在非气隙环境中使用 HTTP 会使您面临中间人攻击。在生产环境中,始终使用 HTTPS。如果您启用 Content Trust with Notary 以正确签署所有图像,则必须使用 HTTPS。

要配置 HTTPS,您必须创建 SSL 证书。您可以使用由受信任的第三方 CA 签名的证书,也可以使用自签名证书。本节介绍如何使用 OpenSSL创建 CA,以及如何使用您的 CA 签署服务器证书和客户端证书。您可以使用其他 CA 提供程序,例如 Let's Encrypt

下面的过程假设您的 Harbor 注册中心的主机名是harbor.xxxx.com,并且它的 DNS 记录指向您正在运行 Harbor 的主机。

生成证书颁发机构证书

在生产环境中,您应该从 CA 获得证书。在测试或开发环境中,您可以生成自己的 CA。要生成 CA 证书,请运行以下命令。

  1. 生成 CA 证书私钥。

    # 创建文件夹 放置新创建的ca证书及生成的服务器认证key和cert
    mkdir cert && cd cert
    openssl genrsa -out ca.key 4096
    
  2. 生成 CA 证书。

    调整-subj选项中的值以反映您的组织。如果您使用 FQDN 连接您的 Harbor 主机,则必须将其指定为公用名 ( CN) 属性。

    openssl req -x509 -new -nodes -sha512 -days 3650 \
     -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor.xxxx.com" \
     -key ca.key \
     -out ca.crt
    

生成服务器证书

证书通常包含一个.crt文件和一个.key文件,例如,harbor.xxxx.com.crtharbor.xxxx.com.key.

  1. 生成私钥。

    openssl genrsa -out harbor.xxxx.com.key 4096
    
  2. 生成证书签名请求 (CSR)。

    调整-subj选项中的值以反映您的组织。如果您使用 FQDN 连接您的 Harbor 主机,则必须将其指定为公用名称 ( CN) 属性并在密钥和 CSR 文件名中使用它。

    openssl req -sha512 -new \
        -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor.xxxx.com" \
        -key harbor.xxxx.com.key \
        -out harbor.xxxx.com.csr
    
  3. 生成 x509 v3 扩展文件。

    无论您是使用 FQDN 还是 IP 地址连接到您的 Harbor 主机,您都必须创建此文件,以便为您的 Harbor 主机生成符合主题备用名称 (SAN) 和 x509 v3 的证书扩展要求。替换DNS条目以反映您的域。

    cat > v3.ext <<-EOF
    authorityKeyIdentifier=keyid,issuer
    basicConstraints=CA:FALSE
    keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
    extendedKeyUsage = serverAuth
    subjectAltName = @alt_names
    # subjectAltName = IP:192.168.159.132
    # EOF
    [alt_names]
    DNS.1=harbor.xxxx.com
    DNS.2=harbor.xxxx
    DNS.3=center-test
    EOF
    
  4. 使用该v3.ext文件为您的 Harbor 主机生成证书。

    yourdomain.comCRS 和 CRT 文件名中的 替换为 Harbor 主机名。

    openssl x509 -req -sha512 -days 3650 \
        -extfile v3.ext \
        -CA ca.crt -CAkey ca.key -CAcreateserial \
        -in harbor.xxxx.com.csr \
        -out harbor.xxxx.com.crt
    

向 Harbor 和 Docker 提供证书

生成ca.crtharbor.xxxx.com.crtharbor.xxxx.com.key必须将它们提供给 Harbor 和 Docker,并重新配置 Harbor 以使用它们。

  1. 将服务器证书和密钥复制到 Harbor 主机上的 certficates 文件夹中。

    cp harbor.xxxx.com.crt /data/cert/
    cp harbor.xxxx.com.key /data/cert/
    
  2. 转换harbor.xxxx.com.crtharbor.xxxx.com.cert, 供 Docker 使用。

    Docker 守护进程将.crt文件解释为 CA 证书,将.cert文件解释为客户端证书。

    openssl x509 -inform PEM -in harbor.xxxx.com.crt -out harbor.xxxx.com.cert
    
  3. 将服务器证书、密钥和 CA 文件复制到 Harbor 主机上的 Docker 证书文件夹中。您必须先创建适当的文件夹。

    mkdir -p /etc/docker/certs.d/harbor.xxxx.com:8843
    cp harbor.xxxx.com.cert /etc/docker/certs.d/harbor.xxxx.com:8843/
    cp harbor.xxxx.com.key /etc/docker/certs.d/harbor.xxxx.com:8843/
    cp ca.crt /etc/docker/certs.d/harbor.xxxx.com:8843/
    

    如果您将默认nginx端口 443 映射到不同的端口,请创建文件夹/etc/docker/certs.d/harbor.xxxx.com:8843/etc/docker/certs.d/harbor_IP:8843.

    如果是云服务,8843端口需要加入安全组

  4. 重启 Docker 引擎。

    systemctl reload-daemon
    systemctl restart docker
    

以下示例说明了使用自定义证书的配置。

/etc/docker/certs.d/
    └── harbor.xxxx.com:8843
       ├── harbor.xxxx.com.cert  <-- Server certificate signed by CA
       ├── harbor.xxxx.com.key   <-- Server key signed by CA
       └── ca.crt               <-- Certificate authority that signed the registry certificate

部署或重新配置 Harbor

  • 如果您尚未部署 Harbor,配置harbor.yml

    • # 配置harbor配置文件
      cd ../harbor/
      cp harbor.yml.tmpl harbor.yml
      # 编辑配置文件,给出几个重要的选项
      vim harbor.yml
      
      hostname: harbor.xxxx.com
      http:
        port: 8080
      https:
        port: 8843
        certificate: /data/cert/harbor.xxxx.com.crt
        private_key: /data/cert/harbor.xxxx.com.key
      harbor_admin_password: Harborxxxx
      
      
      ./install.sh
      
  • 如果您已经使用 HTTP 部署了 Harbor,并希望将其重新配置为使用 HTTPS,请执行以下步骤。

    • 运行prepare脚本以启用 HTTPS。

      Harbor 使用nginx实例作为所有的反向代理。您使用prepare脚本配置nginx为使用 HTTPS。位于Harbor 安装程序包中,与脚本prepare处于同一级别。install.sh

      ./prepare
      
    • 如果 Harbor 正在运行,请停止并删除现有实例。

      您的图像数据保留在文件系统中,因此不会丢失任何数据。

      docker-compose down -v
      
    • 重启harbor:

      docker-compose up -d
      
  1. docker-compose down -v 或 docker-compose stop //区别,前者会remove掉容器、image、网络,停的更干净,后者只是停服务
  2. docker-compose up -d

验证 HTTPS 连接

为 Harbor 设置 HTTPS 后,您可以通过执行以下步骤来验证 HTTPS 连接。

  • 打开浏览器并输入https://harbor.xxxx.com。它应该显示 Harbor 界面。

    某些浏览器可能会显示一条警告,指出证书颁发机构 (CA) 未知。当使用不是来自受信任的第三方 CA 的自签名 CA 时,会发生这种情况。您可以将 CA 导入浏览器以删除警告。

  • 在运行 Docker 守护程序的机器上,检查/etc/docker/daemon.json文件以确保-insecure-registry设置为https://harbor.xxxx.com选项。

  • 从 Docker 客户端登录到 Harbor。

    docker login harbor.xxxx.com
    

    如果您已将nginx443 端口映射到其他端口,请在login命令中添加该端口。

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

推荐阅读更多精彩内容