我正在参加「金石计划」
写在前面
harbor官网地址:github.com/goharbor/ha...
对于arm64架构的harbor服务,官方一直没有提供相关的支持!!!让人头大
最近有些漏洞被扫描出来了,漏洞说明如下:
Harbor未授权访问漏洞 (CVE-2022-46463)【原理扫描】
Harbor 是一个开源的 Docker Registry 管理项目,用于托管容器镜像。 Harbor 受影响版本中镜像仓库存在访问控制缺陷,攻击者可通过页面搜索镜像名称,绕过登陆验证逻辑,直接查看结果中未授权的私有镜像仓库并获取仓库信息(Pull、Push 的时间和 commit 信息,以及镜像存在的漏洞信息等)。
解决建议:
升级 github.com/goharbor/harbor 到 2.6.0 或更高版本
给出的建议是更新harbor到最新版本,但是全网能找到的harbor-arm64架构的离线安装版本,大部分都是2.4.0版本的:例如这个:harbor-v2.4.0离线安装(arm架构)
官方给出的建议是,可以自己编译一个arm64架构的harbor服务: github.com/goharbor/ha...
好家伙,看起来有点麻烦,而且我们公司的服务器一般都是内网环境,没法联网的!!!
离线编译,好像更难了!!!
这里找到了一个不错的思路:找到harbor所需的所有镜像的arm64版本,然后替换离线安装包里面的镜像
。
好家伙,这个想法,确实不错,那就开干!!!
参考文档可以看这里:www.jianshu.com/p/9925ea2fd...
harbor2.9.0-arm64版本制作
- 先拉arm64架构的harbor相关镜像
sh
docker pull --platform=linux/arm64 ghcr.io/octohelm/harbor/harbor-registryctl:v2.9.0
docker pull --platform=linux/arm64 ghcr.io/octohelm/harbor/nginx-photon:v2.9.0
docker pull --platform=linux/arm64 ghcr.io/octohelm/harbor/registry-photon:v2.9.0
docker pull --platform=linux/arm64 ghcr.io/octohelm/harbor/prepare:v2.9.0
docker pull --platform=linux/arm64 ghcr.io/octohelm/harbor/harbor-portal:v2.9.0
docker pull --platform=linux/arm64 ghcr.io/octohelm/harbor/harbor-log:v2.9.0
docker pull --platform=linux/arm64 ghcr.io/octohelm/harbor/harbor-exporter:v2.9.0
docker pull --platform=linux/arm64 ghcr.io/octohelm/harbor/redis-photon:v2.9.0
docker pull --platform=linux/arm64 ghcr.io/octohelm/harbor/trivy-adapter-photon:v2.9.0
docker pull --platform=linux/arm64 ghcr.io/octohelm/harbor/harbor-core:v2.9.0
docker pull --platform=linux/arm64 ghcr.io/octohelm/harbor/harbor-db:v2.9.0
docker pull --platform=linux/arm64 ghcr.io/octohelm/harbor/harbor-jobservice:v2.9.0
- 将相关镜像修改名称
sh
docker tag ghcr.io/octohelm/harbor/harbor-registryctl:v2.9.0 goharbor/harbor-registryctl:v2.9.0
docker tag ghcr.io/octohelm/harbor/nginx-photon:v2.9.0 goharbor/nginx-photon:v2.9.0
docker tag ghcr.io/octohelm/harbor/registry-photon:v2.9.0 goharbor/registry-photon:v2.9.0
docker tag ghcr.io/octohelm/harbor/prepare:v2.9.0 goharbor/prepare:v2.9.0
docker tag ghcr.io/octohelm/harbor/harbor-portal:v2.9.0 goharbor/harbor-portal:v2.9.0
docker tag ghcr.io/octohelm/harbor/harbor-log:v2.9.0 goharbor/harbor-log:v2.9.0
docker tag ghcr.io/octohelm/harbor/harbor-exporter:v2.9.0 goharbor/harbor-exporter:v2.9.0
docker tag ghcr.io/octohelm/harbor/redis-photon:v2.9.0 goharbor/redis-photon:v2.9.0
docker tag ghcr.io/octohelm/harbor/trivy-adapter-photon:v2.9.0 goharbor/trivy-adapter-photon:v2.9.0
docker tag ghcr.io/octohelm/harbor/harbor-core:v2.9.0 goharbor/harbor-core:v2.9.0
docker tag ghcr.io/octohelm/harbor/harbor-db:v2.9.0 goharbor/harbor-db:v2.9.0
docker tag ghcr.io/octohelm/harbor/harbor-jobservice:v2.9.0 goharbor/harbor-jobservice:v2.9.0
- 将harbor相关镜像导出为tar包
sh
docker save -o goharbor-harbor-registryctl-v2.9.0.tar goharbor/harbor-registryctl:v2.9.0
docker save -o goharbor-nginx-photon-v2.9.0.tar goharbor/nginx-photon:v2.9.0
docker save -o goharbor-registry-photon-v2.9.0.tar goharbor/registry-photon:v2.9.0
docker save -o goharbor-prepare-v2.9.0.tar goharbor/prepare:v2.9.0
docker save -o goharbor-harbor-portal-v2.9.0.tar goharbor/harbor-portal:v2.9.0
docker save -o goharbor-harbor-log-v2.9.0.tar goharbor/harbor-log:v2.9.0
docker save -o goharbor-harbor-exporter-v2.9.0.tar goharbor/harbor-exporter:v2.9.0
docker save -o goharbor-redis-photon-v2.9.0.tar goharbor/redis-photon:v2.9.0
docker save -o goharbor-trivy-adapter-photon-v2.9.0.tar goharbor/trivy-adapter-photon:v2.9.0
docker save -o goharbor-harbor-core-v2.9.0.tar goharbor/harbor-core:v2.9.0
docker save -o goharbor-harbor-db-v2.9.0.tar goharbor/harbor-db:v2.9.0
docker save -o goharbor-harbor-jobservice-v2.9.0.tar goharbor/harbor-jobservice:v2.9.0
4.将harbor相关的tar包全部合并成一个gz包
sh
tar -czvf harbor.v2.9.0-arm64.tar.gz *.tar
5.下载官网离线安装包x86,主要是未了拿里面的配置文件,将里面的harbor.v2.9.0.tar.gz,替换我们上面制作好的harbor.v2.9.0-arm64.tar.gz镜像包即可。harbor-offline-installer-v2.9.0下载地址
6.将install.sh文件,50行,改成下面:
sh
#docker load -i ./harbor*.tar.gz
rm -rf images && mkdir images
tar -zxvf ./harbor*.tar.gz -C ./images
ls images/*.tar | xargs -n 1 docker load -i
docker images|grep goharbor
- 替换好后重新打包全部合并成一个gz包
sh
tar -czvf harbor-offline-installer-v2.9.0-arm64.tar.gz harbor
harbor2.9.0-arm64升级部署
在部署的时候发现,redis服务启动失败,报错信息如下:
没记错的话,类似是下面这个错误信息:
sh
<jemalloc>: Unsupported system page size
Out of memory allocating bitmask: Cannot allocate memory
问题不大,既然这个redis无法使用,我们用回2.4.0的redis就好了!!!
这里用2.4.0的redis其实没啥大的影响,因为harbor的核心服务已经是2.9.0了!!!
sh
#将2.4.0的redis改一个tag名称,改成2.9.0的
docker tag goharbor/redis-photon:v2.4.0 goharbor/redis-photon:v2.9.0
然后重新打包即可!!!
从2.4.0的harbor升级到2.9.0的harbor,好像改动比较大,所以这里我就直接覆盖升级了。
先将2.4.0相关的服务停了,然后将相关的挂载清了,然后再安装2.9.0,就基本没啥大问题了!!!
sh
#清空历史挂载文件:
rm -rf /var/log/harbor/
rm -rf /data/database
rm -rf /data/job_logs
rm -rf /data/redis
rm -rf /data/registry #harbor镜像存放路径
rm -rf /data/ca_download/
harbor的安装,可以参考这里:安装harbor作为docker镜像仓库,这里就不再过多描述了。
最后安装成功!!!
这里提供已经制作好的harbor-2.9.0-arm64安装包: harbor-v2.9.0离线安装(arm架构)
好了,以上就是我个人的实操了。可能有些不对,大家伙,轻点喷!!!
个人理解,可能也不够全面,班门弄斧了。
好了,今天就先到这里了!!!^_^
如果觉得有收获的,帮忙点赞、评论、收藏
一下,再走呗!!!