Docker Swarm -> Overview Docker Swarm with TLS
Docker Swarm 與TLS 概述
Swarm集群中的所有節點必需綁定它們的Docker daemon到一個網絡端口。這顯然是有安全隱患的。當到了例如Internet這種不可信的網絡環境下,這個問題更為明顯。為了緩和這種風險,Docker Swarm和Docker Engine daemon支持Transport Layer Security (TLS).
注意: TLS是SSL (Secure Sockets Layer)的后繼者,并且這兩個術語經常互用。Docker 在這個文章通篇中使用TLS表述。
了解TLS的概念
再進一步討論之前,了解TLS的基本概念和public key infrastructure (PKI) 是很重要的。
Public key infrastructure 關系到安全的技術,策略,處理,它被用于創建和管理數字證書。這些證書和數字安全通信使用了authentication和encryption機制。
下面的推斷可能很有用。通常護照被用于確認個人的身份。護照通常包含了擁有者的照片和生物信息。護照會列出頒發他的國家還有有效期。數字證書也很相似。下面的文本是從數字證書中摘錄的:
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 9590646456311914051 (0x8518d2237ad49e43)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=US, ST=CA, L=Sanfrancisco, O=Docker Inc
Validity
Not Before: Jan 18 09:42:16 2016 GMT
Not After : Jan 15 09:42:16 2026 GMT
Subject: CN=swarm
這個證書標識了一個稱作 swarm 的計算機。證書的有效期在2016.1-2026.1,由美國加州的Docker Inc頒發的。
正如護照是用于個人登機驗證,數字證書認證網絡中的一個計算機。
數字證書的使用依賴于public key infrastructure (PKI). PKI的支持如下:
- 安全證書的申請服務
- 程序驗證實體請求證書
- 處理確認實體的證書資格
- 頒發證書的技術和流程
- 吊銷證書的技術和流程
Docker Engine 如何通過認證使用TLS
在這一章,你會了解到Docker Engine和Swarm是如何使用PKI和證書去提升安全性。
你可以設置使Docker Engine CLI和Docker Engine daemon需要TLS認證。設置了TLS意味著所有Docker Engine CLI和Docker Engine daemon的通信必須通過TLS和一個可信的數字證書的簽名。Docker Engine CLI 必須提供它的數字證書在Docker Engine daemon接受到了命令請求之前。
Docker Engine daemon必須信任Docker Engine CLI使用的證書。這種信任通暢是由受信任的第三方的方式建立的。下圖是配置的需要TLS認證的Docker Engine CLI和Docker Engine daemon。

圖中受信任的第三方就是證書頒發機構(CA)服務器。以國家的護照為例,CA 創建,簽署,頒發,吊銷證書。信任源于通過安裝CA的根證書在運行的Docker Engine daemon的主機上。Docker Engine CLI請求其擁有的CA服務器簽名和頒發的證書從CA服務器。
Docker Engine CLI發送它的證書到Docker Engine daemon在它發送命令之前。Docker Engine daemon 檢查這個證書,因為Docker Engine daemon 相信這個CA,所以Docker Engine daemon 自然也相信任何由CA簽發的證書。假設這個證書還沒有過期或被吊銷,Docker Engine daemon將接收來自被信任的Docker Engine CLI的命令。
Docker Engine ClI是一個很簡單的客戶端,它使用Docker Engine Remote API與Docker Engine daemon進行通信。任何使用Docker Engine Remote API的客戶端都可以使用TLS。比如,Docker Engine 客戶端像‘Docker Universal Control Plane’(UCP)就內置了TLS支持,第三方使用了Docker Engine Remote API的產品都可以通過這種方式配置。
Docker和Swarm的TLS模式
現在你知道了Docker Engine daemon如何使用證書進行認證。這里的三個TLS配置可能很重要對于Docker Engine daemon和它的客戶端:
- 外部第三方CA
- 組織內部CA
- 自簽名證書
這些配置的區別被用于區分證書頒發機構(CA)的類型。
外部第三方CA
一個外部CA是一個受信的第三方公司,它提供證書的創建,頒發,吊銷和管理。它們滿足特定的條件,保持高水平的安全性和商業習慣來贏得信賴。你可以安裝外部的CA的根證書為你的服務和計算機去信任他們。
當你使用一個外部的第三方CA,它們創建,簽署,頒發,吊銷和管理你的證書。他們通常會收取一定的費用,但是它被認為是一個提供了高度信賴的企業級可拓展解決方案。
組織內部CA
有許多組織選擇去實現他們自己的CA和PKI。常見的例子是使用OpenSSL和Microsoft Active Directory。在這種情況下,你的公司擁有CA需要承擔CA的相關工作。這樣做的好處是,你自己擁有CA,你有更多的PKI控制權。
運維你自己的CA和KPI需要你提供所有外部第三方CA的服務。包含創建,簽署,頒發,吊銷和管理你的證書。自己做所有的事情會造成一些花費和成本。然而,對于一個大的組織來說,它可以比使用第三方CA減少花費。
假設你自己操作和妥善管理自己的內部CA和PKI。那么一個內部組織的CA是一個高度可拓展和高度安全的選項。
自簽名證書
顧名思義,自簽名證書是一個使用他們自己的私鑰簽名的證書而不是受信任的CA簽發的。這是一個極低的花費并且簡單的使用選擇。如果你可以正確的管理自簽名證書,當然要比不使用證書更好。
因為自簽名證書缺乏一個成熟了PKI,它們不能很好的擴展并且缺乏很多其它選擇提供的功能。還有一個缺點是你無法吊銷自簽名證書。因為這個原因和其它的限制,自簽名證書被認為是這些選擇中安全性最低的選擇。不推薦將自簽名證書暴露在公開的不可信的網絡環境中。