How Ansible Automation Powers the Uber Corporate Network at a Global Scale

Bài tóm tắt Uber 2026 3. Quy mô lớn Độ khó: Dễ

Uber · 2026 · 3. Quy mô lớn · Độ khó: Dễ — bài gốc

Bối cảnh

  • Mạng văn phòng (Corpnet) của Uber trên sáu châu lục, năm vùng, khoảng 5.000 thiết bị nhiều hãng (switch, gateway, firewall), mỗi văn phòng một tổ hợp phần cứng khác nhau. Ở quy mô này, lỗi link và thiết bị hằng ngày là bình thường, và việc vận hành gồm cả sửa tay trên thiết bị để giảm sự cố đang diễn ra.
  • Phân vai công cụ: Terraform cấp hạ tầng cloud, Puppet quản cấu hình máy, Ansible quản cấu hình thiết bị mạng on-prem (agentless qua SSH, Python + YAML, có collection của Juniper, Cisco, Arista).

Thay đổi chính

  • Inventory là trạng thái mong muốn: thiết bị đăng ký vào nhóm theo vùng, chức năng, hệ điều hành; mỗi nhóm một file YAML biến; thiết bị kế thừa biến của các nhóm, rồi biến được dịch sang cú pháp của từng hãng. Logic cấu hình tách khỏi cú pháp hãng: một access list trong một file YAML áp được cho cả Juniper lẫn Cisco.
  • Daily Nightly Enforcement, ba playbook mỗi đêm cho từng vùng: backup cấu hình đang chạy của mọi thiết bị lên repo GitHub riêng (theo dõi chênh lệch, lịch sử từng host); sinh golden configuration bằng template Jinja theo hãng từ dữ liệu inventory, che dữ liệu nhạy cảm, định dạng; đẩy cấu hình xuống thiết bị. Backup hay sinh cấu hình lỗi thì dừng enforcement cho thiết bị đó và báo lên hệ alert.
  • Thay đổi tay không có trong inventory bị ghi đè qua đêm: coi là nợ kỹ thuật; nhờ đó mạng về trạng thái đã version hoá trước giờ văn phòng mở cửa.
  • Cấu hình chạy hằng ngày: ưu tiên theo vùng (BGP community, ASN, TACACS, RADIUS, danh sách DHCP), VLAN theo loại thiết bị (một thay đổi YAML áp toàn cầu hay cho một vùng, một văn phòng). Workflow phụ: xoay mật khẩu tự động, thêm thiết bị mới bằng ZTP (DHCP + sinh cấu hình).
  • Khó khăn: tự động hoá làm lỗi có bán kính lớn (xoay mật khẩu, đổi ACL có thể khoá truy cập tới hàng nghìn thiết bị ở nơi khác); dễ thành biển biến trùng lặp cho từng hãng nếu không thiết kế một nguồn biến; file cấu hình tới 2.000 dòng, một ký tự sai làm hỏng parser, cần formatter để tránh commit rỗng; job hằng ngày dọn host cũ khỏi repo; có lúc phải tự viết module Ansible/Python (tốn người, thiết bị thử, bảo trì); có hãng Ansible không quản được, phải đồng bộ với portal khác.

Vì sao

  • Sửa tay để chữa cháy là không tránh được ở mạng lớn; cần một cơ chế tự kéo mọi thiết bị về trạng thái mong muốn để sửa tạm không thành cấu hình vĩnh viễn không ai biết.

Bài học cho SWE

  • Reconcile định kỳ về trạng thái khai báo biến sửa tay thành tạm thời theo định nghĩa; muốn giữ thì phải vào inventory.
  • Backup trước, dừng khi bước trước lỗi, alert: ba điều kiện để tự động ghi đè hàng nghìn thiết bị an toàn.
  • Tách ý định (biến) khỏi cú pháp (template theo hãng) để đa hãng không nhân đôi cấu hình.

Liên quan