Centos 7 安装Harbor

环境

Linux PXC03 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

硬件配置

资源 最低 推荐
CPU 2 CPU 4 CPU
内存 4 GB 8 GB
磁盘 40 160 GB

软件基础

软件 版本 描述
Docker引擎 > 20.10 Docker 引擎安装
Docker Compose > 2.3 Docker Compose 是 Docker 引擎的一部分
OpenSSL 最新 (可选) 用于为 Harbor 生成证书和密钥

Tips:
需要docker 和 docker compose 的原因:

Harbor 本身并不是一个直接安装在操作系统上的独立软件,而是一套由多个 Docker 容器组成的复杂应用系统
在 Harbor 的架构中,每一个核心组件都被打包成一个独立的 Docker 容器。这意味着当你安装 Harbor 时,实际上是在你的服务器上启动一系列相互协作的 Docker 容器。
通过命令(如 docker-compose up -d)来一键启动、停止或重启整个 Harbor 集群,极大地简化了部署和运维的复杂度。

安装

有了以上基础后,进入安装流程

一种在线安装,一种离线安装

安装包地址:https://github.com/goharbor/harbor/releases

下载好之后,直接解压后,得到如图文件

tar xzvf harbor-offline-installer-version.tgz

file

其中 install.sh是安装脚本,prepare 是在修改配置后,重新生成配置的脚本
安装时可选择是否要安装 Trivy ,默认是不安装

./install.sh # 不安装Trivy
./install.sh --with-trivy # 安装Trivy

Tips:
在更新了 /etc/docker/daemon.json 时,必需重启 Docker Engine 和 Harbor,命令如下:

systemctl restart docker # 重启Docker Engine
docker-compose down -v # Harbor 停止并删除
docker-compose up -d # Harbor 启动

配置Harbor

harbor.yml.tmpl 文件为提供的配置文件模板
关于高可用的 Harbor 配置,参考:https://goharbor.cn/docs/2.13.0/install-config/harbor-ha-helm/

配置Https访问

配置访问地址:hostname

配置http 或https 信息
证书要先生成,并把放证书的目录配置到此图中
file

配置管理员密码[harbor_admin_password],账号为: admin

生成SSL自签证书

生成证书颁发机构证书

生成 CA 证书私钥

openssl genrsa -out ca.key 4096

生成 CA 证书

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

生成服务器证书

生成私钥。

openssl genrsa -out harbor.rojers.com.key 4096

生成证书签名请求 (CSR)。

openssl req -sha512 -new \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor.rojers.com" \
-key harbor.rojers.com.key \
-out harbor.rojers.com.csr

生成 x509 v3 扩展文件

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.rojers.com
DNS.2=PXC03
EOF

使用 v3.ext 文件为 Harbor 主机生成证书。

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

向 Harbor 和 Docker 提供证书,将服务器证书和密钥复制到 Harbor 主机上的证书文件夹中

cp harbor.rojers.com.crt /data/cert/
cp harbor.rojers.com.key /data/cert/

将 harbor.rojers.com.crt 转换为 harbor.rojers.com.cert,供 Docker 使用。
Docker 守护程序将 .crt 文件解释为 CA 证书,将 .cert 文件解释为客户端证书。

openssl x509 -inform PEM -in harbor.rojers.com.crt -out harbor.rojers.com.cert

将服务器证书、密钥和 CA 文件复制到 Harbor 主机上的 Docker 证书文件夹中
关于win环境信任证书问题,若不是标准的80和443端口来运行harbor,只能配置“insecure-registries” 参数来解决登陆时提示证书错误的问题,原因为:win环境不支持目录名里面有“:”冒号,导致Docker Desktop无法读取到证书

cp harbor.rojers.com.cert /etc/docker/certs.d/harbor.rojers.com:3443/
cp harbor.rojers.com.key /etc/docker/certs.d/harbor.rojers.com:3443/
cp ca.crt /etc/docker/certs.d/harbor.rojers.com:3443/

配置Https访问

配置结果

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

内部组件中的TLS访问

默认是通过 http 的方式进行通信

通过 harbor.yml 文件中的 internal_tls 引入。要启用内部 TLS,请将 enabled 设置为 true,并将 dir 值设置为包含内部证书文件的目录路径。

配置文件解读

harbor配置文件

问题记录:

登陆失败,提示核心服务不可用

file

检查:

docker-compsoe ps -a # 查看所有启动的容器是否都是健康状态(healthy)
# core 服务一直是 starting 状态,没有启动成功,查看日志说是链接不上redis报错
# 重启整个服务,命令如下
docker-compose down -v # 停止服务,并删除容器
docker-compose up -d # 后台启动
docker-compose ps -a # 查看所有容器的状态

关于使用

如下图中的复制,复制出来的地址,为一个拉取镜像地址,带有一个 hash值,不是标签

file

原因

标签(Tag)是会变的:比如 v1.0.0 这个标签,理论上可以被删除,然后重新打给一个新的镜像。

哈希值(Digest)是永久不变的:sha256... 代表了这个镜像的唯一内容。无论标签怎么变,只要这个哈希值不变,镜像的内容就绝对没变。

使用哈希值拉取的好处是:绝对精准,永远不会拉错版本。

返直觉:拉取成功后,因没有标签,并不能通过 docker images -a 命令能查看到,
但可以直接通过 docker run 的方式来运行

全部安装的操作

删除 Harbor 数据库和镜像数据

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

数据目录的用途说明

[root@PXC03 harbor_data]# ll
total 0
drwxr-xr-x 2   10000 10000  6 Apr 13 19:52 ca_download # Harbor 支持内容信任(Notary)或者某些客户端需要下载 CA 证书来信任 Harbor,证书文件会放在这里供下载
drwx------ 3 polkitd input 18 Apr 13 19:52 database # 元数据 运行的是 PostgreSQL
drwxr-xr-x 2   10000 10000  6 Apr 13 19:52 job_logs # 后台任务的日志,不是容器的日志
drwxr-xr-x 2 polkitd input 22 Apr 14 16:16 redis # 缓存数据和任务队列
drwxr-xr-x 3   10000 10000 20 Apr 13 20:12 registry # 实际文件 里面是 Docker Distribution(开源的 Docker 仓库软件)的数据 保存真正的镜像文件(Blob 数据)
drwxr-xr-x 6 root    root  58 Apr 14 10:39 secret #敏感信息 存放 Harbor 内部各组件之间通信需要的密钥、令牌(Token)或者证书