Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

如何为 Junos OS 安装 Salt

您可以使用 Salt 版本 3001 (Sodium) 或更高版本来管理运行 Junos OS 的设备。Salt 主机可以通过 Salt 代理工作节点管理运行 Junos OS 的设备,该代理工作节点可以在 Salt 主机或单独的服务器上运行。每个托管设备必须有一个代理工作节点,每个代理工作节点大约需要 40 MB 到 100 MB 的 RAM。

一般安装过程如下:

  1. 在运行 Junos OS 的每台设备上:

    • 通过 SSH 启用 NETCONF。

    • 配置 Salt 用于连接到设备的用户帐户和身份验证方法。

  2. 在盐大师上:

    • 安装 Salt 及其依赖项。

    • 为每个托管设备定义代理配置。

    • 启动 salt-master 过程。

  3. 在每台 Junos 代理工作节点服务器上:

    • 安装 Junos PyEZ 和 jxmlease Python yamlordereddictloader 模块。

    • 如果服务器与 Salt Master 是分开的,请安装 Salt 及其依赖项。

    • 为每个受管设备启动 Junos 代理工作节点进程。

  4. 在 Salt 主服务器上,接受每个 Junos 代理工作节点的密钥。

  5. (选答)启用 Junos 系统日志引擎(适用于 Salt)。

以下部分提供了运行 Ubuntu 18.04 的服务器安装过程的每个部分的详细信息。如果您运行的是不同的作系统,请使用适合您的作系统的命令。建议使用 Python 3。

配置运行 Junos OS 的设备

Junos 代理工作节点使用 SSH 协议和标准 SSH 身份验证机制访问运行 Junos OS 的设备上的 NETCONF 服务器。要与运行 Junos OS 的设备建立 SSHv2 连接,必须确保满足以下要求:

  • 在将建立 NETCONF 会话的每台设备上都会启用通过 SSH 的 NETCONF 服务。

  • 客户端应用程序有一个用户帐户,可以登录到将在其中建立 NETCONF 会话的每台设备。

  • 客户端应用程序使用的登录帐户配置了 SSH 公钥/私钥对或基于文本的密码。

  • 客户端应用程序可以访问公钥/私钥或基于文本的密码。

如果您使用 SSH 密钥对运行 Junos OS 的设备进行身份验证,并且密钥尚不存在,请在代理工作节点服务器上为所需用户生成公钥和私钥 SSH 密钥对,并提供任何必需或所需的选项,例如:

要配置运行 Junos OS 的设备,请执行以下作:

  1. 配置 NETCONF-over-SSH 服务。
  2. 配置 Salt 用于连接到设备的用户帐户和身份验证方法。例如:
  3. 提交配置。
  4. 使用配置的用户名和身份验证方法从代理工作节点服务器登录设备,验证密码或 SSH 密钥是否有效。
  5. 对运行 Junos OS 的每台托管设备重复此过程。

有关在运行 Junos OS 的设备上启用 NETCONF 并满足建立 SSH 会话的要求的信息,请参阅 《NETCONF XML 管理协议开发人员指南》。

设置 Salt Master

Salt Master 是管理一个或多个节点或工作节点的主控制服务器。SaltStack 建议在专用管理服务器或虚拟机 (VM) 上安装 Salt Master。必须安装 Salt 3001 (Sodium) 或更高版本才能管理运行 Junos OS 的设备。

要安装和配置 Salt Master,请执行以下作:

  1. 在 Salt master 服务器上安装 Salt 依赖项和 Salt master。

    要安装 Salt Master,请手动安装平台的包和依赖项,或运行 Salt 引导脚本。

    例如,要使用 bootstrap 脚本为 Salt Master 安装 Python 3 软件包,请发出以下命令:

  2. 为您的环境自定义 Salt master 配置文件,该文件通常位于 /etc/salt/master
    注意:

    有关自定义 Salt 主配置文件的详细信息,请参阅 https://docs.saltproject.io/en/latest/ref/configuration/master.html

  3. 按照 Salt 主配置文件中的定义创建必要的目录结构。
  4. 通过为每个托管设备创建一个支柱文件来定义代理配置,该文件指定 proxytype: junos运行 Junos OS 的相应托管设备的主机名或 IP 地址,以及该设备的相应连接和身份验证参数。

    有关代理配置的详细信息,请参阅 salt.proxy.junos

    注意:

    有关在 Salt 中安全存储敏感数据的信息,请参阅 https://docs.saltproject.io/en/latest/topics/best_practices.html#storing-secure-data

  5. 创建支柱顶部文件,并为每个托管设备定义代理工作节点名称,并将其映射到包含该设备的代理配置的支柱文件。

    在以下示例中,标识为“router1”的 Junos 代理工作节点映射到 router1-proxy.sls 文件。

  6. 如果 salt-master 进程尚未运行,请启动该进程。
    注意:

    若要在调试模式下启动进程以进行故障排除,请使用 sudo salt-master -l debug

设置 Junos 代理工作节点服务器

您必须在将管理运行 Junos OS 的设备的代理工作节点服务器上安装以下软件:

  • Salt 软件

  • 瞻博网络的 Junos PyEZ

  • jxmleaseyamlordereddictloader Python 模块

Junos 代理工作节点使用 Junos PyEZ 库连接到设备的 NETCONF 服务器并执行管理任务。

注意:

如果在同一台服务器上运行 Salt master 和 Junos 代理工作节点,则本节中的工作节点主机名将与上一节中的 Salt 主主机名相同。

要在 Salt 主服务器或单独服务器上设置 Junos 代理工作节点,请执行以下作:

  1. 为 Salt 使用的相同 Python 版本安装 Python 包管理器。
  2. 在与 Salt 使用的 Python 版本相同的 Python 下安装 Junos PyEZ (junos-eznc)。

    有关特定于平台的要求、必备软件和安装说明,请参阅:

  3. 将和 jxmlease yamlordereddictloader Python 模块安装在与 Salt 使用的相同 Python 版本下。
  4. 如果代理工作节点服务器与 Salt 主服务器是分开的,请在服务器上安装 Salt 及其依赖项。

    要安装 Salt,请手动安装平台的软件包和依赖项,或运行 Salt 引导脚本。

    例如,要使用 bootstrap 脚本安装 Salt 的 Python 3 软件包,请发出以下命令:

  5. master/etc/salt/proxy 文件中配置 Salt Master 的主机名或 IP 地址的参数,即可让代理工作节点进程查找 Salt Master。

    如果 salt-master 和 proxy 工作节点进程在同一服务器上运行,则可以改为指定 localhost

  6. 为运行 Junos OS 的每台设备启动 Junos 代理工作节点进程,并包括 -d 将其作为守护程序运行的选项。

    代理 ID 应与 Salt 主服务器上的支柱顶部文件中定义的代理 ID 相同。

    注意:

    如果在启动代理进程时遇到 AttributeError: 'module' object has no attribute 'SSL_ST_INIT' 错误,则可能需要更新平台上的 OpenSSL 软件包。

    注意:

    若要在调试模式下启动进程以进行故障排除,请使用 sudo salt-proxy --proxyid=router1 -l debug

代理工作节点连接到 Salt 主节点并发送其公钥。Salt Master 必须先接受密钥,然后 Salt Master 和代理工作节点才能通信。

授权 Salt Master 上的代理工作节点密钥

Salt 使用公钥通过 Salt 主进程进行身份验证。默认情况下,Salt Master 不会授权任何工作节点或代理工作节点密钥。您必须先接受密钥,然后才能管理相应的设备。

您可以手动接受密钥,如本节所述。或者,如果您知道传入密钥不会构成安全威胁(例如,如果 salt-master 和 salt-proxy 进程在同一台服务器上运行),则可以在 Salt master 配置文件中包含 auto_accept: True 以下选项以自动接受所有传入密钥。出于安全考虑,默认情况下禁用此选项。

要列出并接受挂起的密钥,请执行以下作:

  1. 查看代理工作节点的公钥状态。
  2. 接受每个 Junos 代理工作节点的密钥。
    提示:

    -A使用选项接受所有挂起的密钥,例如 sudo salt-key -A

验证与受管设备的连接

接受 Salt 主节点上的密钥后,调用 test.ping 执行函数通过消息总线对代理工作节点执行 ping 命令,并验证工作节点是否已启动并正在通信。您可以指定目标工作节点,也可以用于 '*' ping 所有工作节点。

以下示例对运行与 Junos 代理工作节点路由器 1 关联的 Junos OS 设备执行 ping 命令。

以下示例 ping salt master 管理的所有工作节点:

以下示例使用该 junos.cli 函数在运行 Junos OS 的指定设备上发出 show version 命令:

注意:

如果遇到以下错误 'junos' __virtual__ returned False: The junos or dependent module could not be loaded: junos-eznc or jxmlease or yamlordereddictloader or proxy could not be loaded,则 Junos 代理工作节点服务器可能未安装 Junos PyEZ 或 jxmleaseyamlordereddictloader 模块,或者 Junos 代理工作节点进程可能未运行或无法通过设备进行身份验证。

(选答)配置 Junos 系统日志引擎

Junos 系统日志引擎(用于 Salt)可用于对运行 Junos OS 的设备进行基于事件的状态管理。启用 Junos 系统日志引擎时,它会侦听系统日志事件,提取事件信息,将其转换为 Salt 格式,并在 Salt 事件总线上发布。要启用 Junos 系统日志引擎,必须在 Salt 主机上配置 Junos 系统日志引擎,并且还必须将运行 Junos OS 的设备配置为将系统日志事件发送到 Salt 服务器上配置的端口。

注意:

Junos 系统日志引擎也可以在代理工作节点服务器上运行。

要在 Salt 主机上启用 Junos syslog 引擎,请执行以下作:

  1. 为 Salt 使用的相同 Python 版本安装 Python 包管理器。
  2. 为 Salt 使用的相同 Python 版本安装 pyparsingtwisted Python 模块。
  3. 在 Salt 主配置文件的部分下 engines 配置 Junos 系统日志引擎,并配置引擎侦听事件的端口。
  4. (可选)配置 topic 参数以指定在事件发布到事件总线时,事件主题标题后面 jnpr/syslog/ 显示的字段。
  5. (可选)配置 daemon 参数以指示引擎仅订阅和发布由特定 Junos OS 进程生成的事件。
  6. 重新启动 Salt Master 进程以应用新配置。

要将运行 Junos OS 的设备配置为将系统日志事件发送到运行 Junos 系统日志引擎的主机:

  1. 配置运行 Junos 系统日志引擎的服务器的主机名或 IP 地址,并配置它侦听的端口。

  2. 配置要发送的事件类型。

    • 要发送所有事件,请配置 any any 为指示所有设施和所有消息严重性级别。

    • 要仅发送特定事件,请配置要捕获的事件的设施和消息严重性级别,例如:

  3. 提交配置。