in container

Quay: 企業級容器鏡像發布服務

前言

值得一提一則新聞 Docker移除17個暗藏挖礦程式的惡意容器 – iTHome,隨著 Docker Images 越來越多,任何人都可以透過簡單幾個指令發布自己的 Docker Images (方式可以查詢本篇 Self-Publishing Your Own Images 章節),隨之帶來的資安風險是無法被忽視的。以企業級使用來說,都是建議從信任或認證過的 Image 開始寫 Dockerfile 一步一步的往上建立企業內部使用的 Image,從源頭開始把關所有應該要關注的稽核點,當然也不能說任何已被信任的 Image 及自己加疊的服務都是將來不會有問題,所以也會建議搭配 CVE 掃描確保 Image 高安全性。而年初的時候 RedHat 宣布收購 CoreOS,在該計畫底下,除了 CoreOS 本體以外,還有企業級自動化容器平台 TectonicQuay,本篇針對 Quay 來做個簡單圖文並茂的介紹。

簡介 Quay

Quay 是一個企業級容器鏡像發布服務,可以支持多數企業對於私有容器雲鏡像管理的需求,包含 CVE 掃描、權限管理及異地備援。透過網頁圖像管理介面,可輕鬆地管理鏡像、觸發鏡像構建和管理存取權限。

特性包含以下:

  • 高可用 (Highly Available)
    可運行多個 Quay 實例來確保服務可用,避免單點故障 (SPoF)

  • 異地備援 (Geo-replication)
    支援於不同資料中心同步相同鏡像,確保一致性

  • 支援 CI (Continuous Integration)
    支援開發者 commit source code 後,可自動觸發 build images 並上版號

  • 資安掃描 (Security Scanning)
    基於 CoreOS 底下專案 Clair,來支援對所有於 Quay 上維護的容器鏡像,掃描已知的資安漏洞風險

  • 權限管理 (Access Control)
    支援新增機器人帳號、RBAC 和 SSO 等方式

架構

本圖是表示 Quay 可跨地區複製及管理容器鏡像並確保所有使用者都能在同一個環境下操作,可建立私有容器鏡像庫管理

Self-Publishing Your Own Images

Login to Quay.io

# Please make sure you have account on Quay
[root@master1 ~]# docker login quay.io
Username: pichuang
Password: <I ALWAYS FORGOT THE PASSWORD = =>
Login Succeeded

Create a new docker image and Push it

# Just create a simple docker image
[root@master1 ~]# docker run busybox echo "blog.pichuang.com.tw"
blog.pichuang.com.tw

# Show the latest created container, and copy the ID into `docker commit`
[root@master1 ~]# docker ps -l 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
0c13a4b612c0        busybox             "echo blog.pichuan..."   41 seconds ago      Exited (0) 40 seconds ago                       angry_mahavira
[root@master1 ~]# docker commit 0c13a4b612c0 quay.io/pichuang/helloquay
sha256:bc8c38dd3d77b7d826733c41a7c5f84ba1ab2c34a0afbfe87dfb0bb0f1ca0d18

# Push your specific images into Quay
[root@master1 ~]# docker push quay.io/pichuang/helloquay
The push refers to a repository [quay.io/pichuang/helloquay]
8b2efd2b2c91: Pushed 
432b65032b94: Pushed 
latest: digest: sha256:388ebf5a1220c0ddd25af8b468889e8855ea8cadfedc4a8ed0cf7ca9b3c0643a size: 2397

Done!

功能介紹

Repository Tags

Quay 網頁支援直接對某一個 Images 直接上 Tag,也可以透過網頁對於知道各 Tags 的相關性,再也不用擔心到底在用的 tag 跟誰是有相關的

Tag History

可查詢該 Repository 歷史紀錄,若同時有多種操作時,可以從 Timeline 中找到所需要的 images

Repository Builds

理所當然的也支持 Dockerfile 的自動構建,來源可以選擇 GitHub、Bitbucket、GitLab 或自建的 Git Repository,每一有更新會自動觸發構建新的 image

Usage Logs

使用率調查,包含 Push / Pull / Create Tag / Delete Tag 都能收集相關資訊呈現在網頁上

Repository Setting

可以針對該 Repository 設定帳號或者是機器人管理權限,及不同的事件觸發通知

Robot Account

每個帳號可以產生自己的 Robot Account,能被分派給多數專案做使用,不用跟別人互搶權限,自己機器人大軍自己建。同時也支援多種平台匯出憑證,可以降低自己帳號外洩的疑慮

Manifest Layer

Security CVE Scanner

透過對容器內的 Layer 用已知的 CVE 去掃有沒有問題,發現漏洞並提早進行預警,確保鏡像是乾淨的

Security Package Scanner

針對 Images 裡所使用的 Package 進行資安掃描,並提出對應升級建議和升級後風險評估

References