Linux 网络自动化运维与 Ansible 实践
一、为什么需要网络自动化?
痛点:
收益:
常见工具: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 加密敏感信息(密钥、密码)
- 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
监控自动化效果:
大规模场景:
- 结合 Terraform Provider for Ansible
七、常见问题与故障排除
- SSH 连接问题:ansible_user、密钥、防火墙
- Idempotency 失败:使用
creates、when、changed_when - 变量调试:
ansible-playbook ... -e "var=value" -vvv
调试技巧:
ansible-playbook playbook.yml -vvvansible-inventory -i inventory.ini --list