Tungsten Fabric vRouter Phần 1: Bức Tranh Tổng Quan
Phần 1/18 trong loạt Tungsten Fabric vRouter — bài mở đầu bắt buộc đọc trước mọi module. Chưa có lab, chưa có CLI sâu — bài này chỉ trả lời ba câu hỏi: vRouter là gì, tại sao series này lại tồn tại song song với series Contrail Architecture (Juniper) đã publish, và series này sẽ đưa bạn đi đâu. Module 1 (Bài 2 trở đi) mới bắt đầu đào sâu và dựng lab thật.
Mục tiêu bài học: sau bài này bạn phân biệt được vRouter (data-plane component, chạy trên compute node) với các khái niệm đã học ở series Contrail Architecture (kiến trúc tổng, ba loại node Controller), xác định được vì sao series này verify trên nhánh OpenSDN thay vì tài liệu Tungsten Fabric gốc, và nắm được lộ trình 18 bài phía trước trước khi bắt tay vào lab ở Bài 3.
Người đọc giả định: bạn đã đọc ít nhất Bài 1 và Bài 17 của series Open vSwitch (OVS) (kiến trúc OVS/OVN, tunnel VXLAN host-based) và ba bài đầu của series Contrail Architecture (Juniper) (kiến trúc tổng Agent/Forwarder, ba loại node Config/Control/Analytics theo phong cách Mental Model). Bài này không giảng lại những gì hai series đó đã có — chỉ tóm tắt và chỉ rõ series này khác gì.
Ba câu hỏi mà bài này trả lời:
- vRouter là gì, và định nghĩa đó trên OpenSDN hiện tại còn khớp với những gì series Contrail Architecture đã dạy không?
- Vì sao một series mới lại cần thiết, nếu kiến trúc tổng đã có đầy đủ ở series Contrail Architecture?
- Series này (18 bài, 4 module) đi theo lộ trình nào?
Mục lục
- 1. Bạn đã đứng ở đâu: OVS/OVN và Contrail Architecture
- 2. Tungsten Fabric archived → OpenSDN: vì sao series này verify trên nhánh này
- 3. vRouter là gì: verify lại định nghĩa, và series này sẽ khác gì
- 4. Nhìn thử vRouter lần đầu (placeholder, chưa có lab)
- 5. Lộ trình học phía trước
- Bài tập cuối bài
1. Bạn đã đứng ở đâu: OVS/OVN và Contrail Architecture
Trước khi nói vRouter là gì, cần định vị nó trong bức tranh bạn đã có sẵn trong đầu từ hai series trước.
Series OVS dạy bạn một switch phần mềm sống bên trong hypervisor: ovsdb-server giữ "khung xương" (bridge, port, tunnel), ovs-vswitchd chạy pipeline OpenFlow match/action, và OVN (Bài 17 OVS) là lớp logical network đứng trên cả hai để tự động hóa. Bạn đã tự tay ovs-vsctl add-br, tự tay ovs-ofctl add-flow, tự tay dựng tunnel VXLAN trên OVS (Bài 9 OVS) — toàn bộ kiến thức đó là hands-on, CLI-first.
Series Contrail Architecture (Juniper) dạy bạn một kiến trúc khác hẳn: không có OpenFlow, không có OVSDB — thay vào đó là ba loại node trong SDN Controller (Config Node, Control Node, Analytics Node) nói chuyện với một vRouter chạy trên compute node qua XMPP, và vRouter tự nó lại tách thành Agent (user space) và Forwarding Plane (kernel/DPDK) — đã có sơ đồ chi tiết ở Contrail Part 3. Nhưng series đó cố tình đi theo phong cách Mental Model — analogy, sơ đồ, output CLI minh họa (vif --list, rt --dump...) — không có một dòng lab thật nào, không dựng cluster, không chạy lệnh trên máy thật.
💡 Hình dung như thế này: series OVS giống một khóa học lái xe — bạn đã ngồi sau vô-lăng, tự tay đánh lái. Series Contrail Architecture giống một cuốn sách giải thích nguyên lý động cơ đốt trong bằng sơ đồ cắt lớp — bạn hiểu piston, van, trục cam hoạt động thế nào, nhưng chưa từng mở nắp capo một chiếc xe thật. Series Tungsten Fabric vRouter này là bước tiếp theo: lấy đúng cuốn sách nguyên lý đó, mở nắp capo một chiếc xe thật (OpenSDN), và bắt đầu vặn ốc.
2. Tungsten Fabric archived → OpenSDN: vì sao series này verify trên nhánh này
Điểm này đã được nghiên cứu kỹ trước khi thiết kế toàn bộ series (xem mục verify đầu file outline nội bộ), tóm tắt lại phần cần thiết cho người đọc:
Dự án gốc Tungsten Fabric (quản lý bởi Linux Foundation Networking, bản mã nguồn mở song song với Contrail thương mại của Juniper — đã nhắc ở Contrail Part 1) bị Technical Steering Committee (TSC) của dự án biểu quyết đưa vào trạng thái ngừng phát triển chính thức từ mùa hè 2023. Cộng đồng sau đó tạo ra một fork trực tiếp mang tên OpenSDN (github.com/opensdn-io, tài liệu tại docs.opensdn.io), tự nhận là kế thừa toàn bộ kiến trúc và "có thể thay thế trực tiếp" Tungsten Fabric. Đây là nhánh duy nhất còn có bằng chứng phát triển đều đặn (nhiều repo cập nhật trong vòng vài ngày đến vài tuần tính đến 01/09/2026) tại thời điểm viết series. Không phải lựa chọn lý tưởng — nhưng là lựa chọn duy nhất còn kiểm chứng được.
💡 Hình dung như thế này: giống một dự án mã nguồn mở bị công ty tài trợ chính rút lui, rồi một nhóm maintainer cũ tách ra tự duy trì dưới tên khác — code gốc gần như giữ nguyên ở ngày rẽ nhánh, nhưng từ đó về sau hai nhánh có thể trôi dần theo hai hướng khác nhau nếu không có ai đứng ra hợp nhất lại.
Quyết định cho series này: dùng OpenSDN làm nhánh target để verify mọi CLI/API/hành vi khi viết bài thật, dùng README/docs của opensdn-io thay vì tài liệu Tungsten Fabric cũ (docs.tungsten.io hiện không còn truy cập được, tungsten.io redirect về trang tổng của LF Networking). Tên series vẫn giữ "Tungsten Fabric vRouter" vì đây là tên kiến trúc quen thuộc hơn với người đọc đã qua series Contrail Architecture, và OpenSDN tự nhận kế thừa 100% kiến trúc đó — nhưng mọi lệnh/output trong series này đều ghi rõ đã verify trên OpenSDN, không mặc định đúng với tài liệu Tungsten Fabric/Contrail cũ, vì chính OpenSDN cũng cảnh báo hai nhánh "sẽ dần phân kỳ theo thời gian" ("will likely diverge over time"). Riêng CN2 (Cloud-Native Contrail Networking, thương mại, HPE Juniper — đã nhắc ở Contrail Part 9) đã tách hẳn kiến trúc sang Kubernetes-native/CRD/etcd — series này không dùng CN2 làm nguồn verify.
3. vRouter là gì: verify lại định nghĩa, và series này sẽ khác gì
Định nghĩa — verify trực tiếp từ source, không suy đoán
README của repo lõi opensdn-io/tf-vrouter (fork trực tiếp từ Juniper/contrail-vrouter, còn giữ nguyên tên nội bộ "contrail-vrouter") mở đầu bằng đúng một câu:
"The Contrail Virtual Router implements the data-plane functionality that allows a virtual interface to be associated with a VRF."
Câu này khớp hoàn toàn về bản chất với những gì Contrail Part 3 đã mô tả: vRouter là thành phần data-plane, việc của nó là gán một virtual interface (vif — vNIC của VM) vào đúng một routing instance (VRF), rồi forward packet dựa trên bảng đó. Không có gì trôi nghĩa giữa bản OpenSDN hiện tại và khái niệm đã học.
Đối chiếu tiếp với trang opensdn.io (Understanding OpenSDN), bốn thành phần được liệt kê gần như nguyên văn giống ba loại node + vRouter đã học ở Contrail Part 2-3:
| Thành phần | Nguyên văn OpenSDN | Đối chiếu Contrail Architecture |
|---|---|---|
| Configuration Node | "accepts requests from the API to provision workflows like adding new virtual networks, new endpoints, and much more" | Khớp Contrail Part 2, Section 3.1 — "Compiler" của SDN |
| Control Node | "maintains a scalable, highly available network model and state by federating with other peer instances of itself" | Khớp Section 3.2 — Routing Engine phân tán, IBGP giữa các Control Node |
| Analytics Node | "collects, stores, correlates, and analyzes data across network elements" | Khớp Section 3.3 — telemetry, Sandesh Collector |
| vRouter | "run in one of two high performance implementations: as a Linux kernel module or as an Intel Data Plane Development Kit (DPDK)-based process" | Khớp Contrail Part 3, Section 4 — kernel module vs DPDK |
Kết luận verify: định nghĩa và mô tả kiến trúc bốn thành phần chính chưa trôi nghĩa giữa Tungsten Fabric cũ và OpenSDN hiện tại — điều này hợp lý vì đây là phần kiến trúc lõi, ít thay đổi nhất trong một dự án networking.
Tên gói/component cụ thể — phần nào đã verify, phần nào còn để ngỏ
Đi xuống một mức chi tiết hơn (đúng câu hỏi outline đặt ra: có đổi tên contrail-* không), kết quả không đồng đều.
Repo lõi vẫn tên tf-vrouter (không đổi thành opensdn-vrouter), và thư mục utils/ bên trong vẫn chứa nguyên vif.c, rt.c, nh.c, mpls.c, flow.c — đúng những binary đã dùng trong ví dụ CLI ở Contrail Part 3. Trang Using Contrail-Tools xác nhận package chứa các lệnh này tên là contrail-tools (không phải contrail-utils), đóng gói dưới dạng container, có sẵn mặc định từ bản OpenSDN Release 2008 trở đi (số hiệu phiên bản kiểu YYMM kế thừa từ cách đặt tên Contrail cũ — tức năm/tháng phát hành, không phải năm 2008) — đây chính là câu trả lời cho câu hỏi "tên gói nào chứa vif/flow/nh/rt/mpls" mà outline nội bộ để ngỏ. Kernel module build ra cũng vẫn tên vrouter.ko, và lệnh kiểm tra trạng thái tổng cluster vẫn là contrail-status, chạy được cả trên Controller node lẫn compute node với output theo đúng cấu trúc từng khối (control, analytics, config, vrouter...) như ví dụ đã có ở Contrail Part 2.
Nhưng không phải mọi thứ đều verify được ở mức này. Tên service/process cụ thể bên trong container — ví dụ agent có còn tên tiến trình contrail-vrouter-agent hay đã đổi — vẫn còn để ngỏ: các trang kiến trúc tổng quan đã đọc không liệt kê chi tiết tới mức đó, chỉ nói chung là "multiprocess Docker container" cấu hình qua file INI. Đây là câu hỏi Bài 3 (dựng lab thật) sẽ buộc phải trả lời, khi cần biết chính xác tên service để restart/kiểm tra.
💡 Nối tiếp hình ảnh ở Mục 2: công ty đổi biển hiệu ngoài cửa xong, nhưng đội kỹ sư và tên phòng ban bên trong (
vif.c,rt.c...) vẫn làm việc y như cũ — decal tên phòng có khi còn chưa kịp bóc.
Series này sẽ khác Contrail Architecture ở đâu
Toàn bộ phần kiến trúc tổng — Agent (user space, XMPP client, first-packet policy) vs Forwarding Plane (kernel/DPDK, flow table, encap/decap), ba loại node Controller, luồng "VM Route Propagation" — đã có đầy đủ ở Contrail Part 2 và Contrail Part 3. Series này không vẽ lại các sơ đồ đó — từ Bài 2 trở đi, mỗi bài sẽ mở đầu bằng một đoạn tóm tắt ngắn kèm link ngược, rồi dành toàn bộ phần còn lại cho những gì series Contrail Architecture (theo đúng phong cách Mental Model, không lab) chưa từng làm:
- CLI introspect chạy thật, không phải output minh họa:
vif --list,rt --dump,nh --get,mpls --dump,flow -ltrên một cluster OpenSDN thật (Bài 3-4). - Packet walk mức byte-level: từng trường header thay đổi ra sao qua mỗi bước encap/decap, thay vì mô tả luồng ở mức khái niệm (Bài 2, 8, 10).
- Lab thật: dựng OpenSDN all-in-one, tạo VN, service chain, security group, floating IP — quan sát hành vi thật thay vì chỉ đọc lý thuyết (từ Bài 3 trở đi, xuyên suốt Module 2-3).
- Đối chiếu ba chiều: không chỉ so với Contrail Architecture, mà còn so trực tiếp với OVS/OVN (đã học) và fabric EVPN/VXLAN vật lý (leaf/spine bạn đã vận hành) — đặc biệt ở Bài 8 (encapsulation) và Bài 18 (bài chốt).
4. Nhìn thử vRouter lần đầu (placeholder, chưa có lab)
Bài 3 mới thực sự dựng lab all-in-one và trả lời câu hỏi "dùng công cụ nào để dựng nhanh nhất" (tf-devstack / tf-dev-env / tf-ansible-deployer — cả ba repo đều tồn tại trong opensdn-io, cần so sánh trước khi chọn). Ở đây chỉ ghi lại đúng cú pháp đã verify qua docs.opensdn.io, chưa chạy trên máy thật — output đầy đủ sẽ có ở Bài 3.
# Placeholder — cú pháp đã verify qua docs.opensdn.io (Using Contrail-Tools),
# CHƯA chạy trên lab thật. Bài 3 sẽ dựng cluster all-in-one và chạy lại các lệnh này thật.
# Kiểm tra trạng thái tổng của một node (Controller hoặc Compute) — chạy riêng trên từng node
contrail-status
# contrail-tools: container gộp toàn bộ CLI introspect vRouter kể từ OpenSDN Release 2008,
# có 2 cách chạy: vào container tương tác, hoặc gọi thẳng một lệnh cụ thể
contrail-tools # vào container tương tác
contrail-tools vif # chạy thẳng "vif" bên trong container, không cần vào tương tác
# Output minh họa cấu trúc — dựa trên mô tả trong docs.opensdn.io, KHÔNG phải output đã chạy thật
== Contrail Config ==
api: active
...
== Contrail Control ==
control: active
...
== Contrail vRouter ==
agent: active
...
(Placeholder — cấu trúc dựa trên tài liệu đã verify, số liệu/trạng thái cụ thể chỉ có ý nghĩa khi chạy trên lab thật ở Bài 3. Tên service chi tiết bên trong từng khối — ví dụ tiến trình agent có còn gọi contrail-vrouter-agent hay không — chưa verify được ở mức container/process, sẽ xác nhận khi dựng lab.)
Khác với Bài 1 OVS (nơi ovs-vsctl --version chạy ngay được trên một máy Linux bất kỳ vì OVS là một package cài trực tiếp), vRouter/OpenSDN là một cluster nhiều container/node — không có lệnh "version-check" đơn lẻ chạy được ngay trên máy cá nhân mà không cần dựng gì. Đây là lý do outline đặt việc dựng lab vào hẳn một bài riêng (Bài 3) thay vì gộp vào bài mở đầu như series OVS.
5. Lộ trình học phía trước
| Module | Bài | Trọng tâm |
|---|---|---|
| Module 1 — Nền tảng | Bài 1-5 | Tổng quan (bài này) → Agent vs Forwarder sâu, 4 kiểu forwarder → Lab đầu tiên: dựng OpenSDN all-in-one → Cấu trúc forwarder sâu + CLI introspect → XMPP Agent↔Controller sâu + toolbox introspect tổng hợp |
| Module 2 — Trung cấp | Bài 6-9 | Config Node & REST API thật → Control Node & BGP EVPN sâu → MPLSoUDP vs VXLAN trên vRouter (bài trọng tâm) → Security Group/Network Policy + Floating IP/SNAT |
| Module 3 — Nâng cao | Bài 10-14 | Flow setup chi tiết (pkt0, flow aging, ECMP) → Forwarder hiệu năng cao (DPDK/SR-IOV/SmartNIC) → Service chaining sâu → Multi-tenancy & route leaking giữa VRF → Analytics node + toolbox troubleshooting tổng hợp |
| Module 4 — Chuyên gia | Bài 15-18 | vRouter trong OpenStack (Neutron) → vRouter trong Kubernetes → High Availability & scale-out → Tổng kết: vRouter vs OVN vs EVPN-VXLAN fabric thuần (bài chốt) |
| Phụ lục | mở khi cần | So sánh vRouter vs OVS/OVN, vRouter vs VPP, lịch sử rebrand OpenContrail→Tungsten Fabric→OpenSDN, FAQ vận hành |
Thứ tự này không ngẫu nhiên: Module 1 (Bài 3) buộc phải dựng lab trước, vì gần như mọi bài từ Module 2 trở đi đều cần một cluster OpenSDN sống để chạy CLI thật. Bài 8 (Module 2) là bài trọng tâm — nơi ba lớp kiến thức bạn có (fabric EVPN/VXLAN vật lý, OVS/OVN, vRouter) lần đầu được đặt cạnh nhau trực diện. Bài 18 (bài chốt) quay lại đúng câu hỏi Mục 1 bài này vừa đặt ra, nhưng lúc đó bạn đã có đủ dữ liệu thật (không chỉ lý thuyết) để tự trả lời.
Nếu bạn chỉ đọc kỹ được một mục trong bài này, hãy chọn Mục 3 — nó trả lời đúng câu hỏi cốt lõi (vRouter là gì, và series này khác gì so với những gì bạn đã học), còn lại chỉ là bối cảnh và lộ trình.
Bài tập cuối bài
-
Đọc
opensdn.io/about/và README củagithub.com/opensdn-io/tf-vrouter(cả hai đều rất ngắn, không quá 5 phút đọc). Từ hai nguồn đó, tự liệt kê 3 điểm về kiến trúc Agent/Forwarder mà Contrail Part 3 chưa từng nhắc tới — gợi ý hướng tìm: cấu trúc thư mục mã nguồn (dp-core/dpdk/linux/utils), quy trình build ravrouter.kovàcontrail-vrouter-dpdk, hoặc repotf-dev-envmà README trỏ tới để build. Không cần đúng tuyệt đối — mục tiêu là tập thói quen tự đọc source/README thay vì chỉ tin lại nội dung đã học, và chuẩn bị sẵn câu hỏi cho Bài 2 (nơi 4 kiểu forwarder sẽ được so sánh chi tiết). -
Từ trí nhớ (không nhìn lại bài), vẽ tay sơ đồ 3 cột ở Mục 1 — chỉ cần ghi đúng tên 3 cột và 1 câu mỗi cột mô tả "điểm khác biệt cốt lõi" so với hai cột còn lại. So lại với SVG trong bài — nếu không phân biệt rõ được "Contrail Architecture = kiến trúc + Mental Model, không lab" khỏi "series này = cùng kiến trúc + lab thật", đọc lại Mục 1 và Mục 3 trước khi sang Bài 2.
Nguồn tham khảo
- Định nghĩa vRouter, cấu trúc thư mục
dp-core/dpdk/linux/utils, tên outputvrouter.ko/contrail-vrouter-dpdk, tham chiếu repo buildtf-dev-env— README, github.com/opensdn-io/tf-vrouter, truy cập 01/09/2026. - Mô tả 4 thành phần Configuration/Control/Analytics Node và vRouter (kernel module hoặc DPDK-based process) — Understanding OpenSDN Components, docs.opensdn.io, truy cập 01/09/2026.
- Package
contrail-toolsgộp các CLIvif/flow/nh/rt/mpls, có sẵn mặc định từ OpenSDN Release 2008, hai cách chạy (tương tác/trực tiếp) — Using Contrail-Tools, docs.opensdn.io, truy cập 01/09/2026. - Lệnh
contrail-statuschạy trên cả Controller node và Compute node để kiểm tra trạng thái container/service — kết quả tìm kiếm trên docs.opensdn.io (trang Getting Started/Upgrade), truy cập 01/09/2026; output cấu trúc đầy đủ chưa verify bằng lab thật, sẽ xác nhận ở Bài 3. - Repo
OpenSDN-io/tf-vrouterlà fork trực tiếp, thư mụcutils/còn nguyênvif.c/rt.c/nh.c/mpls.c/flow.c— GitHub REST APIapi.github.com/repos/OpenSDN-io/tf-vrouter, truy vấn trực tiếp 01/09/2026. - Sự kiện Tungsten Fabric archived (TSC vote, mùa hè 2023) → fork OpenSDN, nguyên văn "OpenSDN is a direct fork of Tungsten Fabric (TF)... The LFN shut down the Tungsten Fabric in summer of 2023" — OpenSDN — About; đối chiếu Contrail Architecture Part 1 và Part 9 — nghiên cứu đã thực hiện trước khi thiết kế series (GitHub API
orgs/tungstenfabric,orgs/opensdn-io, WebFetch trực tiếp), truy cập 01/09/2026. - Kiến trúc tổng Agent/Forwarder, ba loại node Controller, luồng VM Route Propagation — đã verify và publish tại Contrail Architecture (Juniper) — Part 1, Part 2, Part 3.
- Kiến trúc OVS/OVN, VXLAN host-based trên OVS — Open vSwitch (OVS) — Part 1, Part 17 — OVN.
Tiếp theo: Module 1, Bài 2 — Kiến trúc Agent vs Forwarder sâu, 4 kiểu forwarder.