天天看點

優雅地實作安全的容器編排 - Docker Secrets

優雅地實作安全的容器編排 - Docker Secrets

在微服務架構應用中,衆多元件在叢集中動态地建立、伸縮、更新。在如此動态和大規模的分布式系統上,管理和分發密碼、證書等敏感資訊将會是非常具有挑戰性的工作。對于容器應用,傳統的秘密分發方式,如将秘鑰存放在容器鏡像中,或是利用環境變量,volume動态挂載方式動态傳入都存在着潛在的安全風險。

為了應對這個問題,在docker 1.13及更高版本中,docker推出了secrets管理,可以在swarm mode叢集中安全地管理密碼、密鑰證書等敏感資訊,并允許在多個docker容器執行個體之間共享通路指定的秘密資訊。

docker指令行工具提供了<code>docker secret</code>指令來管理敏感資訊,

注: <code>docker secret</code> 隻能從docker swarm模式的manager節點調用,如果你在本機進行試驗,請先執行 <code>docker swarm init</code> 指令

其中 <code>docker secret create</code> 支援從标準輸入讀取資訊,并且存入指定的secret:

首先我們建立兩個 secrets

然後我們建立一個“db”服務并引用所建立的secret作為,資料庫密碼和root密碼

建立完畢之後,我們可以檢查服務的狀态

我們可以通過 <code>docker exec</code> 指令來進入容器内部,檢視挂載到/run/secrets/目錄下的秘密檔案

從 docker compose v3.1開始,支援在容器編排檔案中使用 secret,這可以友善地在不同容器中分享所需的敏感資訊。下面我們将使用 compose 模闆來建構一個wordpress應用,通過 secret 實作 “wordpress”服務容器和“db”服務容器中共享資料庫密碼。

<code>docker-compose.yml</code> 檔案如下

通過模闆中的 <code>secrets</code> 部分,我們建立和引用 docker secrtes,而且在service 定義中可以非常友善地引用這些秘密資訊,實作安全的容器編排。

首先,我們利用指令行建立秘密

然後利用指令行部署compose模闆

優雅地實作安全的容器編排 - Docker Secrets

首先,我們需要建立一個docker swarm mode叢集。注意在叢集模式中選擇 docker swarm mode。目前它還在 beta 公測階段,在華東2、美西1等地域開放。

優雅地實作安全的容器編排 - Docker Secrets

建立叢集之後,它會自動構成一個 docker swarm叢集。

選擇叢集,點選 “管理” &gt;&gt; “秘鑰管理” &gt;&gt; “建立”,來建立新的secret

優雅地實作安全的容器編排 - Docker Secrets

然後退回容器服務控制台,建立docker compose v3模闆。

選擇 “鏡像與方案” &gt;&gt; “編排模闆” &gt;&gt; “建立”,使用如下内容建立模闆 “wordpressv3-secret”

和上面示例模闆一緻,它會使用叢集中的 secret “wp_db_password” 和 “root_db_password” 來配置資料庫密碼和root密碼。

與之前示例唯一不同的地方在于,在本模闆中使用 <code>aliyun.routing.port_80: wordpress</code> 标簽來指明:将虛拟域名 “wordpress” 的請求路由到容器的 80 端口進行處理。這樣無需在叢集上暴露額外的端口,就可以直接通過7層負載均衡來通路應用了。容器服務内置了7層負載均衡和路由能力。

選擇“建立應用”,輸入應用名稱和部署叢集,點選“下一步”

優雅地實作安全的容器編排 - Docker Secrets

在“應用配置”頁面,選擇“建立并部署”,

優雅地實作安全的容器編排 - Docker Secrets

建立完畢,在應用頁面就可以看見新的容器應用,在其部署就緒之後,我們可以點選應用名稱進入應用管理界面,檢視服務和容器資訊。

優雅地實作安全的容器編排 - Docker Secrets

在路由清單,我們可以發現應用注冊過的路由位址,

優雅地實作安全的容器編排 - Docker Secrets

點選之後,可以進入“wordpress”的配置頁面了,是不是很友善呢:-)

優雅地實作安全的容器編排 - Docker Secrets

docker 在swarm mode叢集設計中采用了系統化的安全設計。 使用者建立的 secrets,會以加密的方式存儲在叢集中 manager節點的 raft store中。在建立服務時,secrets 會下發到服務任務所處的 worker 節點,并以 tmpfs 的形式挂載在容器内部。進而保證了秘鑰等敏感資訊可以安全地在分布式叢集上分發。通過這樣的措施,即使叢集中一台worker節點被攻破,沒有容器通路權限的人是無法擷取相應秘密資訊的。

優雅地實作安全的容器編排 - Docker Secrets

在其他容器編排技術中,如kubernetes也有類似的 secrets 機制,然而在安全性上還存在較多的問題,期待在未來能夠解決。

安全無小事,微服務架構的應用對容器叢集中安全地管理和分發秘密提出了更大的挑戰。通過docker secret和docker編排可以非常簡潔、優雅地解決這個問題,幫助您打造安全的雲原生應用執行環境。

容器服務的swarm mode還在公測之中,陸續會有更多更酷的功能釋出出來,也歡迎大家多提寶貴意見。

繼續閱讀