当前位置:首页>Linux>Linux 网络自动化运维与 Ansible 实践

Linux 网络自动化运维与 Ansible 实践

  • 2026-09-22 16:08:23
Linux 网络自动化运维与 Ansible 实践

Linux 网络自动化运维与 Ansible 实践

一、为什么需要网络自动化?

痛点:

  • 批量服务器配置一致性难保证
  • 变更风险高、回滚困难
  • 文档与实际配置脱节
  • 重复劳动浪费时间

收益:

  • 标准化、一致性
  • 版本控制(Git)
  • 快速部署与回滚
  • 审计与合规
  • 与 CI/CD 集成

常见工具:Ansible(Agentless,推荐)、SaltStack、Terraform(偏基础设施)、Puppet/Chef。

二、Ansible 基础与网络模块

安装:

pip install ansibleansible --version

Inventory 示例(inventory.ini):

[webservers] web1 ansible_host=192.168.10.11 ansible_user=ansible web2 ansible_host=192.168.10.12 [all:vars] ansible_ssh_private_key_file=~/.ssh/id_rsa ansible_python_interpreter=/usr/bin/python3

Ad-hoc 命令:

ansible all -m pingansible webservers -m shell -a "ip addr show"ansible webservers -m apt -a "name=wireguard state=present" --become

三、网络配置 Playbook 实战

示例1:标准化网络接口与路由(结合第二篇)

----name:Configurenetworkinterfacesandrouteshosts:allbecome:yesvars:primary_ip:"{{ ansible_host }}/24"tasks:-name:Configureeth0template:src:ifcfg-eth0.j2dest:/etc/sysconfig/network-scripts/ifcfg-eth0notify:restartnetwork-name:Adddefaultroutecommand:iprouteadddefaultvia192.168.10.1deveth0args:creates:/etc/sysconfig/network-scripts/route-eth0handlers:-name:restartnetworkservice:name:NetworkManagerstate:restarted

Jinja2 模板(ifcfg-eth0.j2):

DEVICE=eth0 BOOTPROTO=none ONBOOT=yes IPADDR={{ ansible_host }} PREFIX=24 GATEWAY=192.168.10.1 DNS1=8.8.8.8

示例2:批量部署 WireGuard(第八篇)

-name:DeployWireGuardVPNhosts:vpn_serversbecome:yestasks:-name:InstallWireGuardpackage:name:wireguard-toolsstate:present-name:Generatekeyscommand:wggenkey|tee/etc/wireguard/private.key|wgpubkey>/etc/wireguard/public.keyargs:creates:/etc/wireguard/private.key-name:Configurewg0template:src:wg0.conf.j2dest:/etc/wireguard/wg0.confnotify:restartwg-quickhandlers:-name:restartwg-quickcommand:wg-quickdownwg0&&wg-quickupwg0

示例3:防火墙统一管理(第三篇)

-name:Applybasefirewallruleshosts:allbecome:yestasks:-name:Deploynftablesrulescopy:src:firewall.nftdest:/etc/nftables.confnotify:reloadnftableshandlers:-name:reloadnftablescommand:nft-f/etc/nftables.conf

四、Kubernetes 网络自动化

示例:部署 Calico + NetworkPolicy

-name:DeployCNIandpolicieshosts:k8s_masterstasks:-name:ApplyCalicomanifestcommand:kubectlapply-fcalico.yaml-name:ApplyNetworkPolicytemplate:src:db-policy.yaml.j2dest:/tmp/db-policy.yamlregister:policy-name:Applypolicycommand:kubectlapply-f/tmp/db-policy.yaml

动态 Inventory:支持 AWS、阿里云等云厂商动态主机列表。

五、Idempotency、Roles 与最佳实践

使用 Roles 组织代码:

roles/ common/ tasks/main.yml templates/ vars/main.yml network_base/ firewall/ vpn/

变量优先级:group_vars > host_vars > playbook vars。

最佳实践:

  • Git 管理 Playbook + Branch 策略
  • Ansible Vault 加密敏感信息(密钥、密码)
  • --check / --diff 模式测试变更
  • Molecule / Ansible-test 进行角色测试
  • AWX / Ansible Tower 提供 Web UI 与 RBAC
  • 与 Terraform 结合(Terraform 管基础设施,Ansible 管配置)
  • 定期 ansible-playbook site.yml --tags network --limit webservers

错误处理:

-name:Taskwithretrycommand:...register:resultuntil:result.rc==0retries:5delay:10

六、生产级自动化流水线

CI/CD 集成:

  • GitHub Actions / GitLab CI 触发 Playbook
  • 变更审批流程
  • 灰度执行(limit + serial)

监控自动化效果:

  • Ansible 回调插件记录变更
  • 与 Prometheus / ELK 联动

大规模场景:

  • Ansible Tower / AWX 集群
  • 动态 Inventory + Tags
  • 结合 Terraform Provider for Ansible

七、常见问题与故障排除

  • SSH 连接问题:ansible_user、密钥、防火墙
  • Idempotency 失败:使用 creates、when、changed_when
  • 性能:--forks 50 并行度调整
  • 变量调试:ansible-playbook ... -e "var=value" -vvv

调试技巧:

ansible-playbook playbook.yml -vvvansible-inventory -i inventory.ini --list

最新文章

随机文章