saltstack安裝部署
1、saltstack簡介
1.簡單介紹
saltstack是基於python開發的一套C/S架構配置管理工具,它的底層使用ZeroMQ消息隊列pub/sub方式通訊,使用SSL證書籤發的方式進行認證管理。ZeroMQ使SaltStack能快速在成千上萬臺機器上進行各類操做,並且採用RSA Key方式確認身份,傳輸採用AES加密,使傳輸的安全性獲得保障。
saltstack是基於C/S架構的服務模式,服務器端叫作Master,客戶端叫做Minion,而且有消息隊列中的發佈與訂閱(pub/sub)服務模式,minion與master之間經過ZeroMQ消息隊列通訊。Master和Minion端都以守護進程的模式運行,一直監聽配置文件裏面定義的ret_port也就是4506端口(接收minion請求)和publish_port也就是4505端口(ZMQ的發佈消息)。當minion運行時會自動鏈接到配置文件裏面定義的Master地址ret_port端口進行鏈接認證。node
2.通訊模型
Salt使用發佈 - 訂閱模式與受管系統進行通訊。 鏈接由Salt minion發起,這意味着你不須要在這些系統上打開任何傳入端口(從而減小攻擊向量)。 Salt master使用端口4505和4506,必須打開端口才能接收訪問鏈接。
python
Publisher (端口4505)全部Salt minions都須要創建一個持續鏈接到他們收聽消息的發佈者端口。 命令是經過此端口異步發送給全部鏈接,這使命令能夠在大量系統上同時執行。正則表達式
Request Server (端口4506)Salt minions根據須要鏈接到請求服務器,將結果發送給Salt master,並安全地獲取請求的文件或與特定minion相關的數據值(稱爲Salt pillar)。 鏈接到這個端口的鏈接在Salt master和Salt minion之間是1:1(不是異步)。數據庫
3.Salt minion認證
當minion第一次啓動時,它會在網絡中搜索一個名爲salt的系統(儘管這能夠很容易地更改成IP或不一樣的主機名)。 當發現時,minion發起握手,而後將公鑰發送給Salt master。
在初始鏈接以後,Salt minions的公鑰存儲在服務器上,而且必須使用salt-key命令(或經過某種自動機制)在Salt master上接受。 這多是讓新用戶混淆的緣由,由於Salt不會提供解密消息所需的安全密鑰,直到Salt minions的公鑰被接受(這意味着Salt minions在被接受其密鑰以前不會運行任何命令)。
在minion密鑰被接受後,Salt主機會返回其公鑰以及旋轉的AES密鑰,該密鑰用於加密和解密由Salt master發送的消息。 返回的AES密鑰使用Salt minion最初發送的公鑰進行加密,所以只能由該Salt minion解密。json
2、saltstack安裝
1.下載yum源
wget -P /etc/yum.repos.d https://mirrors.aliyun.com/saltstack/yum/redhat/7.2/x86_64/saltstack-rhel7.repo安全
2.在master端安裝
yum -y install salt-master
服務器
3.在minion端安裝
yum -y install salt-minion
網絡
3、saltstack的配置
master端 在 /etc/salt/master下添加 master: 192.168.1.3 user: root service salt-master start 啓動 minion端 在/etc/saltminion下添加 #這裏要指向salt-master服務器,能夠是IP,也能夠是域名,也能夠是主機名,不過主機名就要寫/etc/hosts了,若是用的是內部DNS服務器的話能夠用主機名或者域名的形式。 master: 192.168.1.3 user: root id: agent1 service salt-minion start
注意Salt master的管理命令須要系統root權限才能執行,須要在執行命令時使用sudo或直接切換爲root用戶。
查看全部的密鑰架構
[root@localhost]# sudo salt-key --list-all # salt-key -L Accepted Keys: agent1 Denied Keys: Unaccepted Keys: Rejected Keys:
接受一個指定密鑰
salt-key --accept=<key>
app
接受全部密鑰
salt-key --accept-all
測試
[root@localhost]# sudo salt '*' test.ping agent1: True 注: master 祕鑰對默認存儲在/etc/salt/pki/master/master.pub /etc/salt/pki/master/master.pem master 端認證的公鑰存儲在:/etc/salt/pki/master/minions/ minion 祕鑰對默認存儲在/etc/salt/pki/minion/minion.pub /etc/salt/pki/minion/minion.pem minion 存放的master公鑰/etc/salt/pki/minion/minion_master.pub minion_id 默認存儲在/etc/salt/minion_id #?
salt命令詳解
salt "*" sys.list_modules # 查看全部模塊 # salt -h Usage: salt [options] '<target>' <function> [arguments] Options(選項): --version : 查看saltstack軟件的版本號。 --versions-report : 查看saltstack軟件以及依賴包的版本號。 -h, --help : 查看幫助信息。 --saltfile=SALTFILE:指定saltfile的路徑。 若是沒有經過,將在當前工做目錄中搜索一個。 -c CONFIG_DIR, --config-dir=CONFIG_DIR:指定配置文件的目錄(默認是/etc/salt/)。 -t TIMEOUT, --timeout=TIMEOUT:指定超時時間默認是5秒。 --hard-crash:捕捉到original異常不退出默認關閉。 -s, --static:以組的形式返回全部minion的數據。 -p, --progress:顯示進度圖,須要progressbar的python包。 --failhard :在第一個執行錯誤返回以後中止批處理。 --async : 異步執行。 --subset=SUBSET : 對目標minions的隨機子集執行程序. minions在執行前會先驗證是否存在該命名的函數,再去執行 -v, --verbose : 打開命令詳細,顯示jid和活動的工做查詢 --hide-timeout : 隱藏超時時間。 --show-jid : 顯示任務的jid。 -b BATCH, --batch=BATCH, --batch-size=BATC : 按照百分比執行任務。 -a EAUTH, --auth=EAUTH, --eauth=EAUTH, --external-auth=EAUTH : 指定外部認證方式。 -T, --make-token : 生成master token. --return=RETURNER : 設置一種替代方法。 默認狀況下,salt將從命令將返回數據發送回主服務器,但返回數據能夠重定向到任意數量的系統,數據庫或應用程序。 --return_config=RETURNER_CONF : 指定命令返回的設置文件。 -d, --doc, --documentation : 查看指定模式或全部模塊文檔。 --args-separator=ARGS_SEPARATOR : 指定發送命令跟命令參數的分隔符,當用戶想把一個命令看成參數發送給另外一個命令執行時。 --summary : 顯示彙總信息。 --username=USERNAME : 指定外部認證的用戶名。 --password=PASSWORD : 指定外部認證的密碼。 --metadata=METADATA : 將元數據傳遞給Salt,用於搜索做業。 Logging Options(日誌相關參數): -l LOG_LEVEL, --log-level=LOG_LEVEL : 指定日誌級別。 --log-file=LOG_FILE : 指定日誌記錄文件 --log-file-level=LOG_LEVEL_LOGFILE : 日誌文件日誌記錄級別。'all', 'garbage', 'trace', 'debug', 'info', 'warning', 'error','critical', 'quiet'. 默認: 'warning'. Target Options(目標選擇選項): -E, --pcre : 正則匹配 -L, --list: 列表匹配,目標表達式將被解釋爲以逗號分隔的列表。 -G, --grain: grains匹配。 --grain-pcre :grains加正則匹配。 -N, --nodegroup:組匹配。 -R, --range:範圍匹配。 -C, --compound : 綜合匹配(指定多個匹配,空格隔開)。 -I, --pillar : pillar值匹配。 -J, --pillar-pcre : pillar加正則匹配。 -S, --ipcidr : minions網段地址匹配。 Output Options(輸出參數): --out=OUTPUT, --output=OUTPUT : 使用指定的輸出器從'salt'命令打印輸出。 內置的是 'key', 'yaml', 'overstatestage', 'newline_values_only', 'pprint', 'txt', 'raw', 'virt_query', 'compact', 'json', 'highstate', 'nested', 'quiet', 'no_return'. --out-indent=OUTPUT_INDENT, --output-indent=OUTPUT_INDENT : 在空格中打印由提供的值縮進的輸出。 負值禁用縮進。 僅適用於支持縮進的輸出器。 --out-file=OUTPUT_FILE, --output-file=OUTPUT_FILE : 輸出到指定文件。 --out-file-append, --output-file-append : 輸出附加到指定的文件。 --no-color, --no-colour : 關閉全部的顏色顯示。 --force-color, --force-colour : 強制輸出顏色顯示。 --state-output=STATE_OUTPUT, --state_output=STATE_OUTPUT : 覆蓋配置的state_output值輸出,指定state格式(full, terse, mixed, changes or filter)輸出,默認值是full。 salt-key命令詳解 # salt-key -h Actions: -l ARG, --list=ARG:顯示指定狀態的key(支持正則表達式) -L, --list-all :列出全部公鑰。"--list all"已經棄用。 -a ACCEPT, --accept=ACCEPT: 接受指定的公鑰(除了掛起的密鑰以外,使用--include-all匹配拒絕的密鑰),支持正則表達式。 -A, --accept-all :接收全部等待認證的key。 -r REJECT, --reject=REJECT :拒絕指定等待認證的key(支持正則表達式) -R, --reject-all:拒絕全部等待認證的key。 --include-all: 顯示全部狀態的key。 -p PRINT, --print=PRINT :打印指定的公鑰支持正則表達式。 -P, --print-all:打印全部的公鑰。 -d DELETE, --delete=DELET:刪除指定的key。 -D, --delete-all:刪除全部的key。 -F, --finger-all:顯示全部key的指紋信息。
查找模塊 salt '*' -d|grep ":" |grep disk 查找某個模塊擁有的方法 salt 'agent1' sys.list_functions test