Hướng dẫn Containerlab: Xây dựng Lab mạng “siêu nhẹ” bằng Docker cho NetDevOps

Network tutorial - IT technology blog
Network tutorial - IT technology blog

Triển khai Lab mạng trong 5 phút (Quick Start)

Nếu bạn đã quá mệt mỏi với việc chờ GNS3 hay EVE-NG ngốn sạch 32GB RAM chỉ để chạy vài con Router, hãy thử Containerlab. Cảnh báo: Bạn có thể sẽ không bao giờ muốn quay lại dùng máy ảo (VM) truyền thống nữa. Chỉ cần một máy Linux đã cài Docker, bạn đã sẵn sàng.

Cài đặt Containerlab nhanh gọn bằng một dòng lệnh:

bash <(curl -sL https://get.containerlab.dev)

Hãy thử dựng ngay mô hình 2 node Linux để thấy tốc độ của nó. Tạo file lab-don-gian.yaml:

name: lab-demo
topology:
  nodes:
    node1:
      kind: linux
      image: alpine:latest
    node2:
      kind: linux
      image: alpine:latest
  links:
    - endpoints: ["node1:eth1", "node2:eth1"]

Bây giờ, khởi chạy lab:

sudo containerlab deploy -t lab-don-gian.yaml

Chưa đầy 10 giây, bạn đã có 2 container Alpine được nối dây trực tiếp qua interface eth1. Để dọn dẹp, chỉ cần chạy sudo containerlab destroy -t lab-don-gian.yaml. Mọi thứ sẽ biến mất sạch sẽ, không để lại rác hệ thống.

Containerlab là gì và tại sao nó lại thay đổi cuộc chơi?

Containerlab không thay thế Docker. Nó đóng vai trò là một “nhạc trưởng” điều phối. Nó tự động tạo container, thiết lập các cặp interface ảo (veth pairs) và kết nối chúng theo đúng sơ đồ bạn vẽ. Thay vì mỗi router là một máy ảo nặng vài GB, giờ đây mỗi node chỉ là một tiến trình (process) nhẹ nhàng trên Linux.

Cái hay nhất ở đây chính là tư duy Infrastructure as Code (IaC). Toàn bộ sơ đồ mạng giờ chỉ gói gọn trong một file text duy nhất. Bạn dễ dàng đẩy lên Git, chia sẻ cho đồng nghiệp hoặc tích hợp vào pipeline CI/CD để tự động hóa việc kiểm thử cấu hình.

Giải mã cấu trúc file Topology

File YAML là linh hồn của mọi dự án Containerlab. Bạn chỉ cần nắm vững 3 thành phần cốt lõi sau:

  • name: Định danh cho phòng lab, dùng làm tiền tố để phân biệt các container.
  • nodes: Danh sách thiết bị. Bạn có thể dùng kind: linux cho server, hoặc các loại chuyên dụng như Nokia SR-Linux, Arista cEOS, hay Cisco 8000V.
  • links: Định nghĩa các kết nối vật lý. Ví dụ ["node1:eth1", "node2:eth1"] sẽ “cắm dây” giữa cổng eth1 của hai node.

Lưu ý rằng Containerlab luôn tự động tạo một mạng quản lý (management network). Mỗi thiết bị sẽ có interface eth0 nhận IP từ Docker bridge để bạn có thể SSH vào cấu hình ngay lập tức.

Trải nghiệm thực tế: Truy tìm lỗi mạng “ma”

Tôi từng gặp một ca khó: hệ thống bị mất gói tin ngẫu nhiên vào giờ cao điểm. Việc tái lập môi trường trên thiết bị thật là không thể vì rủi ro gián đoạn dịch vụ quá lớn. Tôi quyết định dùng Containerlab dựng lại toàn bộ topology gồm 6 router chạy FRRouting (BGP/OSPF).

Bằng cách đẩy traffic giả lập qua iperf3, tôi phát hiện ra lỗi nằm ở cấu hình MTU không đồng nhất. Cụ thể, một chặng trung gian để MTU 1450 trong khi các chặng khác là 1500, khiến các gói tin lớn bị drop. Nhờ Containerlab, tôi tìm ra nguyên nhân chỉ trong 2 giờ thay vì mất cả tuần vật lộn với thiết bị thật.

Nâng cao: Kết nối Lab với mạng vật lý

Đôi khi bạn cần các node trong lab thông ra Internet hoặc kết nối với switch thật trong văn phòng. Containerlab xử lý việc này qua loại node bridge.

topology:
  nodes:
    br-ex:
      kind: bridge
    router1:
      kind: linux
      image: frrouting/frr
  links:
    - endpoints: ["router1:eth1", "br-ex:eth1"]

Trong ví dụ này, br-ex sẽ gắn trực tiếp vào một Linux bridge có sẵn trên máy host. Đây là cầu nối hoàn hảo để bạn test các dịch vụ thực tế như DNS hoặc DHCP server ngay trong môi trường lab ảo.

Mẹo nhỏ để tối ưu hiệu suất

Sau một thời gian dài “ăn ngủ” cùng Containerlab, đây là 3 kinh nghiệm xương máu dành cho bạn:

  1. Bật Graph Mode: Khi sơ đồ có trên 10 node, hãy dùng lệnh sudo containerlab graph -t lab.yaml. Nó sẽ mở ra một giao diện web trực quan để bạn kiểm tra các kết nối vật lý nhanh hơn.
  2. Đừng quên Mount Volume: Container sẽ mất dữ liệu khi bị xóa. Hãy dùng thuộc tính binds để lưu file config từ container xuống ổ cứng máy host.
  3. Theo dõi RAM: Dù rất nhẹ, nhưng chạy 50 router Arista cEOS vẫn có thể ngốn của bạn 16GB RAM. Hãy dùng docker stats để kiểm soát tài nguyên thường xuyên.

Làm chủ Containerlab là bước đệm quan trọng để tiến tới NetDevOps chuyên nghiệp. Thay vì tốn thời gian bấm cáp hay chờ máy ảo khởi động, giờ bạn có thể tập trung hoàn toàn vào việc thiết kế và tối ưu kiến trúc mạng.

Share: