SaltStack - Salt 代理服务器

路由器、网络设备等许多设备都具有自定义操作系统、内存有限且安全性要求高。在这些设备中,我们无法安装标准 salt-minion,因此无法管理这些系统。但是,Salt 提供了一种创新技术来克服这一限制。

Salt 有一个单独的模块,即 salt proxy minion,它使用在远程系统中运行的 REST 服务来控制远程系统。此 REST 服务是基于 HTTP 的 Web 服务,使用 表述性状态转移 (REST) 概念编写,它们既易于实现又易于使用。

每个设备都有自己的 SDK 和开发环境来编写复杂的应用程序。Salt 期望根据 Salt 接口规范在设备中开发 REST 服务。Salt 还提供了一个 Python 模块来编写 REST Web 服务。如果设备支持 python,那么开发 REST web 服务将很容易。

一旦 REST web 服务在远程系统中开发和部署,就可以配置 Salt 以使用 REST web 服务而不是 salt minion 来控制远程设备。

工作示例

让我们使用实时工作环境来学习 salt proxy minion 的概念。对于实时环境,我们为主服务器和代理服务器选择了 Linux 系统。我们将使用 REST web 服务而不是 salt-minion 来控制系统。

安装和配置 REST Web 服务

Salt 提供了 REST web 服务实现的示例,在其 contrib 模块中名为 proxyminion_rest_example。让我们安装示例 web 服务。

  • 使用 pip 安装'bottle'bottle 命令是一个用于开发 Web 应用程序的 Python Web 框架。

pip install bottle = 0.12.8
  • 从 github 下载 saltstack/salt-contrib 项目。否则,使用以下命令克隆项目。

git clone https://github.com/saltstack/salt-contrib
  • 打开终端并转到 salt-contrib 目录。

  • 此 salt-contrib 目录将有一个文件夹 proxyminion_rest_example。此文件夹包含 REST Web 服务的示例实现。转到 proxyminion_rest_example 文件夹。

  • 运行以下命令启动 REST Web 服务。

python rest.py --address <your ip address> --port 8000
  • 打开浏览器并加载 http://«your ip address»:8000。这将显示包含服务和包的默认页面,如下面的屏幕截图所示。

REST Web Service

现在,我们已经配置了 REST Web 服务,它将检查如何配置 salt 代理来查询 REST Web 服务并控制系统。

配置 Salt-Proxy

要配置 Salt-Proxy,我们必须遵循以下步骤。

  • 我们必须为 salt-proxy 指定主节点。编辑代理配置文件位置,位于 /etc/salt /proxy 中,然后输入以下代码。

master: <your ip address>
  • /srv/pillar/top.sls 中修改/创建基础支柱文件,如以下代码块所示。

base:
  'p8000':
      - p8000
  • /srv/pillar 中添加一个新的 pillar 文件 p8000.sls,如下面的代码块所示。

proxy:
   proxytype: rest_sample
   url: http://<your ip address>:8000
  • 使用以下命令在调试模式下启动 salt-proxy。

salt-proxy --proxyid = p8000 -l debug
  • 与 salt-minion 类似,接受 salt-proxy 密钥,如下所示。

salt-key -y -a p8000

The following keys are going to be accepted:
Unaccepted Keys:
p8000
Key for minion p8000 accepted.

运行 Salt

现在,运行 salt 命令并调用 ping.test 函数,如下所示。

salt p8000 test.ping

我们可以使用 salt 运行 REST Web 服务支持的任何函数,这类似于 salt-minion

例如,可以使用以下命令获取粒度信息。

salt p8000 grains.items