版本变化
1.1 更新内容
- 安全中心管理员用户现在可以访问有价值的安全见解,其中包括扫描和未扫描的项目数量、危险项目和 CVE 的识别,以及使用多个组合条件对漏洞的高级搜索功能。
- GC 增强功能通过详细的 GC 执行历史记录提高可见性,并启用并行删除以加快 GC 触发器。
- 支持 OCI 分发规范 v1.1.0-rc2Harbor 现在支持 OCI Distribution Spec v1.1.0-rc2,并增加了对符号签名和 Nydus 转换作为引用的支持。
- 自定义横幅消息管理员现在可以设置显示在 Harbor 网页顶部的自定义横幅消息,其也是在生产环境比较实用的功能,在harbor的运维过程中,Harbor中存储多个项目的镜像,如果存储空间满时可向用户发布清理镜像的”通告“而不需要管理员来清理镜像,以防止重要的镜像被误删的情况。
功能使用如图位置:
图片
- 配额更新提供程序引入了一种利用 Redis 在推送镜像时配额更新期间进行乐观锁定的新机制。有关启用和使用此功能的说明,请参阅 https://github.com/goharbor/perf/wiki/Quota-Update 中的文档。
- 移除Notary从版本 v2.9.0 开始,Harbor 不再在用户界面或后端中包含 Notary。详情请浏览至此页面。
1.2 已知问题
如果使用版本低v20.10.10的Docker在线/离线安装Harbor 2.9.0,则可能会遇到Harbor数据库容器无法启动的问题。此问题正在 (#19141) 进行跟踪。有关此特定问题的更多详细信息,请访问此页面(timescale/timescaledb-docker-ha#260)。
为避免此问题,建议在将 Harbor v20.10.10 与在线/离线安装程序一起使用时,确保 Docker 版本等于或大于 2.9.0。
安装部署(离线)
适用于多个版本,离线安装的步骤基本没什么变化。
2.1 主机初始化
① 关闭SELinux、swap
$ sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
- 禁用Swap
$ sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
$ swapoff -a
② 配置repo源
$ wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
$ wget http://mirrors.aliyuncs.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
$ yum clean all
③ 安装docker-ce
- 下载rpm包并安装
$ mkdir docker-ce
$ yum install -y docker-ce --downloadonly --downloaddir=./docker-ce/
$ yum install -y rpm/*.rpm
- 启动docker
$ systemctl enable --now docker
- 修改docker配置 在insecure-registries参数后填写Harbor的地址及端口
$ cat /etc/docker/daemon.json
{
"registry-mirrors": ["http://127.0.0.1:65001"],
"insecure-registries": ["192.168.2.19:443","134.194.15.150:1021"], "storage-driver": "overlay2",
"exec-opts": ["native.cgroupdriver=systemd"] ,
"graph": "/dcos/data/docker",
"log-driver": "json-file",
"log-opts": {
"max-size": "500m"
}
}
- 重启服务
$ systemctl daemon-reload && systemctl restart docker
④ 安装docker-compose
docker-compose的版本在1.18.0+
$ wget https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-linux-x86_64
$ mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
$ docker-compose -v
docker-compose version 1.29.2, build 5becea4c
⑤ 配置内核参数
配置3个必要的内核参数,其他内核参数可自行添加。
$ modprobe br_netfilter #加载内核模块(临时)
$ cat > /etc/sysctl.conf << EOF
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
$ sysctl -p
net.ipv4.ip_forward:开启路由转发(不配置该参数,当主机重启后,服务状态正常,却无法访问到服务器)
⑥ 安装cfssl证书工具(可选)
https模式需要签发证书,本处使用cfssl向Harbor签发证书,
下载二进制可执行文件并放入到/usr/local/bin/下并给执行权限即完成。
$ wget -c https://github.com/cloudflare/cfssl/releases/download/v1.6.0/cfssl_1.6.0_linux_amd64 -O /usr/local/bin/cfssl
$ wget -c https://github.com/cloudflare/cfssl/releases/download/v1.6.0/cfssljson_1.6.0_linux_amd64 -O /usr/local/bin/cfssljson
$ wget -c https://github.com/cloudflare/cfssl/releases/download/v1.6.0/cfssl-certinfo_1.6.0_linux_amd64 -O /usr/local/bin/cfssl-certinfo
$ chmod +x /usr/local/bin/cfssl*
cfssl version
Version: 1.6.0
Runtime: go1.18
2.2 签发HTTPS证书(可选)
http模式可不需要进行本处操作,生产环境建议使用https模式来保障安全。
本处使用cfssl向Harbor签发证书,详细见文章: https://mp.weixin.qq.com/s/T9xug20FNU3zOodno5IwPA
① 生成证书颁发机构证书(CA)
自建CA证书颁发机构,使用刚才安装好的cfssl工具为harbor制作颁发证书
- 生成并修改CA默认配置文件
$ mkdir -p /app/harbor/ssl/ #创建证书存放目录
$ cfssl print-defaults config > /app/harbor/ssl/ca-config.json #生成默认配置文件
$ cat <<EOF > /app/harbor/ssl/ca-config.json
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"harbor": {
"expiry": "87600h",
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
]
}
}
}
}
EOF
图片
- 生成并修改默认csr请求文件
$ cfssl print-defaults csr > /app/harbor/ssl/ca-csr.json
$ cat <<EOF > /app/harbor/ssl/ca-csr.json
{
"CN": "harbor",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "Beijing",
"L": "Beijing"
}
]
}
EOF
图片
- 初始化CA证书
$ cfssl gencert -initca /app/harbor/ssl/ca-csr.json | cfssljson -bare /app/harbor/ssl/ca
$ ls /app/harbor/ssl/
ca-config.json ca.csr ca-csr.json ca-key.pem ca.pem
可以看到,当前目录下新生成了ca.csr、ca-key.pem、ca.pem这3个文件。ca-key.pem、ca.pem这两个是CA相关的证书,通过这个CA来向Harbor颁发证书。
图片
② CA给Harbor颁发证书
Harbor使用类似于申请表的一个请求文件向CA机构申请证书,CA机构则根据配置文件(证书策略)和请求文件(申请表)向Harbor颁发证书。
- 创建并修改Harbor证书请求文件
使用以下命令创建一个默认的请求文件,但默认的部分参数需要修改。
$ cfssl print-defaults csr > /app/harbor/ssl/harbor-csr.json
$ cat /app/harbor/ssl/harbor-csr.json
{
"CN": "harbor",
"hosts": [
"127.0.0.1",
"192.168.2.19",
"lidabai.harbor.cn"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "BeiJing",
"L": "BeiJing"
}
]
}
图片
- CA向Harbor颁发证书
CA使用请求文件根据配置向Harbor颁发证书。
$ cfssl gencert -ca=/app/harbor/ssl/ca.pem \
-ca-key=/app/harbor/ssl/ca-key.pem \
-cnotallow=/app/harbor/ssl/ca-config.json \
-profile=harbor /app/harbor/ssl/harbor-csr.json | cfssljson -bare /app/harbor/ssl/harbor
$ ls /app/harbor/ssl/
ca-config.json ca.csr ca-csr.json ca-key.pem ca.pem harbor.csr harbor-csr.json harbor-key.pem harbor.pem
$ cp harbor.pem harbor-key.pem /app/harbor/ssl/
图片
安装
① 下载离线安装包
$ export HARBOR_VERSION=2.9.0 #声明变量,指定版本号
$ wget https://github.com/goharbor/harbor/releases/download/v$HARBOR_VERSION/harbor-offline-installer-v$HARBOR_VERSION.tgz
$ tar -zxvf harbor-offline-installer-v$HARBOR_VERSION.tg z -C /app/
harbor/harbor.v$HARBOR_VERSION.tar.gz
harbor/prepare
harbor/LICENSE
harbor/install.sh
harbor/common.sh
harbor/harbor.yml.tmpl
② 导入镜像
$ docker load -i harbor.v$HARBOR_VERSION.tar.gz
③ 修改配置文件
将配置模板复制为配置文件后修改配置参数
$ cp harbor.yml.tmpl harbor.yml
$ vim harbor.yml
hostname: lidabai.harbor.com
http:
port: 80
# 启用https
https:
port: 443
certificate: /app/harbor/ssl/harbor.pem #Harbor的证书
private_key: /app/harbor/ssl/harbor-key.pem #Harbor的证书私钥
metric:
enabled: true #开启Harbor Metrics监控
port: 9090
path: /metric
其他配置参数根据需要进行修改。
④ 加载配置
在安装目录下执行./prepare加载各个组件的配置。
$ ./prepare
图片
⑤ 安装启动Harbor
$ ./install.sh --with-trivy
图片
图片
出现:✔ ----Harbor has been installed and started successfully.则表示安装成功
服务验证
3.1 检查服务及组件状态
$ docker-compose ps
图片
服务正常!
登录Harbor UI
浏览器输入https://192.168.2.19:443
图片
图片
图片
图片
登录正常!
参考文献
https://github.com/goharbor/harbor/releases