RH358服务管理和自动化--自动化服务管理和网络接口配置

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: RH358服务管理和自动化--自动化服务管理和网络接口配置

RH358服务管理和自动化–自动化服务管理和网络接口配置

RH358课程在每章的最后一个章节内容都是讲解如何使用Ansible对本章所学进行自动化管理。所以需要你有Ansible的基础。若对Ansible感兴趣,可订阅金鱼哥写的Ansible专栏。本章节属于第一章第三节内容。

开篇回顾:https://blog.csdn.net/qq_41765918/article/details/121875149

1. 使用Ansible的自动化

熟练的系统管理员需要能够手动安装和配置他们管理的服务。能够自动化这些服务的标准部署、配置和管理是高效和重复管理这些服务的关键,特别是在规模上。

本课程是需要你已经熟悉Ansible自动化工具上的Ansible自动化平台。如果你不熟悉Ansible,可查看金鱼哥写的Ansible专栏:https://blog.csdn.net/qq_41765918/category_11512932.html

2. 自动化服务管理

Ansible提供了三个在使用systemd服务时特别有用的模块:service、systemd和service_facts。

当需要对网络业务进行基本管理时,可以使用service模块。service模块提供了一组基本选项:启动、停止、重启和启用。请执行ansible-doc service命令获取更多信息。

- name: web server is started
  service:
    name: httpd
    state: started

systemd模块提供了更多的配置选项。例如,systemd允许运行daemon-reload,但service模块不允许。请运行ansible-doc systemd命令获取更多信息。

- name: reload web server
  systemd:
    name: apache2
    state: reload
    daemon-reload: yes

service_facts模块收集关于系统上服务的信息,比如它们是否在引导时启动,它们是否正在运行,并将这些信息存储在ansible_facts['services ']变量中。请运行ansible-doc service_facts命令获取更多信息。

- name: collect service status facts
  service_facts:
- name: display whether NetworkManager is running
  debug:
    var: ansible_facts['services']['NetworkManager.service']['state']

3. 使用网络系统角色配置网络

RHEL8或者CentOS8 中,会包含了一个名为rhel-system-roles的包(7的系统也包含),它包含了一个用于Linux服务管理的Ansible Roles集合。这些都是基于上游的Linux系统角色项目https://linux-system-roles.github.io/。当安装包时,它将角色放置在/usr/share/ansible/roles目录中,默认情况下该目录位于DEFAULT_ROLES_PATH中,以便您的剧本可以使用它们。

rhel-system-roles.network角色也称为linux-system-roles.network,是在托管主机上配置网络设置的最简单方法。

这个角色配置了network_connections变量。例如,对于特定的主机,可以在host_vars主机变量文件中包含以下内容

---
network_connections:
  - name: ens4
    type: ethernet
    ip:
      address:
        - 172.25.250.30/24

network_connections变量是一个字典列表,用于配置不同的连接,指定为一个字典列表,使用接口名作为连接名。

下表列出了network_connections变量的选项。

选项名称描述name标识连接配置文件。state连接配置文件的运行时状态:up(如果连接配置文件是活动的),down(如果连接配置文件是非活动的)。persistent_state当前的设置是默认的present,将创建或修改连接配置文件。您还必须指定类型选项。如果不将state状态选项设置为up,则不会启动新的或修改过的连接。absent设置将删除连接配置文件。type标识连接类型。有效值包括ethernet、bridge、bond、team、vlan、macvlan和infiniband。autoconnect确定连接是否自动启动。mac限制在具有特定MAC地址的设备上使用连接。interface_name限制特定接口使用的连接配置文件。zone配置接口所属的防火墙区域。ip确定连接的IP配置。支持address、指定静态IP地址、或者dns配置DNS服务器。

下面的例子使用了这些附加选项中的一些:

① 使用eth0作为连接名。

② 使连接持久,这是默认值。

③ 将连接类型设置为以太网。

④ 在引导时自动启动连接。这是默认值。

⑤ 限制连接设置只能被该MAC地址的设备使用。

⑥ 配置172.25.250.40/24为连接IP地址。

⑦ 配置外部作为连接的防火墙区域。

⑧ 激活连接配置文件。

要使用网络系统角色,你可以在剧本中的角色子句下指定角色名:

- name: Ensure NICs have the right configuration
  hosts: webservers

  roles:
    - rhel-system-roles.network

上面的示例假设在剧本中为每个主机定义了network_connections变量,如果使用静态寻址,可能在host_vars中作为特定于主机的清单变量。

如果使用DHCPv4或SLAAC进行IP地址配置,则可以指定网络连接范围更广。例如,假设所有的主机在webserver中,enp5s0作为一个接口,应该配置动态寻址,你可以创建一个group_vars/webservers文件,其中包含以下内容:

network_connections: - name: enp5s0 type: ethernet ip: dhcp4: yes auto6: yes autoconnect: yes state: up 

4. Ansible事实的网络配置

当一个play执行自动事实收集或运行setup模块时,Ansible会收集与网络配置相关的事实。如果您需要一台机器的网络接口、IP地址或当前配置的信息,以便在剧本中使用,这些事实中有许多是特别有用的。

事实名字描述ansible_facts[‘all_ipv4_addresses’]包含以下列表被管理主机上配置的IPv4地址,省略127.0.0.1ansible_facts[‘all_ipv6_addresses’]包含以下列表被管主机上配置的IPv6地址,省略::1,但包含fe80::/10中的链路本地地址。ansible_facts[‘default_ipv4’]包含被管理主机上配置IPv4缺省路由的接口的事实字典,包括接口的名称、MAC地址和网络设置。如果没有缺省路由,则为空。ansible_facts[‘default_ipv6’]包含被管理主机上配置了缺省IPv6路由的接口的事实字典,包括接口的名称、MAC地址和网络设置。如果没有缺省路由,则为空。ansible_facts[‘interfaces’]包含被管理主机上所有网络接口的列表。ansible_facts[’*interface-name*’]包含关于网络接口interface-name的事实字典,包括其当前网络配置和特性。

记住:可以使用调试模块检查这些事实的内容。

显示接口IP地址信息

如果enp11s0接口有一个IPv4地址,显示如下:

- name: display IPv4 address of enp11s0 debug: var: ansible_facts['enp11s0']['ipv4']['address'] 

image-20211214100726373

您可以使用过滤器来获取接口上的IPv6地址列表。下面的示例使用map(attribute=‘address’)过滤器来获取列表中每个项目的地址事实值。然后,列表过滤器将结果转换为列表。

- name: display list of IPv6 addresses of enp11s0 debug: var: ansible_facts['enp11s0']['ipv6'] | map(attribute='address') | list 

这产生下列输出:

"ansible_facts['enp011s0']['ipv6'] | map(attribute='address') | list": [ "2001:db8:1000::290", "2001:db8:1000::4455:6677:aabb:ccdd", "fe80::1234:5678:9abc:def0" ] 

通过MAC地址识别网络接口

在Red Hat Enterprise Linux中,为了保证网络接口的稳定性,网络接口的名称通常基于系统总线的硬件拓扑结构。有时很难识别新硬件上特定端口的正确接口名称,特别是在多个网络接口可用的情况下。但是,如果您知道一个网络端口的MAC地址,那么您可以使用Ansible事实来检索该接口的名称。

例如,考虑以下运行在托管主机服务器上的剧本:

image-20211214113008066

第一个任务the_interface设置为在被管理主机的target_mac变量中有MAC地址的接口的名称。

该任务的工作方式是检查被管理主机上每个接口的macaddress事实值。它只在定义了macaddress(例如,它不为ansible_facts [‘lo’])并且匹配target_mac的值时设置the_interface。

如果您将这个示例转换为在同一个剧本中检查许多主机,您将不会在剧本中硬编码target_mac的值。相反,可以将target_mac变量设置为剧本中的每个主机的主机变量,也可在host_vars文件中。

5. 课本练习(第30页)

[student@workstation ~]$ lab servicemgmt-automation start

1. 查看/home/student/servicemgmt-automation目录下的Ansible目录文件。

[student@workstation ~]$ cd ~/servicemgmt-automation [student@workstation servicemgmt-automation]$ cat inventory [servers] servera.lab.example.com 

2. 编写一个以servers组为目标的剧本,并确保已启动并启用NetworkManager服务。

[student@workstation servicemgmt-automation]$ vim playbook.yml --- - name: Configure 2nd network interface hosts: servers become: true tasks: - name: Confirm NetworkManager is running service: name: NetworkManager state: started enabled: true [student@workstation servicemgmt-automation]$ ansible-playbook \ --syntax-check playbook.yml [student@workstation servicemgmt-automation]$ ansible-playbook playbook.yml 

因为NetworkManager已经在服务器上运行了,所以playbook没有做任何改变。

3. 在相同的剧本中,添加一个任务。

# 在变量中设置每个主机的辅助接口的名称,如果你事先知道每个接口的MAC地址。 [student@workstation servicemgmt-automation]$ vim playbook.yml --- - name: Configure 2nd network interface hosts: servers become: true vars: target_mac: "52:54:00:01:fa:0a" tasks: - name: Confirm NetworkManager is running service: name: NetworkManager state: started enabled: true - name: Find the_interface for target_mac set_fact: the_interface: "{
               { item }}" when: - ansible_facts[item]['macaddress'] is defined - ansible_facts[item]['macaddress'] == target_mac loop: "{
               { ansible_facts['interfaces'] }}" - name: Display the_interface debug: var: the_interface [student@workstation servicemgmt-automation]$ ansible-playbook --syntax-check playbook.yml playbook: playbook.yml [student@workstation servicemgmt-automation]$ ansible-playbook playbook.yml 

4. 将刚才标识的接口配置为静态地址192.168.0.1/24。

# 使用包含或导入(哪个更合适)rhel-system-roles. network的任务。 [student@workstation servicemgmt-automation]$ ansible-galaxy list # /usr/share/ansible/roles # /etc/ansible/roles [WARNING]: - the configured path /home/student/.ansible/roles does not exist. 如果没有角色,请安装rhel-system-roles包。 [student@workstation servicemgmt-automation]$ sudo yum -y install rhel-system-roles [student@workstation servicemgmt-automation]$ ansible-galaxy list # /home/student/.ansible/roles # /usr/share/ansible/roles - linux-system-roles.kdump, (unknown version) - linux-system-roles.network, (unknown version) - linux-system-roles.postfix, (unknown version) - linux-system-roles.selinux, (unknown version) - linux-system-roles.storage, (unknown version) - linux-system-roles.timesync, (unknown version) - rhel-system-roles.kdump, (unknown version) - rhel-system-roles.network, (unknown version) - rhel-system-roles.postfix, (unknown version) - rhel-system-roles.selinux, (unknown version) - rhel-system-roles.storage, (unknown version) - rhel-system-roles.timesync, (unknown version) # /etc/ansible/roles [WARNING]: - the configured path /home/student/.ansible/roles does not exist. 
[student@workstation servicemgmt-automation]$ vim confignet.yml --- - name: Configure 2nd network interface hosts: servers become: true vars: target_mac: "52:54:00:01:fa:0a" network_connections: - name: static_net type: ethernet mac: "{
                 { target_mac }}" state: up ip: dhcp4: no address: - 192.168.0.1/24 roles: - rhel-system-roles.network 

5. 运行playbook配置服务器。

[student@workstation servicemgmt-automation]$ ansible-playbook \ --syntax-check confignet.yml playbook: confignet.yml [student@workstation servicemgmt-automation]$ ansible-playbook confignet.yml 

6. 手动确认服务器网口设置是否正确。

[root@servera ~]# nmcli device  DEVICE TYPE STATE CONNECTION eth0 ethernet connected Wired connection 1 eth1 ethernet connected static_net eth2 ethernet disconnected -- lo loopback unmanaged -- [root@servera ~]# nmcli connection show  NAME UUID TYPE DEVICE Wired connection 1 4ae4bb9e-8f2d-3774-95f8-868d74edcc3c ethernet eth0 static_net 01a4c317-ce0f-4fa5-b71d-c5bf401d6e44 ethernet eth1 Wired connection 2 c0e6d328-fcb8-3715-8d82-f8c37cb42152 ethernet -- Wired connection 3 9b5ac87b-572c-3632-b8a2-ca242f22733d ethernet -- [root@servera ~]# nmcli con show static_net | grep ipv4 ipv4.method: manual ipv4.dns: -- ipv4.dns-search: -- ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: 192.168.0.1/24 ipv4.gateway: -- ipv4.routes: -- ipv4.route-metric: -1 ipv4.route-table: 0 (unspec) ipv4.routing-rules: -- ipv4.ignore-auto-routes: no ipv4.ignore-auto-dns: no ipv4.dhcp-client-id: -- ipv4.dhcp-timeout: 0 (default) ipv4.dhcp-send-hostname: yes ipv4.dhcp-hostname: -- ipv4.dhcp-fqdn: -- ipv4.never-default: no ipv4.may-fail: yes ipv4.dad-timeout: -1 (default) [root@servera ~]# ping -c2 192.168.0.254 

7. 重新启动servera。确认NetworkManager服务正在运行,并且网络接口配置仍然正确。

[root@servera ~]# reboot [student@workstation servicemgmt-automation]$ ansible servers -m shell -a 'nmcli con show' [student@workstation servicemgmt-automation]$ ansible servers -m shell \ -a 'nmcli con show static_net' | grep ipv4 

完成实验

[student@workstation ~]$ lab servicemgmt-automation finish

总结

介绍了如何自动化服务管理。介绍了使用网络系统角色(rhel-system-roles.network)进行网络配置。介绍了使用Ansible Facts进行网络配置。若喜欢金鱼哥的文章,顺手点个赞。也可点个关注,因为后续会不断上干货。

目录
相关文章
|
13天前
|
运维 监控 安全
网络管理:防火墙和安全组配置详解
网络管理:防火墙和安全组配置详解
30 1
|
1月前
|
Ubuntu Oracle 关系型数据库
Oracle VM VirtualBox之Ubuntu 22.04LTS双网卡网络模式配置
这篇文章是关于如何在Oracle VM VirtualBox中配置Ubuntu 22.04LTS虚拟机双网卡网络模式的详细指南,包括VirtualBox网络概述、双网卡网络模式的配置步骤以及Ubuntu系统网络配置。
50 3
|
1月前
|
Ubuntu
树莓派 —— ubuntu上通过netplan配置网络
树莓派 —— ubuntu上通过netplan配置网络
|
2月前
|
持续交付 jenkins Devops
WPF与DevOps的完美邂逅:从Jenkins配置到自动化部署,全流程解析持续集成与持续交付的最佳实践
【8月更文挑战第31天】WPF与DevOps的结合开启了软件生命周期管理的新篇章。通过Jenkins等CI/CD工具,实现从代码提交到自动构建、测试及部署的全流程自动化。本文详细介绍了如何配置Jenkins来管理WPF项目的构建任务,确保每次代码提交都能触发自动化流程,提升开发效率和代码质量。这一方法不仅简化了开发流程,还加强了团队协作,是WPF开发者拥抱DevOps文化的理想指南。
49 1
|
29天前
|
域名解析 负载均衡 网络协议
Linux网络接口配置不当所带来的影响
总而言之,Linux网络接口的恰当配置是保证网络稳定性、性能和安全性的基础。通过遵循最佳实践和定期维护,可以最大程度地减少配置错误带来的负面影响。
67 0
|
1月前
|
监控 安全 网络安全
|
2月前
|
持续交付 jenkins C#
“WPF与DevOps深度融合:从Jenkins配置到自动化部署全流程解析,助你实现持续集成与持续交付的无缝衔接”
【8月更文挑战第31天】本文详细介绍如何在Windows Presentation Foundation(WPF)项目中应用DevOps实践,实现自动化部署与持续集成。通过具体代码示例和步骤指导,介绍选择Jenkins作为CI/CD工具,结合Git进行源码管理,配置构建任务、触发器、环境、构建步骤、测试及部署等环节,显著提升开发效率和代码质量。
48 0
|
2月前
|
Java Spring 开发者
解锁 Spring Boot 自动化配置的黑科技:带你走进一键配置的高效开发新时代,再也不怕繁琐设置!
【8月更文挑战第31天】Spring Boot 的自动化配置机制极大简化了开发流程,使开发者能专注业务逻辑。通过 `@SpringBootApplication` 注解组合,特别是 `@EnableAutoConfiguration`,Spring Boot 可自动激活所需配置。例如,添加 JPA 依赖后,只需在 `application.properties` 配置数据库信息,即可自动完成 JPA 和数据源设置。这一机制基于多种条件注解(如 `@ConditionalOnClass`)实现智能配置。深入理解该机制有助于提升开发效率并更好地解决问题。
49 0
|
2月前
|
运维 应用服务中间件 nginx
自动化运维的利剑:Ansible Role 打造标准化配置
【8月更文挑战第31天】在追求效率和稳定性的今天,自动化运维不再是奢侈品,而是必需品。Ansible Role,作为自动化配置管理的利器,它如何帮助我们实现标准化部署和维护?本文将通过一个简单示例,带你了解 Ansible Role 的魅力所在,并探讨其在现代 IT 架构中的应用价值。
|
2月前
|
缓存 负载均衡 网络协议
Haskell网络编程:深入理解代理和TLS配置
Haskell网络编程:深入理解代理和TLS配置
下一篇
无影云桌面