harbor仓库同步
背景
proxy: remoteurl: https://hub.iflyhealth.com:8098/ username: admin password: Harbor@xfyl.com
- 在多个k8s集群情况下,每次版本更新时,需要手动人肉传镜像到每个集群,然后push到各个harbor仓库。这样很影响工作效率,所以每个集群harbor仓库实现同步很有必要。
部署harbor
- 下载 harbor离线包:https://storage.googleapis.com/harbor-releases/release-1.8.0/harbor-offline-installer-v1.8.2.tgz,当前使用v1.8.2版本,更多版本可以查看https://github.com/goharbor/harbor/releases
- 将离线包解压,修改harbor.yml配置文件中的hostname,端口号,数据存放目录(这里指宿主机目录)
- 安装docker-compose: 参考https://docs.docker.com/compose/install/
- curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
- chmod +x /usr/local/bin/docker-compose
- 执行 install.sh脚本
配置mirro_registry
- vim /home/xwcheng/harbor/common/config/registry
-
在最后添加该配置:
同步配置proxy:
remoteurl: https:
//hub
.iflyhealth.com:8098/
username: admin
password: Harbor@xfyl.com
- 重启harbor
- docker-compose stop
- docker-compose up -d
- 进入harbor任意容器里可能会发现通不了外网,
- 因为容器需要访问公网,需要宿主机增加一条iptables snat的策略,将容器ip出去的时候转换成宿主机IP;
- 使用iptables -t nat -L -n --line-numbers|grep MASQUERADE 查看宿主机是否有harbor网桥的ip snat策略,注意harbor走的是harbor自己的网络,在部署harbor时,会自定义个网络,对应的网卡为如下:
- 所以需要将172.28.0.0/16的原地址进行原地址转换,iptables -t nat -A POSTROUTING -s 172.28.0.0/16 -o ens32 -j MASQUERAD
- 重启harbor,再次进入harbor容器,发现可以出互联网了。
验证
- 这样每次上线时,不需手动传包,在本地主机pull镜像,harbor仓库会自动去远程harbor仓库拉取镜像。
手动&&定时同步镜像
- 在目标URL处,harbor会将ip反解析成harbor.yml里的host,然而,harbor不会去服务器的hosts文件里解析,它会找dns服务器解析,所以会出错。解决办法:将harbor.yml里的host域名改为本机ip。