harbor安装
1.安装先决条件
1.1 系统环境说明
硬件
资源 | 最低 | 推荐 |
---|---|---|
cpu | 2c | 4c |
内存 | 4GB | 8GB |
硬盘 | 40GB | 160GB |
软件
软件 | 版本 | 描述 |
---|---|---|
docker | 17.06.0-ce+ | 有关安装说明,请参阅 Docker 引擎文档 |
docker-compose | docker-compose (v1.18.0+) 或 docker-compose v2 (docker-compose-plugin) | 有关安装说明,请参阅 Docker Compose 文档 |
Openssl | 最新版优先 | 用于为Harbor生成证书和密钥 |
网络端口
端口 | 协议 | 描述 |
---|---|---|
443 | HTTPS | Harbor 门户和核心 API 在此端口上接受 HTTPS 请求。您可以在配置文件中更改此端口。 |
4443 | HTTPS | 连接到 Harbor 的 Docker Content Trust 服务。只有在启用 Notary 时才需要。您可以在配置文件中更改此端口。 |
80 | HTTP | Harbor 门户和核心 API 在此端口上接受 HTTP 请求。您可以在配置文件中更改此端口。 |
1.2 安装docker
# 阿里云yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce
systemctl start docker && systemctl enable docker
# 配置阿里云镜像加速地址
cat > /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://gqk8w9va.mirror.aliyuncs.com"]
}
EOF
# 配置完成后重启docker
systemctl restart docker
1.3 安装docker-compose
export DOCKER_COMPOSE_VERSION=2.17.3
curl -L "https://github.com/docker/compose/releases/download/v${DOCKER_COMPOSE_VERSIO}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose
2.下载安装包
harbor有2种安装方式
- 在线安装程序 :在线安装程序从 Docker hub 下载Harbor镜像,因此安装程序的体积非常小。安装包名称
harbor-online-installer-v{version}.tgz
- 离线安装程序 :如果要部署 Harbor 的主机没有连接到 Internet,请使用离线安装程序。离线安装程序包含预构建的图像,因此它比在线安装程序大。安装包名称
harbor-offline-installer-v{version}.tgz
2.1 创建目录
[ -d /data ] || mkdir /data && cd /data
2.2 下载安装包
# 下载安装包
wget https://github.com/goharbor/harbor/releases/download/v2.8.0/harbor-online-installer-v2.8.0.tgz
2.3 验证包(可选)
可下载相应 *.asc
文件以验证包是否为正版
wget https://github.com/goharbor/harbor/releases/download/v2.8.0/harbor-offline-installer-v2.8.0.tgz.asc
2.4 解压缩安装包
tar xf harbor-online-installer-v2.8.0.tgz && cd harbor
3.配置对harbor的https访问
3.1 生成证书颁发机构证书
3.1.1 创建证书存放目录
# 当前目录为 /data/harbor/cert
mkdir cert && cd cert
3.1.2 生成ca证书私钥
# 会生成 ca.key
$ openssl genrsa -out ca.key 4096
Generating RSA private key, 4096 bit long modulus
......................................................................................................................................++
..........................................................++
e is 65537 (0x10001)
3.1.3 生成ca证书
# 会生成 ca.crt
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Beijing/L=Beijing/O=ops/OU=ops/CN=harbor.ops.com" \
-key ca.key \
-out ca.crt
3.2 生成服务器证书
3.2.1 生成私钥
# 会生成 harbor.ops.com.key
openssl genrsa -out harbor.ops.com.key 4096
3.2.2 生成证书签名请求 (CSR)
调整选项中的值 -subj
以反映您的组织。如果使用 FQDN 连接 Harbor 主机,则必须将其指定为通用名称 ( CN
) 属性,并在密钥和 CSR 文件名中使用它。
# 会生成 harbor.ops.com.csr
openssl req -sha512 -new \
-subj "/C=CN/ST=Beijing/L=Beijing/O=ops/OU=ops/CN=harbor.ops.com" \
-key harbor.ops.com.key \
-out harbor.ops.com.csr
3.2.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=harbor.ops.com
DNS.2=harbor.ops
DNS.3=harbor
EOF
3.2.4 使用 v3.ext
文件生成证书
# 会生成 ca.srl 和 harbor.ops.com.crt
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in harbor.ops.com.csr \
-out harbor.ops.com.crt
3.3 向harbor和docker提供证书
生成 ca.crt
、 yourdomain.com.crt
和 yourdomain.com.key
文件后,必须将它们提供给 Harbor 和 Docker,并重新配置 Harbor 以使用它们。
3.3.1 转换 .crt
为 .cert
Docker 守护进程将 .crt
文件解释为 CA 证书,.cert
将文件解释为客户端证书。
# 转换证书文件
openssl x509 -inform PEM -in harbor.ops.com.crt -out harbor.ops.com.cert
3.3.3 将服务器证书、密钥和 CA 文件复制到 Harbor 主机上的 Docker 证书文件夹中
如果您将默认的nginx端口443映射到其他端口,请创建 /etc/docker/certs.d/yourdomain.com:por
t或 /etc/docker/certs.d/harbor_IP:port
文件夹。
# 创建目录
[ -d /etc/docker/certs.d/harbor.ops.com ] || mkdir -p /etc/docker/certs.d/harbor.ops.com
# 拷贝证书文件
cp harbor.ops.com.cert /etc/docker/certs.d/harbor.ops.com/
cp harbor.ops.com.key /etc/docker/certs.d/harbor.ops.com/
cp ca.crt /etc/docker/certs.d/harbor.ops.com/
3.3.4 重启docker
systemctl restart docker
4.部署harbor
4.1 配置harbor yml文件
harbor在线安 装包解压后会有一个 harbor.yml.tmpl
示例配置文件
将此文件重命名为 harbor.yml
来设置系统级参数。 这些参数在运行 install.sh
脚本以安装或重新配置 Harbor 时生效。
在初始部署和启动 Harbor 之后,可以在 Harbor Web Portal 中执行其他配置。
4.1.1 参数说明
4.1.1.1 必要参数
-
hostname
: 指定要部署 Harbor 的目标主机的 IP 地址或完全限定域名 (FQDN)。这是您访问 Harbor Portal 和注册服务的地址。例如,192.168.1.10
或reg.yourdomain.com
。注册表服务必须可供外部客户端访问,因此不要将localhost
、127.0.0.1
或指定0.0.0.0
为主机名。 -
http
: 不要在生产环境中使用http,只有在没有连接到外部互联网的测试或开发环境才可以使用http。port
: 用于 Harbor 门户和 Docker 命令的 HTTP 端口号。默认值为 80。
-
https
: 使用 HTTPS 访问 Harbor Portal 和令牌/通知服务。-
port
: 用于 Harbor 门户和 Docker 命令的 HTTPS 端口号。默认值为 443。 -
certificate
: SSL 证书的路径。 -
private_key
: SSL 密钥的路径。
-
-
internal_tls
: 使用 HTTPS 在 Harbor 组件之间进行通信enabled
: 将此标志设置为true
表示已启用内部 tlsdir
: 包含内部证书和密钥的目录的路径
-
harbor_admin_password
: 设置Harbor系统管理员的初始密码。此密码仅在 Harbor 首次启动时使用。在随后的登录中,此设置将被忽略,管理员密码将在 Harbor 门户中设置。默认的用户名和密码是admin
和Harbor12345
。 -
database
: 使用本地 PostgreSQL 数据库。您可以选择配置外部数据库,在这种情况下您可以停用此选项。password
: 设置本地数据库的root密码。max_idle_conns
: 空闲连接池中的最大连接数。如果它<=0
,则不保留空闲连接。max_open_conns
: 到数据库的最大打开连接数。如果<= 0
,则打开的连接数没有限制。conn_max_lifetime
: 可以重用连接的最长时间。如果它<= 0
,则连接不会由于连接的年龄而关闭。conn_max_idle_time
: 连接空闲的最长时间。如果它<= 0
,则连接不会由于连接的空闲时间而关闭。
-
data_volume
: 目标主机上存储 Harbor 数据的位置。即使删除 和/或 重新创建 Harbor 的容器,此数据也保持不变。您可以选择配置外部存储,在这种情况下停用此选项并启用storage_service
。默认值为/data
。 -
trivy
: 配置 Trivy 扫描仪。ignore_unfixed
: 将标志设置为true
仅显示已修复的漏洞。默认值为false
security_check
: 要检测的安全问题的逗号分隔列表。可能的值为vuln
,config
和secret
。默认为vuln
.skip_update
: 您可能希望 在测试或 CI/CD 环境中启用此标志以避免 GitHub 速率限制问题。如果启用该标志,您必须trivy-offline.tar.gz
手动下载存档,提取和trivy.db
文件metadata.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
-
jobservice
max_job_workers
: 作业服务中复制工作者的最大数量。对于每个图像复制作业,工作人员将存储库的所有标签同步到远程目标。增加这个数字允许系统中有更多的并发复制作业。但是,由于每个worker都会消耗一定的网络/CPU/IO资源,所以根据宿主机的硬件资源来设置该属性的值。默认值为 10。
-
notification
webhook_job_max_retry
: 设置 Web 挂钩作业的最大重试次数。默认值为 10。
-
log
: 配置日志记录。Harbor 使用 rsyslog 来收集每个容器的日志。level
: 将日志记录级别设置为debug
、info
、warning
、error
或fatal
。默认值为info
。local
: 设置日志保留参数rotate_count``rotate_count
: 日志文件在被删除之前会轮换几次。如果计数为 0,旧版本将被删除而不是轮换。默认值为 50。rotate_size
: 日志文件只有在大于rotate_size
字节时才会轮换。用于k
千字节、M
兆字节和G
千兆字节。100
、100k
和100M
都是100G
有效值。默认为 200M。location
: 设置日志存放目录。默认值为/var/log/harbor
。
external_endpoint
: 启用此选项可将日志转发到系统日志服务器。protocol
: 系统日志服务器的传输协议。默认为 TCP。host
: 系统日志服务器的 URL。port
: syslog服务器监听的端口
-
proxy
: 配置由 trivy-adapter、复制作业服务和 Harbor 使用的代理。如果不需要代理,请留空。有些代理有白名单设置,如果启用了Trivy,你需要将以下url添加到代理服务器白名单中:github.com
,github-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
-
cache
: 为您的 Harbor 实例配置缓存层。启用后,Harbor 将使用 Redis 缓存一些 Harbor 资源(例如,工件、项目或项目元数据),从而减少重复请求同一 Harbor 资源所花费的时间和资源。强烈建议您在高并发拉取请求率的 Harbor 实例上启用此功能,以提高 Harbor 的整体性能。有关缓存层实现和性能改进的更多详细信息,请参阅缓存层维基页面。enabled
: 默认为false
,设置为true
启用 Harbor 的缓存层。expire_hours
: 以小时为单位配置缓存过期限制。默认值为 24。
4.1.1.2 可选参数
-
external_url
: 启用此选项以使用外部代理。启用后,不再使用主机名。 -
storage_service
: 默认情况下,Harbor 将图像和图表存储在本地文件系统中。在生产环境中,您可能希望使用另一个存储后端而不是本地文件系统。下面列出的参数是注册表的配置。有关如何配置不同后端的更多信息,请参阅下面 配置存储后端ca_bundle
:自定义根 CA 证书的路径,该证书被注入到注册表和图表存储库容器的信任库中。如果内部存储使用自签名证书,通常需要这样做。
filesystem
: 默认是filesystem
,但是你可以设置azure
、gcs
、s3
、swift
和oss
。有关如何配置其他后端的信息,请参阅下面的 配置存储后端 。设置 maxthreads 以限制外部提供程序的线程数。 默认值为 100redirect
: 设置deactivate
为true
表示停用注册表重定向
-
external_database
: 如果停用本地数据库选项,则配置外部数据库设置。目前,Harbor 仅支持 PostgreSQL 数据库。必须创建Harbor core
,Notary server
, 和Notary signer
3个数据库,表是在harobr启动的时候自动生成的。harbor
: 为 Harbor 数据配置外部数据库。host
: Harbor 数据库的主机名。port
:数据库端口。db_name
: 数据库名称。username
: 数据库用户名。password
:数据库密码。ssl_mode
:启用 SSL 模式。max_idle_conns
:空闲连接池中的最大连接数。如果<=0
,则不保留空闲连接。默认值为 2。max_open_conns
: 数据库的最大打开连接数。如果<= 0
,则打开的连接数没有限制。默认值为 0。
notary_signer
: 为 Notary 签名者数据库配置外部数据库host
:公证签名者数据库的主机名port
:数据库端口。db_name
: 数据库名称。username
:连接到公证签名者数据库的用户名。password
:连接到公证签名者数据库的用户的密码。ssl_mode
:启用 SSL 模式。
notary_server
:host
:公证服务器数据库的主机名。port