我们想听听您的意见!帮助我们深入了解 Ansible 生态系统的现状。
参加 2024 年 Ansible 项目调查

使用 Ansible 和 Dynatrace 启用自我修复应用程序

使用 Ansible 和 Dynatrace 启用自我修复应用程序

当今 IT 环境的规模、复杂性和快速变化速度令人难以置信。对于 IT 组织来说,确保这些现代微服务环境的性能和可用性是一个持续的挑战。

促成这种变化速度的一个趋势是采用 IT 自动化来执行供应、配置管理和持续运营。 在本文中,我们想要重点介绍 IT 自动化带来的可重复性和一致性成果,并探讨将 Ansible 自动化扩展到应用程序监控平台 Dynatrace 时可能取得的成果。

今天的监控

考虑到当今 IT 环境的规模、复杂性和快速变化速度,传统应用程序性能和可用性监控方法通常是大多数运营团队的必要手段,也是他们常用的手段。应用程序性能监控 (APM) 平台用于检测可能影响客户体验的瓶颈和问题。

但是,仅靠监控并不总能帮助您保持应用程序的最佳性能。当检测到问题时,APM 平台旨在向操作员发出有关问题及其根本原因的警报。然后,运营团队可以商定纠正措施,并在受影响的系统上实施这些措施。

如果可以将常见或耗时的纠正措施自动化,会怎么样呢?

Dynatrace 自动化修复

Dynatrace APM 平台提供 AI 驱动的微服务环境及其底层基础设施的全栈性能监控。Dynatrace 能够洞悉您的 IT 操作,并通过自动基线检测环境中哪些区域不符合性能或错误率阈值。

Dynatrace 检测到影响真实用户的异常系统行为后,会创建一个问题警报,将具有相同根本原因的所有事件分组在一起。

演示应用程序触发了问题警报。Dynatrace 检测到响应时间下降,影响了 54 个真实用户和 300 多个服务调用

Dynatrace Problem Alert

Dynatrace 一旦在环境中检测到问题,就会向第三方系统发送问题通知,以告知其有关事件的信息。Dynatrace 允许用户与 Ansible Tower 集成作为通知系统,从而允许操作员从 Dynatrace 问题通知启动 Ansible Tower 作业模板。

Ansible Tower 现在已作为 Dynatrace 通知系统中的精选第三方集成提供

Ansible Tower integration with Dynatrace

这种集成还可以传输检测到的问题的上下文信息。这意味着 Ansible 作业模板可以利用这些额外的变量进行上下文感知、更细粒度的修复,例如执行预定义的剧本。 

指定 Ansible Tower 作业模板 URL、凭据和可选自定义消息。通知可以保存,并在 Dynatrace 在您的环境中检测到问题时立即触发

Ansible Tower job template

执行由发送到 Ansible Tower 的 Dynatrace 问题通知触发的作业模板

Dynatrace executes Ansible Tower job

请注意,额外的变量将与作业模板一起传递,旨在消除操作员提供此上下文信息的需要。

自我修复应用程序的实际应用

一旦您的 Ansible 作业模板到位并针对促进修复任务进行自定义,并且在 Dynatrace 中的集成设置完成,自我修复应用程序的工作流程如下所示

  • Dynatrace 监控您的环境,并在问题影响到真实用户时检测到问题
  • Dynatrace 向 Ansible Tower 发送问题通知
  • Ansible Tower 启动指定的作业模板以启动修复
  • 问题解决后,Dynatrace 会关闭问题

如您所见,Dynatrace - Ansible Tower 集成旨在简化 IT 管理自动化任务的设置。此外,将 Ansible Tower 集成到 Dynatrace 问题通知工作流程中,通过触发每次检测到问题时由 Ansible Tower 执行的预定义、可自动化的 Ansible 作业模板来实现自我修复应用程序。




Ansible Tower 的 API 入门

Ansible Tower 的 API 入门

欢迎来到入门系列的另一篇文章。API(应用程序编程接口),或者我更喜欢称之为自动化信息的神奇之地,可以以多种方式使用。在这篇入门文章中,我们将讨论 Red Hat Ansible Tower 的 API,以及如何使用它提取信息以用于您的剧本和其他工具。

这篇文章的想法来自 David Federlein 在开发一个新的 Ansible Tower 演示和演示时产生的。我将在文章中参考该代码库,您可以在整个过程中遵循该代码库。请注意,此演示使用 Vagrant 和 VirtualBox,因此如果您想自行创建演示,则需要安装这些应用程序。

Ansible Tower 的 API

Ansible Tower 的 API 是完全可浏览的。您可以在浏览器中键入以下内容以导航到实例的 REST API: http://<Tower server name>/api/v2。到达那里后,您可以单击任何列出的链接,查看在 Ansible Tower 中加载的特定属性的当前对象。您在 Ansible Tower 的 UI 中可以执行的所有操作都可以在 API 中执行;您还可以使用它查看从凭据到用户的各种内容。 正如我们将在下一节中介绍的,您可以手动发布到 API,或者通过剧本进行调用。

发布到 API

您可以通过多种不同的方式调用 API,但今天我们将重点介绍两种最基本的方式

  1. 从 Ansible Tower 的 REST API 接口手动操作
  2. 从剧本

我这里所说的“基本”是指这些方法仅通过 Ansible Tower 完成。如大多数人所知,您可以使用 Ansible Tower 中的信息与其他应用程序一起完成一些非常棒的事情。

我们不仅能够通过这些方法配置和修改 Ansible Tower,而且还能演示您可以通过 API 调用启动作业。这将允许您与企业基础设施的其他方面更紧密地集成,并在围绕这些资源和作业模板配置的基于角色的访问控制下运行 Red Hat Ansible Engine 工作负载的能力。

手动发布

首先,从 API 接口发布到 API 的最简单(尽管不是最快或最自动)的方法是。您可以在此处选择要发布到的对象。每个对象在页面底部都有一个模板,该模板显示发布中可能包含的字段。

例如,假设您想通过 API 将一个项目添加到您的 Ansible Tower 实例中。您只需导航到 Ansible Tower 的 API 屏幕 (https://<towerip>/api/v2),选择项目 URL (/api/v2/projects/),然后向下滚动到底部。在那里显示的内容将类似于以下内容

{
    "name": "",
    "description": "",
    "local_path": "",
    "scm_type": "",
    "scm_url": "",
    "scm_branch": "",
    "scm_clean": false,
    "scm_delete_on_update": false,
    "credential": null,
    "timeout": 0,
    "organization": null,
    "scm_update_on_launch": false,
    "scm_update_cache_timeout": 0
}

获得该内容后,使用来自环境的相关信息填充引号。将它粘贴到您的字段中后,点击 POST。如果发布成功,您可以在 Ansible Tower UI 和 API 中查看该项目。

如果失败,您将收到有关错误请求的通知。修复错误的方法将在其下方引号中显示。 例如,如果您正在创建用户,但没有为该用户输入密码,则它将失败并返回以下错误

{
    "password": [
        "This field may not be blank."
    ]
}

如果您在发布到 API 时遇到任何问题(例如上面的错误),可以在 UI 右上角的 GET 旁边的 OPTIONS 按钮为您提供很大帮助。OPTIONS 按钮描述了您希望发布到的特定对象或端点支持的 POST、PUT 和 PATCH 的可接受值。

修复了内容字段中发现的错误后,再次点击“发布”,并注意该对象现在已成功添加到 Ansible Tower 中。

通过剧本发布

发布到 Ansible Tower 的 API 的另一种方法是通过剧本。我在这篇文章开头链接的 GitHub 库在整个安装后剧本中都这样做了。在安装完成后,几乎所有操作都是通过 API 完成的。

为了查看它在实际中的运行方式,让我们同步您刚刚添加到实例中的那个项目。这需要您对 Ansible 剧本的构造有所了解。如果您需要帮助或想复习您的剧本知识,您可以访问我们的文档

启动作业同步的剧本利用了 Ansible 中的URI 模块。此模块用于与 Web 服务交互,例如 Ansible Tower API。此确切的剧本可以在我上面链接的代码库中找到,位于 /roles/tower/main.yml 中。

- name: kick off project sync
  uri:
    url:  https://127.0.0.1/api/v1/projects/7/update/
    method: POST
    user: admin
    password: "{{ towerpass }}"
    validate_certs: False
    status_code:
      - 200
      - 201
      - 202
  when: response.status == 201

在本剧本任务中,我们告诉 Ansible 导航到您项目的 API URL。在本例中,它是 https://127.0.0.1/api/v2/projects/7/update/。请注意,项目在更新之前有一个数字。项目在 Ansible Tower 中根据它们进入 Ansible Tower 的时间被分配一个数字。此数字只能通过导航到项目的 API 接口来找到 https://<your_ip_here>/api/v2/projects/。到达那里后,您需要找到您想要同步的项目,然后向该项目编号的更新端点发出 POST 请求。此示例对项目编号 7 进行更新。

找到要更新的正确项目后,您需要向更新端点发出 POST 请求。在本例中,由于我们正在更新项目 7,因此端点为 https://127.0.0.1/api/v1/projects/7/update/

为了使此 POST 请求与 URI 模块一起成功工作,您还需要将您用来登录 Tower 的 API 用户凭据传递给 API。在本例中,我们使用默认的管理员用户。您可以使用任何具有足够权限进行此类 POST 请求的用户。

启动作业

现在,标题可能看起来有点含糊。“杰克,在 Ansible Tower 中启动作业并不难。” 这是正确的,但是对于此示例,我们将从一个剧本任务中在 Ansible Tower 中启动一个作业,这又是您可以通过调用 API 来完成的另一件事。我将要提到的具体示例可以在 vagrant-common 角色(/roles/vagrant-common/main.yml)中找到。

现在,当你戴上眼镜后,我正在缩小的任务可以在下面的示例中找到。

name: kick off the provisioning job template
  shell:  "curl -f -H 'Content-Type: application/json' -XPOST --user
admin:{{ towerpass }}
https://172.16.2.42/api/v2/job_templates/8/launch/ --insecure"
  when: inventory_hostname == 'demovm4'

乍一看,您会看到正在使用的 shell 模块,它正在运行一个 curl 命令到一个特定的 https 端点。碰巧的是,这个 https 端点是用于启动特定作业模板的 API 端点。

该特定作业模板在 Ansible Tower 中被分配了一个编号。为了不必通过 API 挖掘以找到您的特定作业模板端点,一个快速简便的方法是导航到您想要通过 API 启动的作业模板。到达那里后,查看 URL,分配给它的数字将出现在那里。

找到正确的作业模板后,https 端点将类似于 api/v2/job_templates/8/launch/。使用 -XPOST 在 curl 命令中命中该端点,您应该就可以运行了。




Ansible 2.5 中的 Infoblox 集成

Ansible 2.5 中的 Infoblox 集成

Ansible 2.5 开源项目版本包含以下 Infoblox 网络身份操作系统 (NIOS) 启用功能

  • 五个模块
  • 一个查找插件(用于查询 Infoblox NIOS 对象)
  • 一个动态清单脚本

对于网络专业人员来说,这意味着现有的网络 Ansible 剧本可以利用现有的 Infoblox 基础设施进行 IP 地址管理 (IPAM),使用 Infoblox 来跟踪清单等等。有关 Infoblox 术语、文档和示例的更多信息,请参阅 Infoblox 网站

让我们详细说明这些 Ansible 2.5 新增功能中的每一个。所有以下示例(以及更多示例)都提供在网络自动化社区项目中,在 infoblox_ansible GitHub 存储库 下。Ansible 的集成要求控制节点(从那里执行 Ansible)安装了 infoblox-client。它可以 在这里找到,并通过发出 pip install infoblox-client 命令的 pip 安装。

Ansible Infoblox 模块

五个新模块 包含在 Ansible 2.5 中。它们目前可以在文档的开发分支中找到

以下是一个使用 nios_network 模块配置 IPv4 网络的示例剧本

---
- hosts: localhost
  connection: local
  tasks:
    - name: set dhcp options for a network
      nios_network:
        network: 192.168.100.0/24
        comment: sean put a comment here
        options:
          - name: domain-name
            value: ansible.com
        state: present
        provider: "{{nios_provider}}"

由于此剧本没有指定 network_view 参数,它将默认使用默认视图。要运行剧本,请使用 ansible-playbook 命令

SEANs-MacBook-Pro:infoblox_ansible sean$ ansible-playbook  configure_network.yml

PLAY [localhost] ***************************************************************************************

TASK [set dhcp options for a network] ***************************************************************
changed: [localhost]

PLAY RECAP ******************************************************************************************
localhost                  : ok=1    changed=1    unreachable=0    failed=0

我们可以登录到 Web https GUI 网站,并在**数据管理 -> IPAM** 下查看,在那里我们将看到列出的新网络

Ansible-Infoblox-Image-1

模块可以保持状态(在适用的情况下),因此当我们重新运行剧本时,它不会说**已更改**,而只会说**确定**,并且不会对 Infoblox 进行任何更改。这也被称为幂等性(在 Ansible 文档术语表 中提到)。

SEANs-MacBook-Pro:infoblox_ansible sean$ ansible-playbook  configure_network.yml

PLAY [localhost] ***************************************************************************************

TASK [set dhcp options for a network] ***************************************************************
ok: [localhost]

PLAY RECAP ******************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0

Ansible Infoblox 查找插件

接下来让我们看看 Infoblox 的 新的查找插件。Ansible 查找插件的文档可以在 这里找到。查找插件允许我们查询不同的 InfoBlox NIOS 对象,例如网络视图、DNS 视图、主机记录等等。在我的 Infoblox IPAM 选项卡(**数据管理 -> IPAM**)中,我有四个机架顶部叶片交换机和两个脊柱交换机定义。我可以在托管节点的列表视图中看到它们

Ansible-Infoblox-Image-2

让我们看看一个重点关注获取有关主机记录信息的 Ansible 剧本片段

 - name: fetch host leaf01
      set_fact:
        host: "{{ lookup('nios', 'record:host', filter={'name': 'leaf01'}, provider=nios_provider) }}"

我们将查找插件的结果(由上面的 nios 关键字指定)设置为变量 host。我们只需要 leaf01 的信息,因此我们将根据名称进行过滤。有关完整的剧本,请查看存储在 网络自动化社区 上的 get_host_record.yml。

使用 ansible-playbook 命令运行剧本

SEANs-MacBook-Pro:infoblox_ansible sean$ ansible-playbook get_host_record.yml

PLAY [localhost] ***************************************************************************************

TASK [fetch host leaf01] ******************************************************************************
ok: [localhost]

TASK [check the leaf01 return variable] *************************************************************
ok: [localhost] => {
<SNIPPET, REST OF OUTPUT REMOVED FOR BREVITY>
    "host": {
        "ipv4addrs": [
            {
                "configure_for_dhcp": false,
                "host": "leaf01",
                "ipv4addr": "192.168.1.11"
            }
        ],
    }
}

TASK [debug specific variable (ipv4 address)] ******************************************************
ok: [localhost] => {
    "host.ipv4addrs[0].ipv4addr": "192.168.1.11"
}

TASK [fetch host leaf02] ******************************************************************************
ok: [localhost]

TASK [check the leaf02 return variable] *************************************************************
ok: [localhost] => {
<SNIPPET, REST OF OUTPUT REMOVED FOR BREVITY>

    "host": {
        "ipv4addrs": [
            {
                "configure_for_dhcp": false,
                "host": "leaf02",
                "ipv4addr": "192.168.1.12"
            }
        ],
    }
}

PLAY RECAP ******************************************************************************************
localhost                  : ok=5    changed=0    unreachable=0    failed=0

上面的剧本向我们展示了如何查询 Infoblox 来获取有关 Infoblox 对象的特定信息(在本例中,是特定主机)。这些事实可以在 Ansible 剧本中使用,并允许 Infoblox 充当可能发生变化的信息的单一信息来源。虽然 Ansible 模块允许您配置 Infoblox,但查找插件允许您从 Infoblox 获取信息以在后续任务中使用。要了解有关 Ansible 变量、事实和 set_fact 模块的更多信息,请参阅 Ansible 变量文档

Ansible Infoblox 动态清单

Ansible 动态清单脚本允许从其他来源(如 Cobbler、AWS 或在本例中是 Infoblox NIOS)导入清单。您可以在 Ansible 动态清单 文档页面 上阅读有关动态清单的更多信息。

需要将两个文件放在 Ansible 项目中的 contrib/inventory/

使用您的 NIOS 实例登录信息更新 infoblox.yaml。这包括用户名、密码和 IP 地址或主机名。确保 infoblox.yaml 文件位于 /etc/ansible/infoblox.yaml 中。

要测试您的设置,可以通过在命令行上执行 python infoblox.py 来运行 Python 脚本 infoblox.py

[ec2-user@ip-172-16-103-218 infoblox]$ python infoblox.py
{
    " ": {
        "hosts": [
            "leaf01",
            "leaf02",
            "leaf03",
            "leaf04",
            "spine01",
            "spine02"
        ]
    },
<SNIPPET, REST OF OUTPUT REMOVED FOR BREVITY>

对于此剧本,我们将创建一个小的调试剧本,以打印出我们使用 infoblox Python 动态清单脚本获取的每个主机的 inventory_hostname。

---
- hosts: all
  gather_facts: false
  tasks:
    - name: list all hosts
      debug:
      var: inventory_hostname
      delegate_to: localhost

要获取剧本的清单,请使用 -i 参数并指定 infoblox.py Python 脚本。使用 ansible-playbook 命令运行剧本

[sean@rhel-7]$  ansible-playbook -i infoblox.py debug.yml

PLAY [all] ***********************************************************************************************

TASK [list all hosts] ************************************************************************************
ok: [leaf01 -> localhost] => {
    "inventory_hostname": "leaf01"
}
ok: [leaf03 -> localhost] => {
    "inventory_hostname": "leaf03"
}
ok: [leaf02 -> localhost] => {
    "inventory_hostname": "leaf02"
}
ok: [leaf04 -> localhost] => {
    "inventory_hostname": "leaf04"
}
ok: [spine01 -> localhost] => {
    "inventory_hostname": "spine01"
}
ok: [spine02 -> localhost] => {
    "inventory_hostname": "spine02"
}

PLAY RECAP ******************************************************************************************
leaf01                       : ok=1    changed=0    unreachable=0    failed=0
leaf02                       : ok=1    changed=0    unreachable=0    failed=0
leaf03                       : ok=1    changed=0    unreachable=0    failed=0
leaf04                       : ok=1    changed=0    unreachable=0    failed=0
spine01                    : ok=1    changed=0    unreachable=0    failed=0
spine02                    : ok=1    changed=0    unreachable=0    failed=0

更多信息

有关 Ansible 网络的更多信息,请查看 Ansible 网络微型网站。Infoblox NIOS 现在可以利用已经配置 Cisco IOS、NX-OS、IOS-XR、Juniper JunOS、Arista EOS 和 更多 的 Ansible 剧本。




Ansible Tower 中的 LDAP 身份验证入门

Ansible Tower 中的 LDAP 身份验证入门

入门系列的下一步是介绍如何配置 Red Hat Ansible Tower 以允许用户使用 LDAP 凭据登录。在这篇文章中,我们将解释一些故障排除技巧,以帮助缩小问题范围并纠正问题。只要您拥有 LDAP 树/森林的映射,本文档应该可以帮助用户使用他们的 LDAP 凭据登录。

配置设置

要将 Ansible Tower 配置为使用 LDAP 身份验证,请导航到“设置”(齿轮图标)并转到“配置 Tower”部分。这些配置设置中我们将重点关注的区域是“身份验证”,子类别应设置为“LDAP”。

Ansible-Getting-Started-Tower-LDAP-7

将成为主要关注点的字段是

  • LDAP 服务器 URI
  • 绑定 DN 和密码
  • 用户/组搜索

其他字段允许您细化您的 LDAP 搜索,以减少生产中使用的资源或映射您的组织。

LDAP URI 只是您的 LDAP 服务器的 IP 或主机名,前面加上协议 (ldap://)。

Ansible-Getting-Started-Tower-LDAP-8\

绑定 DN 将是一个用户凭据和密码(后跟组和域),具有读取 LDAP 结构的权限。

Ansible-Getting-Started-Tower-LDAP-1

细化用户搜索

Ansible Tower 能够连接到 LDAP 服务器后,细化用户搜索将完成配置。用户搜索条目将匹配由位置和范围指定的模式。在本例中,用户 ID 是 sAMAccountName 值(而不是 uid),因为搜索针对的是 Active Directory 树。

Ansible-Getting-Started-Tower-LDAP-4Ansible-Getting-Started-Tower-LDAP-2

用户和组搜索

用户和组搜索是可能需要进行最多故障排除的地方,具体取决于目录结构的复杂程度。使用 openldap 包中的 ldapsearch 工具来构建针对 LDAP 服务器的搜索。从基本搜索开始,逐步深入以细化搜索。

ldapsearch -x  -H ldap://10.10.10.254 -D "CN=jarvis,CN=Users,DC=shield,DC=team" -w 01Password! -b "cn=Users,dc=shield,dc=team"

此搜索是通用的,它将列出指定位置 (-b "cn=Users,dc=shield,dc=team") 中的结果,该位置与您用于针对服务器的 LDAP 搜索范围的位置匹配。

LDAP 要求组和 LDAP 拒绝组字段用于添加单个条目,以通过单个组缩小搜索范围。LDAP 用户 DN 模板字段将搜索范围缩小到您在字段中输入的格式。在配置页面中的 LDAP 用户搜索字段中使用

  • SCOPE_SUBTREE:递归搜索目录树
  • SCOPE_ONELEVEL:仅指定搜索树下一级
  • SCOPE_BASE:仅搜索基本 DN 中指定级别

使用 LDAP 搜索工具返回的结果来选择要搜索的值,例如:uid 或 sAMAccountName & group 或 groupOfNames。值得注意的是,LDAP 用户 DN 模板将优先于 LDAP 用户搜索,因此在设置时只使用其中一个。

Ansible-Getting-Started-Tower-LDAP-6

对于 Windows/AD 管理员

这些步骤为登录 LDAP 用户的 Ansible Tower 设置单点登录。针对与 LDAP 相连的主机进行身份验证的 Ansible Tower 配置将在凭据部分完成,并且相同的注意事项将适用于针对 Windows 主机的身份验证,这些注意事项适用于 Ansible。注意事项包括在主机上准备 WinRM 以 接受连接。在准备和运行针对 Active Directory 中 Windows 主机的作业之前,请确保已适当地设置凭据!

用户属性映射

最后,在测试 LDAP 身份验证时,重要的是要花一些时间来分配用户和组织映射。LDAP 用户属性映射是将 LDAP 属性映射到 Ansible Tower 属性的位置。示例包括名字、姓氏、电子邮件等。在本例中,电子邮件属性映射到所用 Active Directory 服务器中的 [userPrincipalName]。大多数 LDAP 布局的默认值为“mail”,但您需要了解您的结构才能进行相应的映射。

Ansible-Getting-Started-Tower-LDAP-5

LDAP 用户标志按组字段可用于快速缩小映射范围。例如,以下示例中,属于名为“secret”的 OU 的用户被映射到 Ansible Tower 中的超级用户组

Ansible-Getting-Started-Tower-LDAP-3

当映射到 Ansible Tower 中的团队和组织时,更复杂的映射将变得同样复杂。正在使用的示例具有一个组织,其组织管理员被定义为名为“secret”的 OU,该 OU 在用户标志按组中匹配。

{
 "Shield": {
  "admins": [
   "ou=secret,dc=shield,dc=team"
  ],
  "remove_admins": false,
  "remove_users": false,
  "users": true
 }
}

使用 LDAP 团队映射字段将用户分配给团队。以下示例中的简单 LDAP 数据库将两个组映射到同一组织内的两个相应团队。

{
 "secret": {
  "organization": "Shield",
  "users": "OU=secret,DC=shield,DC=team",
  "remove": false
 },
 "avengers": {
  "organization": "Shield",
  "users": "OU=avengers,DC=shield,DC=team",
  "remove": false
 }
}

将用户和组映射到 Ansible Tower 的难度将根据 LDAP 数据库布局而有所不同。使用 LDAP 搜索命令来细化您的组查询并相应地在 Ansible Tower 中匹配它们。

概括

  • 要对登录 Ansible Tower 的 LDAP 用户进行身份验证,请使用:LDAP 服务器 URI、绑定 DN & 密码以及用户和组搜索
  • 使用 LDAP 用户 DN 模板将覆盖用户搜索
  • 使用 LDAP 要求组和/或 LDAP 拒绝组来减少 Ansible Tower 搜索的组数
  • Ansible Tower 中的 LDAP 用户属性在 LDAP 用户属性映射中定义
  • 使用 LDAP 用户标志按组来设置 Ansible Tower 中的 LDAP 用户标志
  • LDAP 中的组分别映射到 LDAP 组织映射和 LDAP 团队映射中的组织或团队



在 Red Hat Ansible Tower 中添加代理支持

在 Red Hat Ansible Tower 中添加代理支持

开始使用代理支持

代理被实现到环境中的原因有很多。有些可以为安全性而设置,有些可以作为系统的负载均衡器。无论使用方式如何,如果您已设置代理,Red Hat Ansible Tower 可能需要使用它。有关我们在本文中将要执行的操作的更深入了解,您可以访问我们专门针对 Ansible Tower 中的代理支持的文档 这里

添加负载均衡器(反向代理)

在某些情况下,您可能在负载均衡器后面有 Ansible Tower,并且需要将该信息添加到您的实例中。Ansible Tower 中的会话在创建时会关联一个 IP 地址,并且 Ansible Tower 的策略要求会话的任何使用都必须与原始 IP 地址匹配。

要允许代理支持,您需要对 Ansible Tower 配置进行一些更改。以前,这将在 Ansible Tower 主机上找到的 settings.py 文件中完成,但从 3.2 开始,您现在可以在 UI 中进行这些更改。要进行这些编辑,您必须是实例的管理员,并导航到设置,然后导航到 Ansible Tower 配置。

进入 Ansible Tower 配置后,选择顶部的系统选项卡,该选项卡位于作业旁边。进入后,我们将对远程主机标头框进行编辑。其中已经有一些在安装后设置的文本。默认情况下,REMOTE_HOST_HEADERS 设置为 ['REMOTE_ADDR', 'REMOTE_HOST']

您将进行的编辑应反映以下行,其中包含您组织环境中的相关信息。

REMOTE_HOST_HEADERS = ['HTTP_X_FORWARDED_FOR', 'REMOTE_ADDR', 'REMOTE_HOST']

输入相关信息后,单击右下角的绿色保存按钮,您就可以完成了。

出站代理

设置 Ansible Tower 以利用出站代理既快捷又简单。当需要使用出站代理时,我们经常看到的一件事是项目同步失败(如果您不使用本地存储的剧本)。当 Ansible Tower 无法解析您用来管理版本化剧本(例如 github.com)的源代码管理 (SCM) 域时,会出现此错误。要解决此问题,您需要对 Ansible Tower 进行一些配置更改。为此,请导航到管理员设置(右上角的齿轮),然后从那里选择配置 Ansible Tower。

导航到位于页面顶部的作业选项卡。进入作业选项卡后,向下滚动,直到找到额外的环境变量。

您需要输入三行条目才能将代理添加到您的实例中。请注意,您需要知道服务器 URL 才能使这些更改发挥作用。

AWX_TASK_ENV['http_proxy'] = 'http://url:port/'

AWX_TASK_ENV['https_proxy'] = 'http://url:port/'

AWX_TASK_ENV['no_proxy'] = '127.0.0.1,localhost'

输入信息后,选择右下角的绿色保存按钮。

请注意,如果您从先前版本升级,您可能需要在使用 Ansible Tower 界面配置这些设置之前从配置文件中删除先前设置。

现在,您可以使用 Ansible Tower 的功能来进行自动化,同时允许它利用您的代理服务器、ELB 或您为您的环境设置的任何形式的过滤。实施它并不难,但确实需要您事先了解您特定的基础设施。