AWX和Ansible已经安装好,接下来我们使用一个简单的任务,要学习一下怎么使用这个工具。我们首先准备一下测试环境,我的测试环境共有6台虚拟机,服务器信息如下:
Ansible服务器 | 192.168.110.170 | 自动化管理服务器 |
WEB服务器 | 192.168.110.250 | 测试WEB服务器安装Nginx |
数据库服务器 | 192.168.110.150 | 安装Mysql |
DNS服务器 | 192.168.110.22 | 内网dns,安装DNSmasq |
Redis服务器 | 192.168.110.28 | 缓存服务器安装redis |
Jenkins服务器 | 192.168.110.151 | 发布代码到测试服务器 |
为了配置Ansible 来管理这些指定的节点,我们需要执行一系列步骤,来确保 Ansible能够与这些节点进行通信和管理。下面介绍如何配置 AWX 管理这些服务器:
环境配置
首先,你需要确保 Ansible安装的服务器(192.168.110.170)能够访问你想要管理的其他服务器。这意味着网络上没有阻止 Ansible访问这些目标服务器的防火墙或者其他网络安全设置,主要涉及到三个方面:网络连通性、防火墙设置、以及SSH权限设置。下面是一些具体的步骤来检查和确保这些访问权限:
网络连通性测试
- Ping 测试: 使用
ping
命令来检测 AWX 服务器能否到达其他服务器。例如,你可以从 Ansible服务器 ping 192.168.110.250(Nginx服务器)。
ping 192.168.110.250
如果你收到回复,表明在网络层面上,两台服务器是连通的。
检查防火墙设置
确保没有防火墙规则阻止 Ansible服务器与其他服务器之间的通信。这可能需要你检查每台服务器上的防火墙设置,包括但不限于iptables、ufw或是云平台的安全组设置。
-
对于使用 iptables 的系统:
检查当前的规则,尤其是那些可能会Drop或Reject数据包的规则。
sudo iptables -L
-
对于使用 ufw 的系统:
检查 ufw 的状态以及相关规则是否允许来自 Ansible服务器的连接。
sudo ufw status
SSH权限设置
-
无密码 SSH 登录: AWX/Ansible 通常使用 SSH 私钥来认证。确保 Ansible服务器的 SSH 公钥已经添加到其他服务器的
~/.ssh/authorized_keys
文件中,并且对应的用户有权做需要的操作。可参考我的另一篇博文《Linux服务器之间SSH免密登陆》 -
检查 SSH 配置: 在 Ansible服务器上检查是否能够无密码登录到目标服务器。
ssh 192.168.110.250
如果无法成功连接,请检查
~/.ssh/authorized_keys
文件的权限设置,确保 SSH 服务配置正确,且没有在/etc/hosts.deny
中被拒绝。
特定端口通信
除了基础的 SSH 访问,你可能需要保证 Ansible服务器能够通过特定端口访问比如 MySQL、Nginx 或 Kubernetes 相关的服务端口。这需要确定这些服务监听的端口对 AWX 服务器开放且没有被防火墙规则所阻挡。
确保所有必要的通信通道打开后,你就可以顺利在 Ansible中管理这些节点了。若存在任何连通性问题,从上述检查中定位并解决问题。如果是在企业环境中,还可能需要与网络团队合作,确保网络策略满足要求。
第一个Ansible任务
我们现在创建一个简单的Ansible任务,来实现所有的服务器ping www.baidu.com这个域名,判断这些服务器是否可以正常连外网。
创建inventory文件
你可以在Ansible主机上创建一个inventory文件,然后在playbook中指定这个inventory文件。在inventory文件中,你可以定义所有的目标主机。然后你可以在playbook中定义一个任务,使用shell或command模块运行ping命令,然后检查返回的结果。
首先,创建一个名为hosts的inventory文件,内容如下:
[web]
192.168.110.250[db]
192.168.110.150[dns]
192.168.110.22[redis]
192.168.110.28[jenkins]
192.168.110.151
创建playbook文件
然后,创建一个名为check_internet.yml的playbook,内容如下:
---
- name: Check internet connectionhosts: allgather_facts: notasks:- name: Ping www.baidu.comcommand: ping -c 1 www.baidu.comregister: resultignore_errors: true- name: Show resultdebug:msg: "Ping www.baidu.com success."when: result.rc == 0- name: Show errordebug:msg: "Ping www.baidu.com failed."when: result.rc != 0
运行执行任务
最后,你可以运行以下命令,使Ansible根据你的inventory文件和playbook执行任务:
ansible-playbook -i hosts check_internet.yml
这个命令会在所有在inventory文件中定义的主机上运行ping命令,然后根据返回的结果输出相应的信息。
执行的结果如下:
PLAY [Check internet connection] *********************************************************************************************************************************************************TASK [Ping www.baidu.com] ****************************************************************************************************************************************************************
changed: [192.168.110.28]
changed: [192.168.110.22]
changed: [192.168.110.151]
changed: [192.168.110.150]
[DEPRECATION WARNING]: Distribution Ubuntu 20.04 on host 192.168.110.250 should use /usr/bin/python3, but is using /usr/bin/python for backward compatibility with prior Ansible
releases. A future Ansible release will default to using the discovered platform python for this host. See
https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information. This feature will be removed in version 2.12. Deprecation warnings can be
disabled by setting deprecation_warnings=False in ansible.cfg.
changed: [192.168.110.250]TASK [Show result] ***********************************************************************************************************************************************************************
ok: [192.168.110.250] => {"msg": "Ping www.baidu.com success."
}
ok: [192.168.110.150] => {"msg": "Ping www.baidu.com success."
}
ok: [192.168.110.22] => {"msg": "Ping www.baidu.com success."
}
ok: [192.168.110.28] => {"msg": "Ping www.baidu.com success."
}
ok: [192.168.110.151] => {"msg": "Ping www.baidu.com success."
}TASK [Show error] ************************************************************************************************************************************************************************
skipping: [192.168.110.250]
skipping: [192.168.110.22]
skipping: [192.168.110.150]
skipping: [192.168.110.28]
skipping: [192.168.110.151]PLAY RECAP *******************************************************************************************************************************************************************************
192.168.110.150 : ok=2 changed=1 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
192.168.110.151 : ok=2 changed=1 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
192.168.110.22 : ok=2 changed=1 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
192.168.110.250 : ok=2 changed=1 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
192.168.110.28 : ok=2 changed=1 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
从目前的结果看,这几台服务器都可以正常访问外网。