《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了。如下圖: