Salt使用服務器代理通訊模型,服務器組件稱爲 Salt Master, 代理稱爲 Salt Minion。算法
Salt Master負責向Salt Minion發送命令,而後聚合並顯示這些命令的結果。單個Salt Master能夠管理數千個系統。數據庫
saltstack組件以下:api
salt master: 中央管理系統,用於將命令和配置發送到在受管系統上運行的Salt minion安全
salt minion: 管理系統,該系統運行Salt minion,從Salt master接收命令和配置。服務器
執行模塊 : 從命令行對一個或多個受管系統執行的命令,用途以下1.實時監控,狀態和詳細信息。2.一次性命令和腳本。3.部署、critical、更新。
網絡
state.sls : 系統配置的聲明性或命令式表達。session
Grains : 系統變量,Grains是有關地產受管系統的靜態信息,包括操做系統,內存和許多其餘系統屬性。你還能夠爲任何系統定義自定義grains。ssh
pillars : 用戶定義的變量。這些安全變量被定義並存儲在Salt Master中,而後使用Master 分配給一個或多個Minions,pillars存儲的數據例如端口、文件路徑、配置參數和密碼之類的指。異步
top file : 將Master state.sls 和 Salt Pillar數據發送給Salt minion。
加密
Runners : 在Salt master 上執行的模塊,用於執行支持任務。Salt Runners 報告做業狀態,鏈接狀態,從外部api讀取數據,查詢鏈接的Salt minions等。
Returners : 將Salt minions 返回的數據發送到另外一個系統,例如數據庫。Salt returners can run on the Salt minion or on the Salt master.
Reactor : 在 SaltStack環境中發生事件時出發反應。
Salt Cloud/Salt Virt : 在雲或虛擬機管理程序上提供系統,並當即對其進行管理。
Salt SSH : 在沒有Salt minion的系統上經過ssh運行Salt 命令。
Salt 使用服務器代理通訊模型。(還提供經過ssh運行無代理的能力。)
Salt Master負責向Salt minions 發送命令,而後聚合並顯示這些命令的結果。
Salt使用發佈-訂閱模式與受管系統進行通訊。鏈接由Salt Minion發起,這意味着受控端不須要監聽端口(從而減小攻擊)。Salt Master使用的端口爲4505 和4506,必須打開它們才能接受傳入鏈接。
4505:全部Salt Minion創建與發佈者端口的持久鏈接,並監聽消息。命令經過此端口異步發送到全部鏈接,這使命令能夠同時在大量系統上執行。
4506:Salt Minion根據須要,鏈接到服務器,將結果發送到Salt Master,並安全地請求文件和minion 特定的數據值(salt pillar)。Salt Minion 和Salt Master之間的鏈接時非異步的。
當minion 第一次啓動時,它會在網絡中搜索一個名爲salt的服務器(該配置在/etc/salt/minion能夠配置爲ip或其餘主機名)找到後,minion啓動握手,而後將其公鑰發送給Salt master。
在初始鏈接以後,Salt minion的公鑰存儲在服務器上,而且必須使用salt-key命令(或經過修改配置文件進行自動認證)在Salt master上接受它。這多是新用戶混淆的根源,由於在接受Salt minion的公鑰以前,Salt 不會提供解碼消息所需的安全密鑰(意味着Salt minion在接受認證以前不會運行任何命令)。
接受minion 密鑰後Salt master將返回其公鑰以及用於加密和解密Salt master發送的消息的旋轉AES密鑰。返回的AES密鑰使用最初由Salt minion發送的公鑰加密,所以只能由Salt minion解密。
Salt master和Salt minion以前的全部進一步通訊都使用AES密鑰加密。AES加密密鑰根據最新接受的TLS版本使用顯示初始化向量和CBC塊鏈接算法。
旋轉AES密鑰用於加密由Salt主服務器發送到Salt minion的做業,並加密與Salt主文件服務器的鏈接。每次Salt 主服務器從新啓動時以及每次使用salt-key命令刪除Salt minion密鑰時,都會生成並使用新密鑰。
旋轉密鑰後,全部的salt minions 必須從新進行身份驗證才能接收更新的密鑰。這使AES key 能夠在不中斷minion鏈接的狀況下旋轉。
Salt master 和 Salt minion之間的發佈通訊使用旋轉AES密鑰進行加密。Salt master和Salt minion之間的直接通訊使用每一個會話的惟一AES密鑰進行加密。
For example, published jobs are encrypted using the rotating AES key, while secure, minion-specific data sent using Salt pillar is encrypted with a unique AES key for each Salt minion and session.
在向minions發送命令以前,Salt會對發佈者ACL執行一些內部檢查,以確保執行該命令的用戶具備正確的權限。若是用戶被受權對指定目標進行指定命令,這發送該命令。若是不是,則返回錯誤。Salt還返回預期相應命令行界面的minions列表,所以他知道等待返回的時間。