《Windows Azure Platform 系列文章目录》
最近遇到一个客户需求,客户的镜像参考保存在IDC侧的Harbor上,需要通过Harbor同步到Azure Container Registry (ACR)里。
Harbor介绍:
Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜像的效率。Harbor支持安装在多个Registry节点的镜像资源复制,镜像全部保存在私有Registry中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。
Harbor特性:
- 基于角色的访问控制 :用户与Docker镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
- 镜像复制 : 镜像可以在多个Registry实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。
- 图形化用户界面 : 用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间。
- AD/LDAP 支持 : Harbor可以集成企业内部已有的AD/LDAP,用于鉴权认证管理。
- 审计管理 : 所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
- 国际化 : 已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。
- RESTful API : RESTful API 提供给管理员对于Harbor更多的操控, 使得与其它管理软件集成变得更容易。
- 部署简单 : 提供在线和离线两种安装工具, 也可以安装到vSphere平台(OVA方式)虚拟设备。
Harbor组件:
- harbor-adminserver:harbor系统管理接口,可以修改系统配置以及获取系统信息
- harbor-db:存储项目的元数据、用户、规则、复制策略等信息
- harbor-jobservice:harbor里面主要是为了镜像仓库之前同步使用的
- harbor-log:收集其他harbor的日志信息。rsyslogd
- harbor-ui:一个用户界面模块,用来管理registry。主要是前端的页面和后端CURD的接口
- nginx:harbor的一个反向代理组件,代理registry、ui、token等服务。这个代理会转发harbor web和docker client的各种请求到后端服务上。是个nginx。nginx负责流量转发和安全验证,对外提供的流量都是从nginx中转,它将流量分发到后端的ui和正在docker镜像存储的docker registry
- registry:存储docker images的服务,并且提供pull/push服务。harbor需要对image的访问进行访问控制,当client每次进行pull、push的时候,registry都需要client去token服务获取一个可用的token。
- redis:存储缓存信息
- webhook:当registry中的image状态发生变化的时候去记录更新日志、复制等操作。
安装Harbor:
1.在Azure上准备一台虚拟机,操作系统为Ubuntu 16.04。步骤略。
把Azure虚拟机的公网DNS地址修改一下,我们选择公网IP地址,修改DNS Name。如下图:
2.创建完毕后,SSH登录到这台虚拟机上,首先我们安装Docker
sudo apt-get update && sudo apt-get install apt-transport-https ca-certificates curl software-properties-common -y curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add sudo add-apt-repository "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable" sudo apt-get update sudo apt install -y docker-ce
3.安装Docker Compose
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose
4.安装Harbor
wget https://storage.googleapis.com/harbor-releases/release-2.4.0/harbor-online-installer-v2.4.0.tgz tar zxvf harbor-online-installer-v2.4.0.tgz -C /usr/src/ cd /usr/src/harbor cp harbor.yml.tmp harbor.yml vim harbor.yml
编辑harbor.yml的时候,修改hostname为Azure DNS Name,注释https部分内容
5.在SSH中,去除多余的注释和空行,配置文件如下
cat harbor.yml |grep -v "^#"|grep -v " #"|grep -v "^$"
6.之后直接执行:
./install.sh
7.如果出现以下提示,则表示安装成功
8.我们访问页面 http://leiharborserver.chinanorth3.cloudapp.chinacloudapi.cn/
使用默认的登录名: admin,密码: Harbor12345,进行登录
9.登录成功之后,效果如下:
测试客户端推送:
1.本地笔记本电脑已经安装了Docker Desktop
2.因为在Harbor只设置了HTTP,没有启用HTTPS,所以需要进行配置。我们打开Docker Desktop的settings,修改insecure0regustrues。如下图:
3.打开CMD,运行以下命令登录仓库,登录名: admin,密码: Harbor12345
docker login leiharborserver.chinanorth3.cloudapp.chinacloudapi.cn
Username: admin
Password:
4.下载一个nginx镜像:
docker pull nginx
5.给镜像打tag
docker tag nginx:latest leiharborserver.chinanorth3.cloudapp.chinacloudapi.cn/library/nginx:v1.0
6.把本地镜像推送到Harbor上
docker push leiharborserver.chinanorth3.cloudapp.chinacloudapi.cn/library/nginx:v1.0
7.推送完毕后,我们登录Harbor,可以查看到之前的镜像
设置Harbor到Azure Container Registry (ACR)的同步:
1.我们首先查看Azure ACR里的配置,如下图:
把下图的Login Server,Username和password复制好。
2.接下来,我们需要把Harbor上的镜像同步到Azure Container Registry里,我们点击系统管理,仓库管理,新建目标。如下图:
3.把上面的Azure ACR里的Login Server,Username和password信息,复制到下图里。点击测试连接。
4.保存上面的新建目标。设置结果如下图:
5.在Harbor里,点击复制管理。如下图:
触发模式,我们选择手动
6.配置完毕后,我们点击下图的复制按钮:
7.复制任务显示为成功
8.我们点击https://portal.azure.cn/,可以查看到harbor的镜像已经同步到Azure ACR了。如下图: