Harbor安装配置

本节介绍如何执行 Harbor 的全新安装。

如果您是从先前版本的 Harbor 升级,则可能需要更新配置文件并迁移数据以适应更高版本的数据库架构。有关升级的信息,请参阅 升级 Harbor

在安装 Harbor 之前,您可以在 Harbor 团队维护的演示环境中测试最新版本的 Harbor。有关信息,请参阅 使用演示服务器测试 Harbor

Harbor 支持与用于复制数据的第三方复制适配器用于 authN/authZ 的 OIDC 适配器用于容器映像漏洞扫描的扫描器适配器的集成。有关支持的适配器的信息,请参阅 Harbor 兼容性列表

安装过程

标准的 Harbor 安装过程包括以下阶段:

  1. 确保您的目标主机满足 Harbor 安装先决条件
  2. 下载 Harbor 安装程序
  3. 配置 HTTPS 访问 Harbor
  4. 配置 Harbor YML 文件
  5. 配置启用内部 TLS
  6. 运行安装程序脚本

如果安装失败,请参阅 Harbor 安装故障排除

在 Kubernetes 上部署 Harbor

您还可以使用 Helm 在 Kubernetes 集群上安装 Harbor,使 Harbor 高可用。有关在 Kubernetes 集群上使用 Helm 安装 Harbor 的信息,请参阅 通过 Helm 部署具有高可用性的 Harbor

安装后配置

有关如何管理已部署的 Harbor 实例的信息,请参阅 重新配置 Harbor 和管理 Harbor 生命周期

默认情况下,Harbor 使用自己的私钥和证书向 Docker 进行身份验证。有关如何选择性地自定义配置以使用自己的密钥和证书的信息,请参阅 自定义 Harbor 令牌服务

安装后,通过 Web 控制台登录您的 Harbor,在“配置”下配置实例。Harbor 还提供了一个命令行界面 (CLI),允许您 在命令行中配置 Harbor 用户设置

harbor组件

下表列出了部署 Harbor 时部署的一些关键组件。

成分版本
PostgreSQL9.6.10-1.ph2
Redis4.0.10-1.ph2
Beego1.0
Chartmuseum0.9.0
Docker/distribution2.7.1
Docker/notary0.6.1
Helm2.9.1
Swagger-ui3.22.1

Harbor 安装先决条件

Harbor 部署为多个 Docker 容器。因此,您可以将其部署在任何支持 Docker 的 Linux 发行版上。目标主机需要安装 Docker 和 Docker Compose。

硬件

下表列出了部署 Harbor 的最低和推荐硬件配置。

资源最低配置推荐配置
CPU2CPU4CPU
内存4GB8 GB
磁盘40 GB160GB

软件

下表列出了目标主机上必须安装的软件版本。

软件版本描述
Docker engine17.06.0-ce+ 或更高版本有关安装说明,请参阅 Docker engine 文档
Docker compose1.18.0 或更高版本有关安装说明,请参阅 Docker Compose 文档
OpenSSL最新的优先用于为 Harbor 生成证书和密钥

网络端口

Harbor 要求在目标主机上打开以下端口。

港口协议描述
443HTTPSHarbor 门户和核心 API 接受此端口上的 HTTPS 请求。您可以在配置文件中更改此端口。
4443HTTPS连接到 Harbor 的 Docker Content Trust 服务。仅在启用 Notary 时才需要。您可以在配置文件中更改此端口。
80HTTPHarbor 门户和核心 API 接受此端口上的 HTTP 请求。您可以在配置文件中更改此端口。

下载 Harbor 安装程序

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

  • 在线安装程序:在线安装程序从 Docker hub 下载 Harbor 镜像。因此,安装程序的尺寸非常小。

  • 离线安装程序:如果要部署 Harbor 的主机没有连接到 Internet,请使用离线安装程序。离线安装程序包含预先构建的映像,因此它比在线安装程序大。

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

下载并解压安装程序

  1. 转至 Harbor 发布页面

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

  3. (可选)下载相应的*.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
      
  4. 使用tar提取安装程序包:

    • 在线安装程序:

      bash $ tar xzvf harbor-online-installer-version.tgz
      
    • 离线安装程序:

      bash $ tar xzvf harbor-offline-installer-version.tgz
      

配置 HTTPS 访问 Harbor

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

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

以下过程假设您的 Harbor 注册表的主机名是yourdomain.com,并且其 DNS 记录指向您运行 Harbor 的主机。

生成证书颁发机构证书

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

  1. 生成 CA 证书私钥。

    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=yourdomain.com" \
     -key ca.key \
     -out ca.crt
    

生成服务器证书

证书通常包含一个.crt文件和一个.key文件,例如,yourdomain.com.crtyourdomain.com.key.

  1. 生成私钥。

    openssl genrsa -out yourdomain.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=yourdomain.com" \
        -key yourdomain.com.key \
        -out yourdomain.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
    
    [alt_names]
    DNS.1=yourdomain.com
    DNS.2=yourdomain
    DNS.3=hostname
    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 yourdomain.com.csr \
        -out yourdomain.com.crt
    

向 Harbor 和 Docker 提供证书

生成后ca.crtyourdomain.com.crtyourdomain.com.key文件,必须将它们提供给港口和码头工人,和重新配置港使用它们。

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

    cp yourdomain.com.crt /data/cert/
    cp yourdomain.com.key /data/cert/
    
  2. 转换yourdomain.com.crtyourdomain.com.cert,供 Docker 使用。

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

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

    cp yourdomain.com.cert /etc/docker/certs.d/yourdomain.com/
    cp yourdomain.com.key /etc/docker/certs.d/yourdomain.com/
    cp ca.crt /etc/docker/certs.d/yourdomain.com/
    

    如果您将默认nginx端口 443映射到其他端口,请创建文件夹/etc/docker/certs.d/yourdomain.com:port/etc/docker/certs.d/harbor_IP:port

  4. 重启 Docker 引擎。

    systemctl restart docker
    

您可能还需要在操作系统级别信任证书。有关详细信息,请参阅 Harbor 安装故障排除

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

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

部署或重新配置 Harbor

如果您尚未部署 Harbor,请参阅 配置 Harbor YML 文件,以了解有关如何通过在 中指定hostnamehttps属性来配置 Harbor 以使用证书的信息harbor.yml

如果您已经使用 HTTP 部署了 Harbor 并希望将其重新配置为使用 HTTPS,请执行以下步骤。

  1. 运行prepare脚本以启用 HTTPS。

    Harbor 使用一个nginx实例作为所有服务的反向代理。您可以使用prepare脚本进行配置nginx以使用 HTTPS。该prepare在港的安装包,在同级别的install.sh脚本。

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

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

    docker-compose down -v
    
  3. 重启harbor:

    docker-compose up -d
    

验证 HTTPS 连接

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

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

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

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

  • 从 Docker 客户端登录 Harbor。

    docker login yourdomain.com
    

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

    docker login yourdomain.com:port
    

配置 Harbor 组件之间的内部 TLS 通信

默认情况下,Harbor 的组件(harbor-core、harbor-jobservice、proxy、harbor-portal、registry、registryctl、trivy_adapter、chartmuseum)之间的内部通信使用 HTTP 协议,这对于某些生产环境可能不够安全。从 Harbor v2.0 开始,该内部网络可以使用 TLS。在生产环境中,始终使用 HTTPS 是推荐的最佳实践。

此功能是通过internal_tlsinharbor.yml文件引入的。要启用内部TLS,设置enabledtrue和设定dir值目录包含内部证书文件的路径。

所有证书都可以由prepare工具自动生成。

docker run -v /:/hostfs goharbor/prepare:v2.1.0 gencert -p /path/to/internal/tls/cert

用户也可以提供自己的 CA 来生成其他证书。只需将 CA 的证书和密钥放在内部 tls cert 目录中,并将它们命名为harbor_internal_ca.keyand harbor_internal_ca.crt。此外,用户还可以提供所有组件的证书。但是,证书有一些限制:

  • 首先,所有证书必须由一个唯一的 CA 签名
  • 其次,内部证书的文件名和CN证书文件上的字段必须遵循下面列出的约定'
  • 第三,因为Golang 1.5不推荐使用不带SAN的自签名证书,所以你自己生成证书时必须在你的证书文件中添加SAN扩展名,否则Harbor实例将无法正常启动。SAN 扩展中的 DNS 名称应与下表中的 CN 字段相同。有关更多信息,请参阅 golang 1.5 发行说明和 本期
名称用法CN
harbor_internal_ca.keyca 内部 TLS 的密钥文件N/A
harbor_internal_ca.crtca 的内部 TLS 证书文件N/A
core.key核心的密钥文件N/A
core.crtcore的证书文件core
job_service.keyjob_service 的密钥文件N/A
job_service.crtjob_service 的证书文件jobservice
proxy.key代理的密钥文件N/A
proxy.crt代理的证书文件proxy
portal.key门户的密钥文件N/A
portal.crt门户的证书文件portal
registry.key注册表的密钥文件N/A
registry.crt注册表的证书文件registry
registryctl.keyregistryctl 的密钥文件N/A
registryctl.crtregistryctl 的证书文件registryctl
notary_server.keynotary_server 的密钥文件N/A
notary_server.crtnotary_server 的证书文件notary-server
notary_signer.keynotary_signer 的密钥文件N/A
notary_signer.crtnotary_signer 的证书文件notary-signer
trivy_adapter.keytrivy_adapter. 的密钥文件N/A
trivy_adapter.crttrivy_adapter. 的证书文件trivy-adapter
chartmuseum.key图表博物馆的密钥文件N/A
chartmuseum.crt图表博物馆的证书文件chartmuseum

配置 Harbor YML 文件

您可以在安装程序包中包含的harbor.yml文件中为 Harbor 设置系统级参数。这些参数在您运行install.sh脚本安装或重新配置 Harbor时生效。

在初始部署和启动 Harbor 之后,您可以在 Harbor Web 门户中执行其他配置。

所需参数

下表列出了部署 Harbor 时必须设置的参数。默认情况下,harbor.yml文件中的所有必需参数都未注释。可选参数用#注释了. 您不一定需要更改提供默认值的所需参数的值,但这些参数必须保持未注释状态。至少,您必须更新hostname参数。

重要提示:Harbor 不附带任何证书。在 1.9.x 及以下版本中,Harbor 默认使用 HTTP 来处理注册请求。这仅在气隙测试或开发环境中是可接受的。在生产环境中,始终使用 HTTPS。如果您启用 Content Trust with Notary 以正确签署所有镜像,则必须使用 HTTPS。

您可以使用受信任的第三方 CA 签署的证书,也可以使用自签名证书。有关如何创建 CA 以及如何使用 CA 签署服务器证书和客户端证书的信息,请参阅 使用 HTTPS 访问配置 Harbor

Harbor 部署所需的参数
范围子参数说明和附加参数
hostnameNone

指定要部署 Harbor 的目标主机的 IP 地址或完全限定域名 (FQDN)。

这是您访问 Harbor Portal 和注册服务的地址。例如,192.168.1.10reg.yourdomain.com

注册表中的服务必须是外部客户端访问,因此不指定localhost127.0.0.10.0.0.0作为主机名。

http

不要在生产环境中使用 HTTP。

仅在没有连接到外部 Internet 的气隙测试或开发环境中才可接受使用 HTTP。

在非气隙环境中使用 HTTP 会使您面临中间人攻击。

portHTTP 的端口号,用于 Harbor 门户和 Docker 命令。默认值为 80。
https使用 HTTPS 访问 Harbor Portal 和令牌/通知服务。在生产环境和非气隙环境中始终使用 HTTPS。
portHTTPS 的端口号,用于 Harbor 门户和 Docker 命令。默认值为 443。
certificateSSL 证书的路径。
private_keySSL 密钥的路径。
internal_tls使用 HTTPS 在harbor组件之间进行通信
enabled将此标志设置为true,表示启用内部 tls
dir包含内部证书和密钥的目录的路径
harbor_admin_passwordNone

为 Harbor 系统管理员设置初始密码。该密码仅在Harbor 首次启动时使用。

在后续登录时,将忽略此设置,并在 Harbor Portal 中设置管理员密码。

默认用户名和密码是adminHarbor12345

database使用本地 PostgreSQL 数据库。您可以选择配置外部数据库,在这种情况下,您可以禁用此选项。
password为本地数据库设置 root 密码。您必须为生产部署更改此密码。
max_idle_conns

空闲连接池中的最大连接数。如果设置为 <=0,则不保留空闲连接。

默认值为 50。如果未配置,则值为 2。

max_open_conns

到数据库的最大打开连接数。如果 <= 0,则打开连接的数量没有限制。

对于到 Harbor 数据库的最大连接数,默认值为 100。如果未配置,则值为 0。

data_volumeNone

目标主机上存储 Harbor 数据的位置。即使删除和/或重新创建 Harbor 的容器,该数据也保持不变。

您可以选择配置外部存储,在这种情况下禁用此选项并启用storage_service. 默认值为/data.

trivy配置 Trivy 扫描仪。
ignore_unfixed将标志设置为true仅显示已修复的漏洞。默认值为false
skip_update

您可能希望在测试或 CI/CD 环境中启用此标志以避免 GitHub 速率限制问题。

如果启用该标志,您必须手动下载trivy-offline.tar.gz存档,解压缩trivy.dbmetadata.json文件,

并将它们安装/home/scanner/.cache/trivy/db/trivy.db在容器中的路径中。默认值为false

insecure将标志设置true为跳过验证注册证书。默认值为false
github_token

设置 GitHub 访问令牌,以下载 Trivy DB。Trivy DB 由 Trivy 从 GitHub 发布页面下载。

来自 GitHub 的匿名下载受到每小时 60 个请求的限制。

通常这样的速率限制对于生产操作来说已经足够了。

如果出于任何原因这还不够,您可以通过指定 GitHub 访问令牌将速率限制增加到每小时 5000 个请求。

有关 GitHub 速率限制的更多详细信息,请参阅 https://developer.github.com/v3/#rate-limiting 。

您可以按照 https://help.github.com/en/github 中的说明创建

GitHub 令牌/authenticating-to-github/creating-a-personal-access-token-for-the-command-line

jobservicemax_job_workers

作业服务中复制工作者的最大数量。对于每个镜像复制作业,

工作者将存储库的所有标签同步到远程目标。

增加这个数字允许系统中更多的并发复制作业。

但是由于每个worker都会消耗一定的网络/CPU/IO资源,

所以根据主机的硬件资源来设置这个属性的值。默认值为 10。

notificationwebhook_job_max_retry设置 web hook 作业的最大重试次数。默认值为 10。
chartabsolute_url设置enabled为 Chart 以使用绝对 URL。设置disabled为 Chart 以使用相对 URL。
log配置日志记录。Harbor 使用 `rsyslog` 来收集每个容器的日志。
level设置日志级别debuginfowarningerror,或fatal。默认值为info.
local设置日志保留参数:
  • rotate_count: 日志文件rotate_count在被删除之前轮换了几次。
    如果计数为 0,则删除旧版本而不是轮换。默认值为 50。
  • rotate_size:日志文件仅在其增长大于rotate_size字节时才会轮换。
    使用k千字节,M兆字节和G千兆字节。 100100k100M100G都是有效的值。
    ​​​​​​​默认为 200M。
  • location: 设置存放日志的目录。默认值为/var/log/harbor.
external_endpoint启用此选项可将日志转发到系统日志服务器。
  • protocol:系统日志服务器的传输协议。默认为 TCP。
  • host:系统日志服务器的 URL。
  • port: syslog 服务器监听的端口
proxy

配置要由 trivy-adapter、复制作业服务和 Harbor 使用的代理。如果不需要代理,请留空。

部分代理有白名单设置,如果开启了Trivy,需要在代理服务器白名单中添加如下url:github.comgithub-releases.githubusercontent.com, 和*.s3.amazonaws.com.

http_proxy配置 HTTP 代理,例如 http://my.proxy.com:3128.
https_proxy配置 HTTPS 代理,例如 http://my.proxy.com:3128.
no_proxy配置何时不使用代理,例如127.0.0.1,localhost,core,registry.

可选参数

下表列出了额外的可选参数,您可以设置这些参数以配置超出最低要求设置的 Harbor 部署。要启用设置,您必须harbor.yml通过删除前导#字符来取消对它的注释。

Harbor 的可选参数
范围子参数说明和附加参数
external_urlNone启用此选项以使用外部代理。启用后,不再使用主机名。
storage_service

默认情况下,Harbor 将图像和图表存储在您的本地文件系统上。

在生产环境中,您可能希望使用另一个存储后端而不是本地文件系统。

下面列出的参数是注册表的配置。

有关如何配置不同后端的更多信息,请参阅下面的 *配置存储后端*。

ca_bundle

自定义根 CA 证书的路径,该证书被注入到注册表和图表存储库容器的信任库中。

如果内部存储使用自签名证书,则通常需要这样做。

filesystem

默认值是filesystem,但你可以设置azuregcss3swiftoss

有关如何配置其他后端的信息,请参阅下面的配置存储后端

设置maxthreads以限制外部提供程序的线程数。默认值为 100。

redirect当您要禁用注册表重定向时设置disabletrue
external_database

如果禁用本地数据库选项,则配置外部数据库设置。

目前,Harbor 仅支持 PostgreSQL 数据库。

您必须为 Harbor 核心、Notary 服务器和 Notary 签名者创建三个数据库。

这些表是在 Harbor 启动时自动生成的。

harbor

为 Harbor 数据配置外部数据库。

  • host:Harbor 数据库的主机名。
  • port: 数据库端口。
  • db_name: 数据库名称。
  • username: 连接核心Harbor数据库的用户名。
  • password:您在 中设置的帐户的密码username
  • ssl_mode:启用 SSL 模式。
  • max_idle_conns:空闲连接池中的最大连接数。
    如果 <=0,则不保留空闲连接。默认值为 2。
  • max_open_conns: 到数据库的最大打开连接数。
    如果 <= 0,则打开连接的数量没有限制。默认值为 0。
notary_signer为 Notary 签名者数据库配置外部数据库
  • host:公证人签名者数据库的主机名
  • port: 数据库端口。
  • db_name: 数据库名称。
  • username: 用于连接到 Notary 签名者数据库的用户名。
  • password:您在 中设置的帐户的密码username
  • ssl_mode:启用 SSL 模式。
notary_server
  • host:公证服务器数据库的主机名。
  • port: 数据库端口。
  • db_name: 数据库名称。
  • username:连接到公证服务器数据库的用户名。
  • password:您在 中设置的帐户的密码username
  • ssl_mode: 启用 SSL 模式.e
external_redis配置外部 Redis 实例。
hostredis_host:外部Redis实例的redis_port。如果使用哨兵模式,这部分应该是host_sentinel1:port_sentinel1,host_sentinel2:port_sentinel2
sentinel_master_set仅在使用 Sentinel 模式时设置此项
password连接到外部 Redis 实例的密码。
registry_db_indexHarbor 注册表的数据库索引。
jobservice_db_index作业服务的数据库索引。
chartmuseum_db_index图表博物馆的数据库索引。
trivy_db_indexTrivy 适配器的数据库索引。
metric配置将 Harbor 实例指标暴露给指定的端口和路径
enabled通过将其设置为 ,在您的 Harbor 实例上启用公开指标true。默认是false
port端口指标公开。默认是9090
path路径度量公开。默认是/metrics
harbor.yml文件包括配置 UAA CA 证书的选项。不推荐且未记录此身份验证模式。

配置存储后端

默认情况下,Harbor 为注册表使用本地存储,但您可以选择配置storage_service设置,以便 Harbor 使用外部存储。有关如何为不同的存储提供程序配置注册表的存储后端的信息,请参阅Docker 文档中的 注册表配置参考。例如,如果您使用 Openstack Swift 作为存储后端,则参数可能类似于以下内容:

storage_service:
  ca_bundle:
  swift:
    username: admin
    password: ADMIN_PASS
    authurl: http://keystone_addr:35357/v3/auth
    tenant: admin
    domain: default
    region: regionOne
    container: docker_images"
  redirect:
    disable: false

运行安装程序脚本

一旦您配置了harbor.ymlharbor.yml.tmpl复制而来,并可选择设置存储后端,您就可以使用install.sh脚本安装和启动 Harbor 。请注意,在线安装程序可能需要一些时间才能从 Docker 中心下载所有 Harbor 映像。

您可以在不同的配置中安装 Harbor:

  • 只有Harbor,没有 Notary、Trivy 或 Chart Repository 服务
  • 带有Notary的Harbor
  • 带有Trivy的Harbor
  • 带有Chart Repository服务的 Harbor
  • Harbor 包含 Notary、Trivy 和 Chart Repository Service 中的两个或全部三个

没有 Notary、Trivy 或 Chart Repository Service 的默认安装

默认的 Harbor 安装不包括 Notary 或 Trivy 服务。运行以下命令

sudo ./install.sh

如果安装成功,您可以打开浏览器访问Harbor界面http://reg.yourdomain.com,更改reg.yourdomain.com为您在harbor.yml中配置的主机名。如果您没有在harbor.yml中更改它们,则默认管理员用户名和密码是adminHarbor12345

登录管理门户并创建一个新项目,例如myproject. 然后,您可以使用 Docker 命令登录到 Harbor,标记图像并将它们推送到 Harbor。

docker login reg.yourdomain.com
docker push reg.yourdomain.com/myproject/myrepo:mytag
  • 如果您安装的 Harbor 使用 HTTPS,则必须向 Docker 客户端提供 Harbor 证书。有关信息,请参阅配置对 Harbor 的 HTTPS 访问
  • 如果您安装的 Harbor 使用 HTTP,则必须将该选项添加--insecure-registry到客户端的 Docker 守护程序并重新启动 Docker 服务。有关更多信息,请参阅下面的通过 HTTP 连接到 Harbor

安装Harbor启用Notary

要使用 Notary 服务安装 Harbor,请在运行install.sh时添加参数--with-notary

sudo ./install.sh --with-notary
要使用 Notary,您必须将 Harbor 配置为使用 HTTPS。

有关 Notary 和 Docker 内容信任的更多信息,请参阅 Docker 文档中的内容信任

安装Harbor启用Trivy

要使用 Trivy 服务安装 Harbor,请在运行install.sh时添加参数--with-trivy

sudo ./install.sh --with-trivy

有关 Trivy 的更多信息,请参阅 Trivy 文档

安装Harbor启用 Chart Repository Service 

要使用图表存储库服务安装 Harbor,请在运行install.sh时添加参数--with-chartmuseum

sudo ./install.sh --with-chartmuseum

安装Harbor启用 Notary、Trivy 和 Chart Repository 服务

如果要同时安装 Notary 和图表存储库服务,请在同一命令中指定所有参数:

sudo ./install.sh --with-notary --with-trivy --with-chartmuseum

通过 HTTP 连接到 Harbor

重要提示:如果您安装的 Harbor 使用 HTTP 而不是 HTTPS,您必须将该选项添加--insecure-registry到您客户端的 Docker 守护进程中。默认情况下,守护程序文件位于/etc/docker/daemon.json.

例如,将以下内容添加到您的daemon.json文件中:

{
        "--insecure-registry​​​​​​​​​​​​​​​​​​​​​":["myregistrydomain.com:5000","0.0.0.0"]
}

更新后daemon.json,您必须重新启动 Docker Engine 和 Harbor。

  1. 重启 Docker 引擎。

    systemctl restart docker
    
  2. 停止harbor。

    docker-compose down -v
    
  3. 重启harbor。

    docker-compose up -d
    

通过 Helm 部署具有高可用性的 Harbor

您可以通过 helm 在 Kubernetes 上部署 Harbor 以使其高度可用。这样,如果运行 Harbor 的节点之一变得不可用,用户就不会遇到服务中断的情况。

先决条件

  • Kubernetes 集群 1.10+
  • Heml 2.8.0+
  • 高可用入口控制器(Harbor 不管理外部端点)
  • 高可用PostgreSQL 9.6+(Harbor不处理数据库HA的部署)
  • Redis 高可用(Harbor 不处理 Redis 的 HA 部署)
  • 可以跨节点或外部对象存储共享的 PVC

架构

Harbor 的大部分组件现在都是无状态的。所以我们可以简单的增加pod的副本,保证组件分布到多个worker节点,并利用K8S的“Service”机制来保证跨pod的连通性。

在存储层,期望用户提供高可用的PostgreSQL、Redis集群来存储应用数据,以及存储图像和图表的PVC或对象存储。

使用 Helm 实现高可用性

下载图表

下载 Harbor Heml Chart:

helm repo add harbor https://helm.goharbor.io
helm fetch harbor/harbor --untar

配置

values.yaml中配置以下项目,也可以在运行helm install时通过--set参数设置:

  • 入口规则 配置expose.ingress.hosts.coreexpose.ingress.hosts.notary

  • 外部 URL 配置externalURL.

  • 外部 PostgreSQL 设置database.typeexternal并填写database.external部分中的信息。

    应为 手动创建三个空数据库Harbor coreNotary serverNotary signer在对应部分配置它们。Harbor 会在启动时自动创建表。

  • 外部 Redis 设置redis.typeexternal并填写redis.external部分中的信息。

    Harbor在 2.1.0 中引入了 redis Sentinel模式支持。您可以通过设置sentinel_master_sethost<host_sentinel1>:<port_sentinel1>,<host_sentinel2>:<port_sentinel2>,<host_sentinel3>:<port_sentinel3>来启用此功能。

    您还可以参考本 指南在 Redis 之前设置 HAProxy 以公开单个入口点。

  • 存储 默认情况下,K8S 集群中需要一个StorageClass默认值来配置卷,以存储图像、图表和作业日志。

    如果要指定StorageClass,设置persistence.persistentVolumeClaim.registry.storageClasspersistence.persistentVolumeClaim.chartmuseum.storageClasspersistence.persistentVolumeClaim.jobservice.storageClass

    如果您使用的StorageClass,对于都是默认或指定一个,把persistence.persistentVolumeClaim.registry.accessModepersistence.persistentVolumeClaim.chartmuseum.accessModepersistence.persistentVolumeClaim.jobservice.accessMode作为ReadWriteMany,并确保持久卷必须可以跨不同的节点共享。

    您也可以使用现有的PVC来存储数据,设置persistence.persistentVolumeClaim.registry.existingClaimpersistence.persistentVolumeClaim.chartmuseum.existingClaimpersistence.persistentVolumeClaim.jobservice.existingClaim

    如果您没有可以跨节点共享的 PVC,您可以使用外部对象存储来存储图像和图表,并将作业日志存储在数据库中。将persistence.imageChartStorage.type设置为您要使用的值,并填充相应部分并设置jobservice.jobLoggerdatabase

  • 副本 集 设置portal.replicascore.replicasjobservice.replicasregistry.replicaschartmuseum.replicasnotary.server.replicasnotary.signer.replicasnn> = 2)。

安装

使用发行版名称安装 Harbor helm chart my-release

helm 2:

helm install --name my-release .

helm 3:

helm install my-release .

 Harbor 安装故障排除

以下部分帮助您解决安装 Harbor 时遇到的问题。

访问harbor日志

默认情况下,注册数据保存在主机/data/目录中。即使删除和/或重新创建 Harbor 的容器,此数据也保持不变,您可以编辑harbor.yml文件中的data_volume以更改此目录。

此外,Harbor 使用rsyslog收集每个容器的日志。默认情况下,这些日志文件存储在目标主机上用于故障排除的/var/log/harbor/目录中,您也可以更改harbor.yml.

Harbor 无法启动或运行不正确

如果 Harbor 没有启动或运行不正常,请运行以下命令检查 Harbor 的所有容器是否都处于该Up状态。

sudo docker-compose ps
        Name                     Command               State                    Ports
  -----------------------------------------------------------------------------------------------------------------------------
  harbor-core         /harbor/start.sh                 Up
  harbor-db           /entrypoint.sh postgres          Up      5432/tcp
  harbor-jobservice   /harbor/start.sh                 Up
  harbor-log          /bin/sh -c /usr/local/bin/ ...   Up      127.0.0.1:1514->10514/tcp
  harbor-portal       nginx -g daemon off;             Up      80/tcp
  nginx               nginx -g daemon off;             Up      0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp, 0.0.0.0:80->80/tcp
  redis               docker-entrypoint.sh redis ...   Up      6379/tcp
  registry            /entrypoint.sh /etc/regist ...   Up      5000/tcp
  registryctl         /harbor/start.sh                 Up

如果容器未处于Up状态,请在 中检查该容器的日志文件/var/log/harbor。例如,如果harbor-core容器未运行,请查看core.log日志文件。

使用nginx或负载均衡

如果 Harbor 在nginx代理或弹性负载均衡之后运行,请打开文件common/config/nginx/nginx.conf并搜索以下行。

proxy_set_header X-Forwarded-Proto $scheme;

如果代理已经有类似的设置,从配置删除location/location /v2/location /service/和重新部署harbor。有关如何重新部署 Harbor 的说明,请参阅 重新配置 Harbor 和管理 Harbor 生命周期

HTTPS 连接疑难解答

如果您使用来自证书颁发者的中间证书,请将中间证书与您自己的证书合并以创建证书包。运行以下命令。

cat intermediate-certificate.pem >> yourdomain.com.crt

当 Docker 守护程序在某些操作系统上运行时,您可能需要在操作系统级别信任证书。例如,运行以下命令。

  • Ubuntu:

    cp yourdomain.com.crt /usr/local/share/ca-certificates/yourdomain.com.crt 
    update-ca-certificates
    
  • Redhat(CentOS 等):

    cp yourdomain.com.crt /etc/pki/ca-trust/source/anchors/yourdomain.com.crt
    update-ca-trust

 重新配置 Harbor 并管理 Harbor 生命周期

您用docker-compose管理 Harbor 的生命周期。本主题提供了一些有用的命令。您必须在所在目录中运行命令docker-compose.yml

有关docker-compose 的更多信息,请参阅 Docker Compose 命令行参考

停止Harbor

要停止 Harbor,请运行以下命令。

sudo docker-compose stop
Stopping nginx              ... done
Stopping harbor-portal      ... done
Stopping harbor-jobservice  ... done
Stopping harbor-core        ... done
Stopping registry           ... done
Stopping redis              ... done
Stopping registryctl        ... done
Stopping harbor-db          ... done
Stopping harbor-log         ... done

重启Harbor

要重新启动 Harbor,请运行以下命令。

sudo docker-compose start
Starting log         ... done
Starting registry    ... done
Starting registryctl ... done
Starting postgresql  ... done
Starting core        ... done
Starting portal      ... done
Starting redis       ... done
Starting jobservice  ... done
Starting proxy       ... done

重新配置Harbor

要重新配置 Harbor,请执行以下步骤。

  1. 停止港口。

    sudo docker-compose down -v
    
  2. 更新harbor.yml

    vim harbor.yml
    
  3. 运行prepare脚本以填充配置。

    sudo prepare
    

    要重新配置 Harbor 以安装 Notary、Trivy 和图表存储库服务,请在prepare命令中包含所有组件。

    sudo prepare --with-notary --with-trivy --with-chartmuseum
    
  4. 重新创建并启动 Harbor 实例。

    sudo docker-compose up -d
    

其他命令

删除 Harbor 的容器,但将所有图像数据和 Harbor 的数据库文件保留在文件系统中:

sudo docker-compose down -v

在执行干净的重新安装之前删除 Harbor 数据库和图像数据:

rm -r /data/database
rm -r /data/registry
rm -r /data/redis

 自定义 Harbor 令牌服务

默认情况下,Harbor 使用自己的私钥和证书向 Docker 客户端进行身份验证。本主题介绍如何选择性地自定义您的配置以使用您自己的密钥和证书。

Harbor 要求 Docker 客户端使用令牌访问 Harbor registry ​​​​​​​。生成令牌的过程类似于 Docker Registry v2 身份验证。首先,您向令牌服务请求令牌。令牌由私钥签名。之后,您使用令牌向 Harbor registry ​​​​​​​发出新请求,Harbor registry ​​​​​​​使用根证书包中的公钥验证令牌。然后 Harbor 注册中心授权 Docker 客户端推送和拉取镜像。

生成根证书

  1. 生成私钥。

    openssl genrsa -out private_key.pem 4096    
    
  2. 生成证书。

    openssl req -new -x509 -key private_key.pem -out root.crt -days 3650
    
  3. 输入要包含在您的证书请求中的信息。

    您将要输入的是所谓的专有名称或 DN。有很多字段,但您可以将其中一些留空。对于某些字段,有一个默认值。如果您输入.,则该字段留空。

    • 国家名称(2 个字母代码)[AU]:
    • 州或省名称(全名)[Some-State]:
    • 地点名称(例如,城市)[]:
    • 组织名称(例如,公司)[Internet Widgits Pty Ltd]:
    • 组织单位名称(例如,部分)[]:
    • 通用名称(例如,服务器 FQDN 或您的姓名)[]:
    • 电子邮件地址 []:

    运行这些命令后,将在当前目录中创建文件private_key.pemroot.crt

向harbor提供证书

请参阅 运行安装程序脚本或 重新配置 Harbor 和管理 Harbor 生命周期以安装或重新配置 Harbor。运行./install或 后./prepare,Harbor 会生成几个配置文件。您需要用自己的密钥和证书替换原来的私钥和证书。

  1. 替换默认密钥和证书。

    假设密钥和证书在 中/root/cert,运行以下命令:

    cd config/ui
    cp /root/cert/private_key.pem private_key.pem
    cp /root/cert/root.crt ../registry/root.crt
    
  2. 返回make目录,使用以下命令启动Harbor:

    docker-compose up -d
    
  3. 从 Harbor 推送和拉取镜像以检查您自己的证书是否有效。

配置 Harbor 用户设置

用户设置与系统设置分开 配置。您可以在 Harbor 界面中、通过 HTTP 请求或使用环境变量更改用户设置。此页面描述了可用的用户设置,以及如何使用命令行或环境变量来更新用户设置。

有关通过 Harbor 界面更新用户设置的更多信息,请参阅 管理用户部分。

命令行的示例配置命令

在本地数据库中添加一个新用户:

curl -X PUT -u "<username>:<password>" -H "Content-Type: application/json" -ki <Harbor Server URL>/api/v2.0/configurations -d'{"<item_name>":"<item_value>"}'

获取当前配置:

curl -u "<username>:<password>" -H "Content-Type: application/json" -ki <Harbor Server URL>/api/v2.0/configurations

更新 Harbor 以使用 LDAP 身份验证:

命令

curl -X PUT -u "<username>:<password>" -H "Content-Type: application/json" -ki https://harbor.sample.domain/api/v2.0/configurations -d'{"auth_mode":"ldap_auth"}'

输出

HTTP/1.1 200 OK
Server: nginx
Date: Wed, 08 May 2019 08:22:02 GMT
Content-Type: text/plain; charset=utf-8
Content-Length: 0
Connection: keep-alive
Set-Cookie: sid=a5803a1265e2b095cf65ce1d8bbd79b1; Path=/; HttpOnly

将项目创建限制为 Harbor 管理员:

命令

curl -X PUT -u "<username>:<password>" -H "Content-Type: application/json" -ki https://harbor.sample.domain/api/v2.0/configurations -d'{"project_creation_restriction":"adminonly"}'

输出

HTTP/1.1 200 OK
Server: nginx
Date: Wed, 08 May 2019 08:24:32 GMT
Content-Type: text/plain; charset=utf-8
Content-Length: 0
Connection: keep-alive
Set-Cookie: sid=b7925eaf7af53bdefb13bdcae201a14a; Path=/; HttpOnly

更新令牌过期时间:

命令

curl -X PUT -u "<username>:<password>" -H "Content-Type: application/json" -ki https://harbor.sample.domain/api/v2.0/configurations -d'{"token_expiration":"300"}'

输出

HTTP/1.1 200 OK
Server: nginx
Date: Wed, 08 May 2019 08:23:38 GMT
Content-Type: text/plain; charset=utf-8
Content-Length: 0
Connection: keep-alive
Set-Cookie: sid=cc1bc93ffa2675253fc62b4bf3d9de0e; Path=/; HttpOnly

使用环境变量配置用户设置

2.3.0 中引入了在CONFIG_OVERWRITE_JSON核心容器中使用环境变量来配置用户设置的功能。一旦CONFIG_OVERWRITE_JSON变量设置,您只能更新或更新删除的设置CONFIG_OVERWRITE_JSON并重新启动容器。您将无法在 Harbor 界面或命令行中更新用户设置。

示例 CONFIG_OVERWRITE_JSON 配置:

CONFIG_OVERWRITE_JSON={"ldap_verify_cert":"false", "auth_mode":"ldap_auth","ldap_base_dn":"dc=example,dc=com", "ldap_search_dn":"cn=admin,dc=example,dc=com","ldap_search_password":"admin","ldap_url”:”myldap.example.com", "ldap_scope":2}

有关 的可用输入的更多信息,请参阅下面的 用户设置CONFIG_OVERWRITE_JSON

如果您的 Harbor 实例中存在旧用户,则环境变量无法更改身份验证模式CONFIG_OVERWRITE_JSON

Harbor用户设置

配置项目名称描述类型必需的默认值
auth_mode认证方式,可以是db_auth, ldap_auth, uaa_auth or oidc_authstring
email_from电子邮件来自string需要(电子邮件功能)
email_host电子邮件服务器string需要(电子邮件功能)
email_identity电子邮件身份string可选(电子邮件功能)
email_password邮箱密码string需要(电子邮件功能)
email_insecure电子邮件验证证书,真假boolean可选(电子邮件功能)false
email_port邮件服务器端口number需要(电子邮件功能)
email_ssl电子邮件 SSLboolean可选的false
email_username电子邮件用户名string需要(电子邮件功能)
ldap_urlLDAP 网址string必需的
ldap_base_dnLDAP 基本 DNstring需要(ldap_auth)
ldap_filterLDAP 过滤器string可选的
ldap_scopeLDAP 搜索范围,0-基本级别,1-一级,2-子树number可选的2-sub tree
ldap_search_dn用于搜索 LDAP 用户的 LDAP DNstring需要(ldap_auth)
ldap_search_passwordLDAP DN 的密码string需要(ldap_auth)
ldap_timeoutLDAP 连接超时number可选的5
ldap_uidLDAP 属性指示 Harbor 中的用户名string可选的cn
ldap_verify_cert在与 LDAP 服务器创建 SSL 连接时验证证书,true 或 falseboolean可选的true
ldap_group_admin_dnLDAP 组管理员 DNstring可选的
ldap_group_attribute_nameLDAP Group Attribute,LDAP属性表示Harbor中的组名,可以是gid或cnstring可选的cn
ldap_group_base_dn用于搜索 LDAP 组的基本 DNstring需要(ldap_auth 和 LDAP 组)
ldap_group_search_filter搜索 LDAP 组的过滤器string可选的
ldap_group_search_scopeLDAP 组搜索范围,0-Base Level,1-一级,2-Sub Treenumber可选的2-sub tree
ldap_group_membership_attributeLDAP组成员属性,表示组成员身份,可以是memberof,也可以是ismemberofstring可选的memberof
project_creation_restriction表示用户可以是create object的选项,可以是everyone,adminonlystring可选的everyone
read_only设置存储库只读的选项,它可以是真或假boolean可选的false
self_registration用户可在Harbor注册账号,可真可假boolean可选的true
token_expiration安全令牌到期时间(以分钟为单位)number可选的30
uaa_client_idUAA 客户端 IDstring需要(uaa_auth)
uaa_client_secretUAA证书string需要(uaa_auth)
uaa_endpointUAA端点string需要(uaa_auth)
uaa_verify_certUAA 验证证书,真假boolean可选的true
oidc_nameOIDC 身份验证名称string需要(oidc_auth)
oidc_endpointOIDC 身份验证的端点string需要(oidc_auth)
oidc_client_idOIDC 身份验证的客户端 IDstring需要(oidc_auth)
oidc_client_secretOIDC 身份验证的客户端密码string需要(oidc_auth)
oidc_scope用于 OIDC 身份验证的 Ccopestring需要(oidc_auth)
oidc_verify_cert验证 OIDC 身份验证的证书,是对还是错boolean可选的true
robots_token_duration机器人令牌过期时间(以分钟为单位)number可选的43200(30天)
布尔值和数字都可以在请求 json 中用双引号括起来,例如:123"123""true"or trueis OK。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值