1. 程式人生 > >Saltstack 自動化運維工具詳細介紹

Saltstack 自動化運維工具詳細介紹

pre 地址 .tar.gz 好的 publish net 組織 初始 int

Saltstack 簡介


什麽是saltstack

? Saltstack是基於python開發的一套C/S架構配置管理工具

? 使用SSL證書簽方的方式進行認證管理

? 底層使用ZeroMQ消息隊列pub/sub方式通信

– 號稱世界上最快的消息隊列ZeroMQ能快速在成千上萬臺主機上進行各種操作

– 采用RSA Key方式確認身


主要功能

? Saltstack最主要的兩個功能是:配置管理與遠程執行

? Saltstack不只是一個配置管理工具,還是一個雲計算與數據中心架構編排的利器

? Saltstack已經支持Docker相關模塊

? 在友好地支持各大雲平臺之後,配合Saltstack的Mine實時發現功能可以實現各種雲平臺業務的自動擴展


Saltstack架構

? Saltstack基於C/S架構

– 服務器端稱作Master

– 客戶端稱作Minion

? 可以實現傳統處理方式,即:客戶端發送請求給服務器,服務器收到請求後處理請求,再將結果返回

? 也可以使用消息隊列中的發布與訂閱(pub/sub)服務模式

技術分享圖片



Saltstack工作機制

? Master和Minion都以守護進程的方式運行

? Master監聽配置文件裏定義的ret_port(接收minion請求),和publish_port(發布消息)的端口

? 當Minion運行時,它會自動連接到配置文件裏定義的Master地址ret_port端口進行連接認證

? 當Master和Minion可以正常通信後,就可以進行各種各樣的配置管理工作了




Saltstack安裝


依賴:

1. python2.6 ~ python3.0

2. ZeroMQ or RAET

3. mako(可選):一個可選的Salt States解析器

4. gcc(可選)


MacOS安裝方法:

1. brew install saltstack

2. sudo port install salt

3. sudo pip install salt


Ubuntu14.04安裝方法:

1. wget -O - https://repo.saltstack.com/apt/ubuntu/14.04/amd64/latest/SALTSTACK-GPG-KEY.pub

sudo apt-key add -

2. deb https://repo.saltstack.com/apt/ubuntu/14.04/amd64/latest trusty main

3. apt-get install salt-api salt-cloud salt-master salt-minion salt-ssh salt-syndic


Centos 和 redhat 安裝方法:

1. sudo pip install salt

2. sudo yum install salt-master salt-minion



Saltstack啟動

1 . 運行Master 節點

2. 修改Minion 節點配置,填入Master節點信息

3. 啟動Minion

4. Master節點添加Minion


本次使用一個案例來介紹 Saltstack

實驗拓撲圖:

技術分享圖片


服務器使用的操作系統是RHEL7


實驗要求:

為六臺主機配置IP 分別為

sm 192.168.4.10

web1 192.168.4.11

db1 192.168.4.12

web2 192.168.4.21

db2 192.168.4.22

cache 192.168.4.33


為了方便實驗 六臺主機全都關閉防火墻 禁用SELinux

配置yum源


實驗步驟:

安裝saltstack:

在主機sm上配置 安裝salt-master

// 安裝 salt-master

# yum -y install salt-master

// 啟動 Master

# systemctl start salt-master

# systemctl enable salt-master

//驗證服務

# netstat -pantu | grep ‘ :4505 | :4506’

tcp 0 0 0.0.0.0:4505 0.0.0.0:* LISTEN 12434/python

tcp 0 0 0.0.0.0:4506 0.0.0.0:* LISTEN 12440/python

// 修改/etc/hosts, 實現名稱解析

# echo '

> 192.168.4.10 sm

> 192.168.4.11 web1

> 192.168.4.12 db1

> 192.168.4.21 web2

> 192.168.4.22 db2

> 192.168.4.33 cache

> ' > /etc/hosts

// 將sm 的 /etc/hosts 文件同步共享給其他主機

# for i in 11 12 21 22 33

> do

> rsync -a /etc/hosts 192.168.4.${i}:/etc/ -e 'ssh'

> done


在其他主機 11 12 21 22 33上:

//安裝 salt-minion

# yum -y install salt-minion

//修改Minion配置文件,使其可以與Master通信

#sed -e"s/^#\(master:\).*/\1 sm/" -i /etc/salt/minion -e "s/^#\(id:\).*/\1${HOSTNAME}/" -i /etc/salt/minion

//啟動Minion

# systemctl start salt-minion.service

# systemctl status salt-minion.service


Master與Minion互信:

? Minion上線後先與Master端聯系,把自己的pubkey發過去

? Master接受Minion的公鑰後,互信建立完成

? 查看密鑰信息

[root@sm ~]# salt-key -L

Accepted Keys:

Denied Keys:

Unaccepted Keys:

cache

db1

db2

web1

web2

Rejected Keys:

? 密鑰管理

[root@sm ~]# salt-key -h

-L: 列出密鑰

-a: 接受一個密鑰

-A: 接受全部密鑰

-D: 刪除全部密鑰

... ...

? 接受密鑰,完成互信

[root@sm ~]# salt-key -A -y

The following keys are going to be accepted:

Unaccepted Keys:

cache

db1

db2

web1

web2

Key for minion cache accepted.

Key for minion db1 accepted.

Key for minion db2 accepted.

Key for minion web1 accepted.

Key for minion web2 accepted.


遠程執行命令:

salt命令使用方法如下

? salt [options] '<target>' <function> [arguments]

? target指的是在哪些Minion上執行,如果在全部Minion上運行,可以采用通配符 '*’

-L 列表

-E 正則

-N 分組

-S CIDR

? function一般采用python的 模塊.方法 樣式

? arguments是傳遞給方法的參數



批量管理主機

? 測試所有主機連通性

[root@sm ~]# salt '*' test.ping

web1:

True

web2:

True

db2:

True

db1:

True

cache:

True

? 在主機上執行任意命令 測試

[root@sm ~]# salt '*' cmd.run 'uptime'

db1:

01:41:05 up 5:22, 1 user, load average: 0.00, 0.01, 0.05

db2:

01:41:04 up 5:22, 1 user, load average: 0.00, 0.01, 0.05

web2:

01:41:04 up 5:22, 1 user, load average: 0.00, 0.01, 0.05

cache:

01:41:05 up 5:22, 1 user, load average: 0.00, 0.01, 0.05

web1:

01:41:04 up 5:22, 1 user, load average: 0.00, 0.01, 0.05


使用列表 -L

# salt -L ' db1,web2' cmd.run 'uptime'

web2:

01:50:15 up 5:31, 1 user, load average: 0.00, 0.01, 0.05

db1:

01:50:16 up 5:31, 1 user, load average: 0.00, 0.01, 0.05


使用正則表達式 -E

# salt -E "web\d" test.ping

web2:

True

web1:

True

使用分組 -N

定義分組

# vim /etc/salt/master

//1085 行

nodegroups:

test: 'L@db1,web2,cache'

other: 'E@db[0-9] or N@test'

使用分組

[root@sm ~]# salt -N 'test' test.ping

cache:

True

db1:

True

web2:

True

[root@sm ~]# salt -N 'other' test.ping

web2:

True

cache:

True

db2:

True

db1:

True


傳輸文件:


# vim /etc/salt/master

#file_roots:

# base:

# - /srv/salt //master 的默認根目錄


# mkdir /srv/salt //創建根目錄

# cp /etc/passwd /srv/salt/users //添加測試文件

# salt '*' cmd.run 'mkdir /test' //遠程主機創建目錄

cache:

db1:

db2:

web2:

web1:


# salt -E 'web\d' cp.get_file salt://users /test/user //實現傳輸文件

web2:

/test/user

web1:

/test/user


# salt '*' cmd.run 'ls /test' //查看傳輸效果

db1:

cache:

db2:

web2:

user

web1:

user


模塊及功能:


列出所有可用模塊

salt '隨便一臺主機名' sys.list_modules


查看模塊所有功能

salt '隨便一臺主機名' sys.list_functions 模塊名


查看模塊用法

salt '隨便一臺主機名' sys.doc 模塊名

salt '隨便一臺主機名' sys.doc 模塊名.方法



什麽是YAML:

? YAML:YAML Ain't Markup Language

? YAML的結構通過空格來展示

? 項目使用"-"來表示

? 鍵值對使用":"來表示

? Master和Minion的配置文件均采用YAML語法

? YAML使用一個固定的縮進風格表示數據層級結構關

? 一般每個縮進級別由兩個空格組成

? 註意不要使用tab

? 縮進是初學者容易出錯的地方之一

? YAML的鍵值對采用冒號分隔

? YAML鍵值對對應python的字典

? YAML表示形式

name: test

name:

test

? Python字典

{'name': 'test'}

? 字典可以嵌套

hosts:

name: test

? 字典表示形式為

{

'hosts': {

'name': 'test'

}

}


? 列表項使用一個短橫杠加一個空格

- test1

- test2

? 列表可以作為一個鍵值對的value

pkg-http:

- httpd

- php

? Python語法

{'pkg-http': ['httpd', 'php']}



Grains基礎:

? Grains是saltstack最重要的組件之一

? 存儲minion端的基本信息,這些信息一般都是靜態的,如CPU、內核、操作系統等

? Grains存儲在minion本地

? 管理員可以在minion端進行grains值的修改,如增加、刪除等


Grains基礎應用

? 獲取minion端所有grains信息

# salt '隨便一臺主機名' grains.items

? 通過grains.item獲取minion端的fqdn信息

# salt '隨便一臺主機名' grains.item fqdn


通過minion定義grains

 [root@web1 ~]# vim /etc/salt/minion
    grains:
       web:
         apache
    [root@web1 ~]# systemctl restart salt-minion.service
    
    [root@web2 ~]# vim  /etc/salt/minion
    grains:
       web:
         nginx
    [root@web2 ~]# systemctl restart salt-minion.service
    
    [root@sm ~]# salt '*' saltutil.sync_grains
    web1:
    db1:
    cache:
    web2:
    db2:
    [root@sm ~]# salt -G 'web:apache' test.ping
    web1:
        True
    [root@sm ~]# salt -G 'web:nginx' test.ping
    web2:
        True
    [root@sm ~]# salt 'web1' grains.item web
    web1:
        ----------
        web:
            apache
    [root@sm ~]# salt 'web2' grains.item web
    web2:
        ----------
        web:
            nginx



Pillar基礎

? Pillar也是saltstack最重要的組件之一

? 作用是定義與被控主機相關的任何數據,定義好的數

據可以被其他組件使用

? 存儲在master端,存放需要提供給minion的信息

? 常用於敏感信息,每個minion只能訪問master分配

給自己的pillar信息

? 用於經常動態變化的信息


配置pillar

? Pillar需要一個pillar_roots來維護pillar的配置

? 默認pillar_roots為/srv/pillar

? pillar_roots在Master配置文件中定義


[root@sm ~]# vim /etc/salt/master

pillar_roots:

base:

- /srv/pillar

[root@sm ~]# mkdir /srv/pillar

[root@sm ~]# systemctl restart salt-master


Pillar數據文件

? Pillar執行時需要一個名為top.sls的入口文件

? 通過top.sls文件作為入口,組織其它的pillar文件

? sls文件采用YAML格式

    [root@sm ~]# cd /srv/pillar
    [root@sm pillar]# vim top.sls
    base:                                # 與pillar_roots定義一致
      'L@web1,web2':          # 過濾目標
        - appweb                    # 用於包含 appweb
      'E@db\d':
        - appdb
        - user
      'cache':
        - user

    [root@sm pillar]# vim appweb.sls
    appname: web
    software:
      - apache
      - nginx
    [root@sm pillar]# vim appdb.sls 
    appname: mysql
    
    [root@sm pillar]# vim user.sls 
    users:
      zhang3: 1000
      li4: 1001

// 獲取pillar全部數據
    [root@sm pillar]# salt '*' pillar.items
    web1:
        ----------
        appname:
            web
        software:
            - apache
            - nginx
    cache:
        ----------
        users:
            ----------
            li4:
                1001
            zhang3:
                1000
    web2:
        ----------
        appname:
            web
        software:
            - apache
            - nginx
    db2:
        ----------
        appname:
            mysql
        users:
            ----------
            li4:
                1001
            zhang3:
                1000
    db1:
        ----------
        appname:
            mysql
        users:
            ----------
            li4:
                1001
            zhang3:
                1000
// 將pillar數據同步至minion
    [root@sm pillar]# salt '*' saltutil.refresh_pillar
    db2:
        True
    db1:
        True
    web2:
        True
    cache:
        True
    web1:
        True
    // 根據pillar值匹配minion    
    [root@sm pillar]# salt 'web1' pillar.item software
    web1:
        ----------
        software:
            - apache
            - nginx


Jinja模板:


Jinja基礎

? Jinja是基於Python的模板引擎

? 在saltstack中我們使用yaml_jinja渲染器來根據模板生產對應的配置文件

? 對於不同的操作系統或者不同的情況,通過jinja可以讓配置文件或者操作形成一種模板的編寫方式


Jinja使用步驟

? 在state文件中使用"- template: jinja"聲明

? 在模板文件中使用變量"{{ name }}"聲明,name為變量,自己定義

? 在state文件中使用"- defautls: name: value"聲明



States基礎:

? States是satlstack中的配置語言

? 安裝軟件包、管理配置文件都需要編寫一些statessls文件

? states sls使用YAML語法


查看所有states模塊

salt '隨便一臺主機' sys.list_state_modules


查看states某個模塊功能

salt '隨便一臺主機' sys.list_state_functions 模塊名


查看states某個模塊的某個方法用法

salt '隨便一臺主機' sys.state_doc 模塊名.方法



為不同的環境設置不同的文件目錄

[root@sm ~]# vim /etc/salt/master
file_roots:
    base:
      - /srv/base
    dev:
      - /srv/dev
    prod:
      - /srv/prod
[root@sm ~]# mkdir /srv/base /srv/dev /srv/prod
[root@sm ~]# ls /srv/
base  dev  prod
[root@sm ~]# systemctl restart salt-master.service
[root@sm ~]# cd /srv/base/

案例1 系統初始化

配置所有機器的DNS為 202.101.224.68

修改所有機器的yum 源為本機器網絡yum

修改history 能顯示命令執行時間

開啟路由轉發功能 net.ipv4.ip_forward=1

添加用戶zhangsan

為用戶zhuangsan 設置默認密碼 zhangsan

要求zhangsan 在第一次登錄是的時候修改密碼


[root@sm base]# vim top.sls 
base:
  '*':
    - init.dns
    - init.yum
    - init.adduser
    - init.history
    - init.ip_forward

[root@sm base]# mkdir init
[root@sm base]# cd init/

[root@sm init]# vim dns.sls 
add_dns:
  file.managed:
    - name: /etc/resolv.conf
    - source: salt://file/dns.conf
    - user: root
    - group: root
    - mode: 644
    - template: jinja
    - defaults:
        DNS_IP:  202.101.224.68

[root@sm init]# vim yum.sls 
create_yum:
  file.managed:
    - name: /etc/yum.repos.d/test.repo
    - source: salt://file/yum.repo
    - user: root
    - group: root
    - mode: 644

unless條件
? 當unless條件不滿足時,需要執行令
onlyif條件
? 當onlyif條件滿足時,需要執行令

[root@sm init]# vim adduser.sls 
useradd zhangsan:
  cmd.run:
    - unless: id zhangsan
echo '123456' | passwd --stdin zhangsan:
  cmd.run:
    - onlyif: id zhangsan
chage -d 0 zhangsan:
  cmd.run:
    - onlyif: id zhangsan

[root@sm init]# vim history.sls 
history:
  file.append:
    - name: /etc/profile
    - text:
      - export HISTTIMEFORMAT='%F %T'

[root@sm init]# cat ip_forward.sls 
alter_ip_forward:
  sysctl.present:
    - name: net.ipv4.ip_forward
    - value: 1

[root@sm init]# cat ip_forward.sls 
alter_ip_forward:
  sysctl.present:
    - name: net.ipv4.ip_forward
    - value: 1

[root@sm init]# mkdir file
[root@sm init]# cd file/

[root@sm file]# vim dns.conf 
nameserver {{DNS_IP}}
[root@sm file]# vim yum.repo 
[test]
name=test
baseurl=http://192.168.4.254/rhel7
gpgcheck=0

state.highstate會讀取所有環境的top.sls文件,並且執行top.sls文件內容裏面定義的sls文件,不在top.sls文件裏面記錄的sls則不會被執行;
state.sls也可以指定讀取哪個環境 使用 saltenv = 讀取環境
test = True 測試執行  不真正執行  
# salt '*' state.highstate saltenv=base test=True
# salt '*' state.highstate saltenv=base


案例2 部署httpd web 服務器

在實驗的 web1 web2 上自動安裝httpd軟件包

更改httpd監聽端口為8080

啟動httpd 服務


pkg模塊

? pkg模塊可以實現軟件包管理

? 管理的軟件包包括紅帽RPM包和Ubuntu的deb包等

? 主要的方法有:

– pkg.installed:安裝軟件包

– pkg.latest:保持軟件包為最新版本

– pkg.remove:卸載軟件包

– pkg.purge:下載軟件包,刪除配置文件


require條件

? 只有httpd安裝了才分發配置文件


service模塊

? 軟件部署完畢後,需要確保服務處於運行狀態,並且能夠實現開機自啟,這就用到了service模塊

– service.running:確保服務處於運行狀態

– service.enabled:開機自啟

– service.disabled:開機不啟動

– service.dead:確保服務處於未運行狀態


使用watch

? 服務如果能夠正常啟動,需要確保存在配置文件,設置如果配置文件存在,才啟動服務

[root@sm ~]# cd /srv/prod/
[root@sm prod]# vim top.sls 
prod:
  'E@web[0-9]':
    - install_httpd

[root@sm prod]# vim install_httpd.sls 
httpd_pkg_installed:
  pkg.installed:
    - name: httpd
alter_httpd:
  cmd.run:
    - name: sed -i '/Listen 80/s/80/8080/' /etc/httpd/conf/httpd.conf
    - unless: sed -n '/Listen 80$/p' /etc/httpd/conf/httpd.conf
    - require:
      - pkg: httpd_pkg_installed
running_httpd:
  service.running:
    - name: httpd
    - enable: true
    - restart: true
    - watch:
      - cmd: alter_httpd
# salt '*' state.highstate saltenv=prod test=True
# salt '*' state.highstate saltenv=prod


//這裏因為配置文件中只需要更改一行 我使用的是sed 更改

//也可以使用 file.managed 方法 將master的配置文件分發到客戶端


案例3 部署nginx 源碼包


[root@sm ~]# cd /srv/dev/
[root@sm dev]# vim top.sls
dev:
  'L@db1,db2':
    - nginx_install

[root@sm dev]# mkdir nginx_install
[root@sm dev]# cd nginx_install
[root@sm nginx_install]# vim init.sls
    include:
      - .initpkg
      - .install
      - .nginx_init
[root@sm nginx_install]# vim initpkg.sls
    init_pkg_install:
      pkg.installed:
        - names:
          - gcc
          - gcc-c++
          - make
          - autoconf
          - openssl-devel
          - pcre-devel
[root@sm nginx_install]# vim install.sls
    nginx_src_install:
      file.managed:
        - name: /usr/local/src/nginx-1.9.12.tar.gz
        - source: salt://nginx_install/files/nginx-1.9.12.tar.gz
        - user: root
        - group: root
        - mode: 644
      cmd.script:
        - source: salt://nginx_install/files/build.sh
        - cwd: /usr/local/src
        - user: root
        - unless: test -d /usr/local/nginx
        - require:
          - file: nginx_src_install
          - pkg:  init_pkg_install
[root@sm nginx_install]# vim nginx_init.sls 
    nginx_init:
      file.managed:
        - name: /usr/lib/systemd/system/nginx.service
        - source: salt://nginx_install/files/nginx.service
        - user: root
        - group: root
        - mode: 644
    
    nginx_service:
      service.running:
        - name: nginx
        - enable: true
        - restart: true
[root@sm nginx_install]# mkdir files
[root@sm nginx_install]# cd files 
[root@sm files ]# vim build.sh
    #!/bin/bash
    useradd -s /sbin/nologin nginx
    tar xzf nginx-1.9.12.tar.gz
    cd nginx-1.9.12
    ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
    make
    make install
[root@sm files ]# ls
    build.sh                      // 源碼安裝腳本
    nginx-1.9.12.tar.gz      // nginx 源碼包
    nginx.service                // nginx systemctl 系統啟動文件
[root@sm files ]# vim nginx.service
    [Unit]
    Description=nginx - high performance web server
    Documentation=http://nginx.org/en/docs/
    After=network.target remote-fs.target nss-lookup.target
    
    [Service]
    Type=forking
    PIDFile=/usr/local/nginx/logs/nginx.pid
    ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
    ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
    ExecReload=/usr/local/nginx/sbin/nginx -s reload
    ExecStop=/usr/local/nginx/sbin/nginx -s quit
    PrivateTmp=true
    
    [Install]
    WantedBy=multi-user.target
    
# salt '*' state.highstate saltenv=dev test=True
# salt '*' state.highstate saltenv=dev

擴展:

Saltstack Master 配置

Master主配置文件是/etc/salt/master,常用的配置選項與具體功能相關,所以,當應用到相關功能時再做調整,目前保持默認就好


通用配置項:

1. interface:監聽的IPv4地址

#interface: 0.0.0.0

2. IPv6:監聽的IPv6的地址

#ipv6: False

3. PUBLISH_PORT:與Minion通信的端口

#publish_port: 4505

4. MASTER_ID:當前Master節點的ID

5. USER:啟動Master服務的用戶

#user: root

6. MAX_OPEN_FILES:每一個連接到Master的Minion ,Master都會打開一個文件描述符,改選項定義打開的最大文件數。可能報錯:Too many open files

#max_open_files: 100000

7. WORKER_THREADS:最大工作線程數

#worker_threads: 5

8. RET_PORT:獲取Minion返回結果的端口

#ret_port: 4506

9. PIDFILE:Master進程的pid文件 比如要殺進程時可用

#pidfile: /var/run/salt-master.pid

10. ROOT_DIR:Master運行的根目錄

#root_dir: /

11.CONF_FILE:Master配置文件路徑

#conf_file: /etc/salt/master

12.PKI_DIR:pki驗證密鑰存放路徑

#pki_dir: /etc/salt/pki/master

13.MODULE_DIR:Salt模版搜索路徑

#module_dirs: <no default>

# - /var/cache/salt/minion/extmods

14.CACHEDIR:默認緩存路徑

#cachedir: /var/cache/salt/master

15.KEEP_JOBS:舊的任務信息保留多少個小時

#keep_jobs: 24

16.GATHER_JOB_TIMEOUT:Minion獲取任務超時時間

#gather_job_timeout: 10

17.TIMEOUT:Salt API,command執行的超時時間

#timeout: 5

18.OUTPUT_FILE:SaltStack command輸出文件 比如日誌

#output_file: None

19.CLI_SUMMARY:顯示客戶端的概要信息,目標的Minion數,返回的數目,沒返回的數目

#cli_summary: False

20.MAX_MINIONS:最大管理的Minions數

21.TRANSPORT:通信模塊

22.TRANSPORT:通信模塊的參數

23.MAX_EVENT_SIZE:最大的事件數

#max_event_size: 1048576


安全配置項:

1.OPEN_MODE:開發模式,如果設置為true,則任何minion都能連上Master,無需驗證 很危險

#open_mode: False

2.AUTO_ACCEPT:接聽所有客戶端的公鑰

#auto_accept: False

3.TOKEN_EXPIRE:Master新生成token的存活時間

#token_expire: 43200

4.AUTOSIGN_TIMEOUT:如果Minion的keyid出現在pki_dir/minion_autosign/keyid中,Master會自動接受該Minion的鏈接,這個配置項,定義這個自動接受的持續時間,超時的要重新驗證接受。

# autosign_timeout: 120

5.AUTOSIGN_FILE:自動接受Minion keyid存放文件 白名單

#autosign_file: /etc/salt/autosign.conf

6.AUTOREJECT_FILE:於AUTOSIGN_FILE相反 黑名單

#autoreject_file: /etc/salt/autoreject.conf

7.PUBLISHER_ACL:對指定Minion可執行指定的命令 白名單

#publisher_acl:

# larry:

# - test.ping

# - network.*

8.PUBLISHER_ACL_BLACKLIST: 與PUBLISHER_ACL相反 黑名單

#publisher_acl_blacklist:

# users:

# - root

# - '^(?!sudo_).*$' # all non sudo users

# modules:

# - cmd

9.EXTERNAL_AUTH:指定驗證方法

#external_auth:

# pam:

# fred:

# - test.*

10.FILE_RECV:允許minion向master發送文件 一個特別危險的配置項

#file_recv: False

11.FILE_RECV_MAX_SIZE:允許minion向master發送最大文件(MB)

#file_recv_max_size: 100

12.ROTATE_AES_KEY:輪換AES key

13.MASTER_SIGN_PUBKEY,

MASTER_SIGN_KEY_NAM,

MASTER_PUBKEY_SIGNATURE,

MASTER_USE_PUBKEY_SIGNATURE, 網絡通信簽名相關



Saltstack Minion 配置

通用配置項:

1.MASTER:master的hostname,可以是多個 ip也行 域名也行

#master:

2.MASTER_TYPE:str,一對一 ; failover,容錯的,這種情況下,master必須是多個,minion會逐個通信,func:動態生成的

# master_type: str

3.MAX_EVENT_SIZE:最多接受master推送過來的事件數目

#max_event_size: 1048576

4.MASTER_FAILBACK:回滾,如果設置為true,此時master_type必須是failover

#master_failback: False

5.MASTER_ALIVE_INTERVAL:心跳檢測

#master_alive_interval: 30

6.RANDOM_MASTER:如果master是多個,則選擇算法是否是隨機的

#random_master: False

7.MASTER_PORT:Master端口

#master_port: 4506

8.USER:SaltStack啟動用戶

#user: root

9.SUDO_USER:可以獲取sudo權限的用戶

#sudo_user: root

10.ID:Minion的ID,會出現的Master的連接Minion的列表中

#id:

11.MASTER_TRIES:重連Master的次數

#master_tries: 1

12.AUTH_TRIES:auth 重試次數

# auth_tries: 10

13.AUTH_TIMEOUT:auth超時

#auth_tries: 7

14.TCP_PUB_PORT:發布消息端口

#tcp_pub_port: 4510

15.TCP_PULL_PORT:獲取消息端口

#tcp_pull_port: 4511


安全配置項:

1. open_mode:可以用來清理master key,修改為true,重啟,修改為false,重啟 通過這些步驟來清理master key

#open_mode: False

2.MASTER_FINGER:master指紋,用來驗證master,在master上運行salt-key-F master獲取

#master_finger: ''

3.VERIFY_MASTER_PUBKEY_SIGN:是否驗證PUBKEY的簽名文件

4.MASTER_SIGN_KEY_NAME:簽名文件

5.ALWAYS_VERIFY_SIGNATURE:是否必須驗證


Saltstack 自動化運維工具詳細介紹