Docker 映象倉庫為什麼要分庫分許可權?
先說一個事故案例:
場景 :某大型網際網路電商公司,使用一個映象倉庫管理所有 Docker 映象。開發者打出的映象上傳到唯一的映象庫,測試透過後,運維環境的 Kubernetes 直接從這個庫里拉取映象,所有人對映象庫都有 CRUD 的許可權。
事故:由於映象儲存容量過大,開發者打算清理下Snapshot 的映象,在映象清理的時候,誤將生產環境的映象進行了刪除,導致上線出現問題。本質是映象缺乏成熟度的區分管理,
解決辦法:為通一個專案的映象透過升級,放在 3 個映象倉庫內,開發庫,測試庫,生產庫。不同的映象庫對應管理不同成熟度的映象。
從上圖可以看到, Michael Huttermann 在 2012 年展示的流水線質量關卡的概念。上圖的意思,是每個流水線必須具備一定的質量關卡,特別是在測試環境,也就是說,未經自動化測試的 Docker 映象,是不能被放到線上環境執行的。為了區分不同成熟度的製品,需要為不同成熟度階段的製品建立不同的製品倉庫,也就是開發庫,測試庫,生產庫。
根據映象成熟度區分的原則,我推薦上圖的映象儲存方式。我們為開發者提供映象的開發庫,供他們將打好的映象 Push 到開發庫,推送到映象庫之後,即開始開發者自我驗證功能。自我驗證透過後,映象倉庫會複製(也叫 Promote 升級)到測試庫,隨後呼叫測試環境的 Jenkins 流水線,執行自動化測試案例,當測試完成後,記錄測試結果的關鍵資訊到該映象的後設資料上。同時通知測試人員進行 UAT 測試,待所有的測試(人工 + 自動化)完成之後,邊將該映象升級到釋出庫,也叫生產庫。
現在我們為每個專案建立了三個映象倉庫,那麼你可能會問,難道我需要配置 3 個映象倉庫地址嗎?這裡我們推薦下面的映象倉庫工作模型。
來看看上述模型的工作原理:
- 首先需要有一個虛擬倉庫( Virtual Repository )來聚合三個本地倉庫( Local )和遠端倉庫( Remote )。目前 JFrog Artifactory 支援了虛擬倉庫,為研發團隊提供唯一的 Docker 映象中心訪問地址,而不需要在多個映象中心之間切換。
- 開發者透過遠端倉庫用於代理和快取 DockerHub 的官方映象源。
- 映象透過 Jenkins 流水線,在三個本地倉庫之間進行升級。
- 終端使用者,例如生產環境的 Docker 客戶端,訪問 Docker 生產環境的虛擬倉庫,該倉庫提供對外的服務。
好的,瞭解了映象升級,虛擬倉庫的概念之後,你可能會問,如何做這些倉庫的許可權配置呢?
我畫了下面的表格,來幫助你理解不同團隊對不同成熟度的映象倉庫應該基本什麼樣的許可權。
對應許可權 |
開發庫 |
測試庫 |
生產庫 |
開發 |
上傳,下載,修改,標籤 |
無 |
無 |
測試 |
無 |
上傳,下載,修改,標籤 |
無 |
運維 |
無 |
無 |
上傳,下載,修改,標籤 |
CI 伺服器 |
上傳,下載,修改,標籤 |
上傳,下載,修改,標籤 |
上傳,下載,修改,標籤 |
開發只對開發庫有 CRUD 許可權,對生產庫無許可權,這樣就能避免開發對生產庫的誤操作。測試團隊只接受透過開發自測,升級到測試庫的映象,這樣降低測試團隊的無效測試率。運維對生產庫有 CRUD 的許可權。那麼這裡你可能注意到了 CI 伺服器對三個倉庫都有許可權,那是應為映象的跨倉庫複製,打標籤,都是透過 CI 伺服器自動化完成的。
總結
透過開發,測試,生產的三庫分離設定,來存放不同成熟度的 Docker 映象,這樣方便做映象倉庫的清理,只清理開發庫的映象,同時,生產庫只有 CI 伺服器能上傳,運維只接受生產庫裡的映象,進行映象漏洞掃描,部署到生產環境。有什麼問題歡迎留言討論。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69954434/viewspace-2674032/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 為什麼要分庫分表?
- 談談為什麼要分庫分表?
- 好好的系統,為什麼要分庫分表?
- Docker搭建私有映象倉庫Docker
- 資料庫倉庫系列:(一)什麼是資料倉儲,為什麼要資料倉儲資料庫
- 建立 Docker 映象倉庫指令碼Docker指令碼
- oracle分表效率,資料庫分庫分表是什麼,什麼情況下需要用分庫分表Oracle資料庫
- Docker倉庫之Registry私有映象倉庫的搭建與使用Docker
- 為什麼許可權授權很難?- osohq
- Docker映象倉庫清理的探索之路Docker
- Docker企業級映象倉庫HarborDocker
- Docker 5分鐘搭建GitLab程式碼倉庫DockerGitlab
- Linux系統中執行許可權是什麼?rwx分別代表什麼?Linux
- 如何將docker 映象上傳到docker hub倉庫Docker
- 在宿主機上搭建docker映象倉庫Docker
- Docker倉庫之Harbor企業級映象倉庫的搭建與使用Docker
- 建立映象釋出到映象倉庫【不依賴docker環境】Docker
- 為什麼開源資料庫改變許可證?資料庫
- android 許可權庫EasyPermissionsAndroid
- Docker進階與實踐之四:Docker映象倉庫Docker
- Android許可權處理分類Android
- MySQL資料庫許可權體系入門(5)---管理資料庫許可權MySql資料庫
- 容器技術之Docker私有映象倉庫harborDocker
- Docker刪除倉庫中的映象問題Docker
- Jenkins打Docker映象推送到私有倉庫JenkinsDocker
- 為什麼要虛擬化,為什麼要容器,為什麼要Docker,為什麼要K8S?DockerK8S
- 資料庫怎麼分庫分表資料庫
- 系統許可權UNLIMITED TABLESPACE為什麼如此特殊?MIT
- Linux中檔案的特殊許可權有幾種?分別是什麼?Linux
- 容器技術之Docker私有映象倉庫docker-distributionDocker
- 資料庫的許可權管理資料庫
- 如何打包Docker映象並推送到遠端倉庫Docker
- 用 Docker 部署前端?你有私有映象倉庫嗎Docker前端
- 如何配置極狐GitLab Docker 容器映象倉庫GitlabDocker
- docker:映象構建、倉庫、壓縮、匯入 二Docker
- 檔案許可權中 chmod、u+x、u、r、w、x分別代表什麼
- 搭建Harbor 映象倉庫
- 為什麼要前後端分離?有什麼優缺點後端