Saltstack中關於ID的那些故事

今兒個來說說關於ID設置這些事兒,以及碰到問題解決過程。希望對大家有用....


在前期主機名規劃當中,我們會根據業務特定設計出一套主機名識別方法。。

有一天,一臺測試機器安裝完畢,但在Saltstack認證key時,會發現master和minions對接時,發現minion傳過來的ID是localhost.localdomain,就奇怪了,這是爲什麼呢。?


默認主機操作系統安裝完畢,/etc/sysconfig/network配置文件的hostname是localhost.localdomain,當你在salt master和minion認證時(未顯示指定minion id情情況下),對端接受後,minion id一定是localhost.localdomain。。請看下面的認證過程


minion和master認證過程

1.minion在啓動時,會在/etc/salt/pki/minion下自動生成minion.pem和minion.pub,然後將minion.pub發送給master。

2.master在收到minion的public key,我們在通過salt-key -a允許minion key,這樣就會在master的/etc/salt/pki/master/minions下面存放以minion id命名的public key,此時認證通信已完成


上述認證過程不難發現,master是在收到minion傳過來的public key,然後以minion id爲其命名的。而有些的是localhost.localdomain,這是神馬原因呢。?


前期未在salt minion的配置文件中顯示指定minion id時,那將以默認值傳遞,那麼這個默認值是這麼得來的呢。?

在配置文件中有這麼一段話, if left commented the id will be the hostname as returned by the python call: socket.getfqdn(), 是通過socket.getfqdn()函數獲取而來。


那麼我們可以寫個小腳本來驗證fqdn

cat a.py
#!/usr/bin/python env
import socket
print socket.getfqdn(socket.gethostname())


驗證

[roo@test-01 ~]# python a.py 
localhost.localdomain

在執行腳本驗證時,發現FQDN不正確,這就需要重新配置Hostname  #重現場景


Hostname配置方法

1. /etc/sysconfig/network

NETWORK = XXXX 

配置完畢,重新network服務


2./etc/hosts,做映射

內網IP  HOST

hostname -f進行驗證fqdn,在執行a.py腳本驗證,在刪除緩存minion_id(爲什麼請看下面)


這裏又碰到個小問題,在未重新配置hostname而直接連接salt master,傳過去的key會是localhost.localdomain,這個時候你重新設置完hostname,從master上刪除localhost.localdomain這個ID,再認證永遠都是這個id,除非你強制指定id(minion端配置文件的ID項)。爲什麼呢.?  我們來看下minion啓動過程

wKioL1RQjXSAR9OdAAHVjf8O7CU808.jpg



第二行,他使用了cache的minion id, minion在啓動時會生成一個id文件,這個文件就在/etc/salt/minion_id,然後會加載進cache,每次重啓都會讀取這個,這就是爲什麼永遠是localhost.localdomian id的原因

文件內容爲

cat /etc/salt/minion_id

localhost.localdomain


上述解決辦法,刪除minion id文件

minion#  rm -f /etc/salt/minion_id

minion#  /etc/salt/minion restart


重新認證,即可解決問題~~


好啦。關於id這個,碰到的問題都在這。。

推薦:在連接master時配置好Hostname,並能解析FQDN,再進行salt master認證;希望對你有幫助




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章