Xin chào ! Nếu đây là lần đầu tiên bạn đến với diễn đàn, xin vui lòng danh ra một phút bấm vào đây để đăng kí và tham gia thảo luận cùng VnPro.
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Tự động cấu hình IP-in-IP Tunnel và NTP bằng Ansible

    Tự động cấu hình IP-in-IP Tunnel và NTP bằng Ansible – Khi Network Automation không còn là "chạy từng lệnh CLI"


    Trong môi trường hạ tầng hiện đại, việc cấu hình thủ công từng máy chủ hoặc từng tunnel mạng không còn phù hợp khi số lượng server có thể lên đến hàng trăm hoặc hàng nghìn node. Đây chính là lúc Ansible phát huy sức mạnh của một nền tảng Configuration Management theo mô hình Push, cho phép tự động hóa toàn bộ quy trình triển khai hạ tầng và dịch vụ.

    Bài lab này mô phỏng một tình huống rất thực tế: sử dụng Ansible để triển khai IP-in-IP Tunnel (IPIP) giữa hai máy chủ Linux và tự động cấu hình dịch vụ NTP thông qua Ansible Roles.

    Bước đầu tiên: Agentless Automation


    Khác với Puppet hay Salt, Ansible không yêu cầu cài đặt Agent trên máy đích. Chỉ cần:
    • Một máy quản trị cài Ansible
    • SSH Key Authentication
    • Quyền truy cập tới các máy chủ cần quản lý

    Sau khi tạo cặp khóa RSA và copy Public Key tới server01 và server02, Ansible có thể kết nối và thực hiện automation mà không cần bất kỳ daemon nào chạy trên server đích.

    Đây là lý do Ansible được sử dụng rất nhiều trong:
    • Linux Administration
    • Cloud Provisioning
    • Network Automation
    • DevOps Platform Engineering
    • Infrastructure as Code (IaC)
    Inventory – Trái tim của Ansible


    Ansible quản lý hạ tầng thông qua Inventory.

    Ví dụ:
    [servers]
    server01
    server02

    Mỗi host có thể khai báo thêm:
    • ansible_host
    • ansible_port
    • ansible_user

    Ví dụ:
    server01 ansible_host=192.168.0.20 ansible_port=20001 ansible_user=root
    server02 ansible_host=192.168.0.20 ansible_port=20002 ansible_user=root

    Cách tiếp cận này giúp việc mở rộng từ 2 server lên 200 hoặc 2.000 server chỉ đơn giản là cập nhật Inventory mà không phải sửa Playbook.

    Tự động triển khai IP-in-IP Tunnel


    Bài lab sử dụng Ansible để cấu hình tunnel IPIP bằng các lệnh Linux:
    ip link add name NAME type ipip local LOCAL_IP remote REMOTE_IP
    ip link set NAME up
    ip addr add IP_ADDRESS dev NAME

    Điểm hay là toàn bộ tham số:
    • Interface Name
    • Tunnel IP
    • Local IP
    • Remote IP

    được parameter hóa bằng Jinja2 Variables.

    Ví dụ: server01

    if_name: ipip1
    ip_address: 192.168.1.1/24
    local_ip: 172.20.0.21
    remote_ip: 172.20.0.22

    server02

    if_name: ipip1
    ip_address: 192.168.2.1/24
    local_ip: 172.20.0.22
    remote_ip: 172.20.0.21

    Các biến này được lưu trong thư mục:
    host_vars/
    ├── server01
    └── server02

    Khi Playbook chạy, Ansible sẽ render Template bằng Jinja2 và sinh ra script thực tế trên từng server.

    Tạo Playbook


    Playbook đầu tiên sử dụng Module:
    template:

    để tạo file:
    /root/network-script.sh

    và cấp quyền:
    744

    Sau đó Playbook sử dụng Task thứ hai để thực thi script và ghi log vào:
    network-script.log

    Cuối cùng Playbook bổ sung thêm Static Route để định tuyến qua Tunnel Interface.

    Ví dụ: server01

    remote_subnet: 192.168.2.0/24 server02

    remote_subnet: 192.168.1.0/24

    Sau khi Playbook hoàn tất, hai máy chủ có thể ping lẫn nhau thông qua Tunnel IPIP.

    Đây là ví dụ rất điển hình của Network Automation:

    Infrastructure được mô tả bằng code, Template và Variables thay vì nhập từng lệnh CLI trên từng máy chủ.

    Tự động cấu hình NTP bằng Ansible Role


    Phần thứ hai của bài lab minh họa một khái niệm rất quan trọng trong Ansible: Role.

    Role là cách đóng gói:
    • Tasks
    • Variables
    • Templates
    • Handlers
    • Files

    thành một đơn vị tái sử dụng.

    Role NTP được tạo bằng:
    ansible-galaxy init ntp

    Lệnh này tự động tạo cấu trúc thư mục:
    roles/
    └── ntp
    ├── tasks
    ├── templates
    ├── defaults
    ├── handlers
    └── vars

    Tiếp theo tạo Template:
    roles/ntp/templates/ntp.conf.tmpl

    Template sử dụng Jinja2 Loop để thêm nhiều NTP Server từ biến:
    ntp_servers

    được lưu trong:
    group_vars/all

    Ví dụ:
    ntp_servers:
    - 0.north-america.pool.ntp.org
    - 1.north-america.pool.ntp.org
    - 2.north-america.pool.ntp.org
    - 3.north-america.pool.ntp.org



    Role thực hiện toàn bộ quy trình:
    1. Cài package NTP
    2. Khởi động service
    3. Sinh file /etc/ntp.conf
    4. Restart service

    Toàn bộ chỉ cần một dòng trong Playbook:
    roles:
    - ntp

    Điều thú vị nhất của Ansible: Idempotency


    Khi chạy Playbook lần thứ hai, Ansible sẽ kiểm tra trạng thái hiện tại.

    Nếu:
    • Tunnel đã tồn tại
    • Package đã cài
    • Service đã chạy
    • File cấu hình không thay đổi

    Ansible sẽ không thực hiện lại các hành động không cần thiết.

    Đây là đặc điểm cực kỳ quan trọng trong các hệ thống Enterprise vì nó cho phép:
    • Triển khai lặp lại nhiều lần
    • Giảm rủi ro thay đổi ngoài ý muốn
    • Dễ dàng kiểm soát trạng thái hạ tầng
    • Hỗ trợ Continuous Delivery và GitOps
    Kết luận


    Bài lab này cho thấy Ansible không chỉ là công cụ cài package hoặc restart service. Với sự kết hợp giữa:
    • Inventory
    • Jinja2 Templates
    • host_vars
    • group_vars
    • Playbooks
    • Roles

    Ansible có thể tự động hóa từ việc cấu hình IPIP Tunnel, định tuyến, DNS, NTP cho đến quản lý hàng nghìn máy chủ Linux và thiết bị mạng.

    Đây cũng chính là lý do Ansible trở thành một trong những công cụ quan trọng nhất trong hệ sinh thái DevOps, NetDevOps và Infrastructure Automation hiện nay.

    devops ansible #NetworkAutomation #InfrastructureAsCode linux #NetDevOps automation #IPIP ntp #PlatformEngineering #CloudAutomation
    Attached Files
    Đặng Quang Minh, CCIE#11897 (Enterprise Infrastructure, Wireless, Automation, AI), CCSI#31417

    Email : dangquangminh@vnpro.org
    https://www.facebook.com/groups/vietprofessional/
Working...
X