Route Advertisement & Propagation — Điều khiển route đi tới đâu
Why this matters in production
File 03 và 04 cho bạn biết Cloud Router là gì và BGP session vận hành thế nào. File này trả lời câu hỏi vận hành then chốt: những route nào được công bố ra ngoài, những route học được lan tới đâu trong VPC, và bạn điều khiển hai chiều đó bằng cơ chế gì. Đây là nơi sinh ra một trong những sự cố gây bối rối nhất trên GCP:
"On-prem reachable hoàn hảo từ VM ở
us-central1, nhưng cùng dải đó hoàn toàn không thông từ VM ởeurope-west1— dù cùng VPC, cùng firewall, cùng mọi thứ."
Người chưa hiểu cơ chế sẽ debug firewall hàng giờ. Người hiểu sẽ nhận ra ngay: đây là vấn đề dynamic routing mode + phạm vi propagation của dynamic route, và sửa bằng đúng một flag. File này mổ xẻ chính xác cơ chế đó, cùng các công cụ điều khiển advertisement (cái gì ra) và import (cái gì vào, ưu tiên ra sao).
Internal model — hai chiều: advertisement (ra) và learning (vào)
Một BGP session của Cloud Router là kênh hai chiều, và hai chiều được điều khiển độc lập:
┌──────────────── Cloud Router ────────────────┐
│ │
on-prem ──┤ ◄── ADVERTISEMENT: VPC công bố prefix ra │
│ (subnet routes của VPC, custom ranges) │
│ │
│ ──► LEARNING: VPC học prefix từ on-prem ──► │── program vào
│ (qua BGP UPDATE) → dynamic route │ VPC route table
└──────────────────────────────────────────────┘Hai chiều này độc lập đến mức một lỗi thường gặp là asymmetric reachability: VPC học route on-prem (chiều vào ổn) nhưng on-prem không nhận route VPC (chiều ra hỏng) → traffic đi được một chiều, chiều về blackhole. Luôn kiểm tra cả hai chiều khi debug.
Chiều RA: advertisement mode — default vs custom
Cloud Router quyết định công bố prefix nào ra peer theo advertisement mode:
- Default advertisement (mặc định): Cloud Router tự động advertise các subnet route mà nó có quyền (tùy dynamic routing mode — xem dưới). Bạn không liệt kê thủ công; thêm subnet mới thì nó tự được advertise. Đơn giản, nhưng kém kiểm soát.
- Custom advertisement: Bạn khai báo tường minh tập prefix advertise, gồm:
- Advertised groups: nhóm dựng sẵn, ví dụ
all_subnets(mọi subnet route). - Advertised IP ranges: dải tùy ý bạn liệt kê — kể cả dải không thuộc VPC (ví dụ để on-prem định tuyến một dịch vụ qua VPC), hoặc dải tổng hợp (summary) thay cho nhiều subnet nhỏ.
- Advertised groups: nhóm dựng sẵn, ví dụ
Theo tài liệu Cloud Router, Cloud Router hỗ trợ "advertise custom address ranges" và "advertise specific VPC subnets". Custom advertisement là công cụ chính để summarize (gộp 10.0.0.0/8 thay vì hàng trăm /24) nhằm giữ số prefix ở on-prem và ở Cloud Router dưới quota — một lý do vận hành quan trọng, không chỉ thẩm mỹ.
Advertisement có thể đặt ở mức router (áp cho mọi peer) hoặc mức từng peer (mỗi peer thấy tập khác nhau) — nền tảng cho các thiết kế active/standby và policy theo site.
Chiều VÀO: learning → program thành dynamic route
Khi nhận BGP UPDATE, Cloud Router chạy best-path selection (file 03), dịch prefix thắng thành dynamic route trong VPC route collection với:
destRange= prefix nhận được,priority= suy ra từ MED của route (xem dưới),type= dynamic.
Sau đó route được program vào forwarding state của các VM trong phạm vi cho phép bởi dynamic routing mode. Chính bước "phạm vi program" này là trái tim của sự cố cross-region.
MED → priority: điều khiển ưu tiên path
GCP ánh xạ MED (Multi-Exit Discriminator) của route BGP nhận được thành priority của dynamic route trong VPC (MED thấp → priority cao hơn, tức đường ưu tiên). Đây là đòn bẩy điều khiển failover:
- Advertise cùng prefix với MED khác nhau từ hai đường → đường MED thấp thành active, đường MED cao thành standby. Khi active down, route bị rút → standby (đã program sẵn) tiếp quản (file 02, route resolution chọn priority thấp hơn còn lại).
- Advertise cùng prefix với cùng MED từ hai đường → cùng priority → ECMP (load-balance theo flow).
Ở chiều ra, bạn có thể tác động ngược lại: dùng AS_PATH prepending (kéo dài AS_PATH khi advertise ra on-prem) để on-prem coi một đường là "xa hơn" và ưu tiên đường kia — cơ chế chuẩn để chỉ định active/standby từ góc nhìn on-prem.
Dynamic routing mode: regional vs global — gốc rễ của "route biến mất giữa region"
Đây là phần quan trọng nhất file. Dynamic routing mode là thuộc tính của VPC (không phải của Cloud Router) điều khiển phạm vi của cả learning lẫn advertisement đối với dynamic route.
Regional dynamic routing (mặc định):
VPC (regional dynamic routing)
┌──────────────────────────────────────────────┐
│ us-central1 europe-west1 │
│ Cloud Router A (không có CR) │
│ ├ học 192.168.0.0/16 │ │
│ │ từ on-prem │ │
│ ▼ ▼ │
│ dynamic route CHỈ program KHÔNG có route │
│ vào VM us-central1 tới on-prem │
│ │
│ CR A chỉ advertise subnet ───────────── │
│ route CỦA us-central1 ra on-prem │
└──────────────────────────────────────────────┘Ở chế độ regional, dynamic route do Cloud Router ở region X học chỉ được program vào VM trong region X, và Cloud Router chỉ advertise subnet route của region X ra on-prem. Đây chính xác là nguyên nhân triệu chứng mở đầu: VM europe-west1 không có route tới on-prem vì không có Cloud Router/kết nối hybrid ở europe-west1, và route học ở us-central1 không vượt biên giới region. Không phải lỗi firewall.
Global dynamic routing:
VPC (global dynamic routing)
┌──────────────────────────────────────────────┐
│ us-central1 europe-west1 │
│ Cloud Router A (không có CR) │
│ ├ học 192.168.0.0/16 │
│ ▼ │
│ dynamic route program vào MỌI region ───────►│ VM europe-west1
│ │ reach on-prem
│ CR A advertise subnet route của MỌI region │
│ ra on-prem (kèm inter-region cost vào MED) │
└──────────────────────────────────────────────┘Ở chế độ global, dynamic route học bởi bất kỳ Cloud Router được program vào mọi region của VPC, và mỗi Cloud Router advertise subnet route của tất cả region ra on-prem. Đổi đúng một thuộc tính VPC (--bgp-routing-mode=global) làm route "xuất hiện" ở europe-west1.
Inter-region cost (regional cost) cộng vào MED: Để on-prem (và VPC) vẫn ưu tiên đường gần khi có nhiều lối ra ở nhiều region, global mode cộng một inter-region cost vào MED của route được advertise/program từ một region khác. Cost này phản ánh độ trễ liên-region và nằm trong dải khoảng 201–9999 (cộng thêm trên base cost của region nội bộ, thường ≤ 200). Hệ quả thực tế: với global mode, một prefix on-prem advertise ra cả hai region sẽ được VM ưu tiên đi qua Cloud Router cùng region (MED thấp hơn), chỉ rơi sang region khác khi đường gần down. Đây là cơ chế tránh "tromboning" (traffic vòng vèo qua region xa không cần thiết) trong khi vẫn có failover toàn cục.
Trade-off cốt lõi regional vs global:
- Regional: cô lập lỗi (sự cố routing ở một region không lan), nhưng bạn phải tự dựng kết nối hybrid ở mỗi region cần reach on-prem.
- Global: một kết nối hybrid phục vụ mọi region (tiết kiệm), nhưng tạo phụ thuộc chéo region và có thể gây asymmetric/tromboning routing nếu thiết kế MED/cost không cẩn thận. Đổi lại GCP tự cộng inter-region cost để giảm tromboning.
Route policies (import/export): điều khiển tinh vi chiều vào/ra
Ngoài advertisement mode đơn giản, Cloud Router hỗ trợ BGP route policies — cơ chế filtering/transform tinh vi hơn, theo hai hướng:
- Export policy: lọc/biến đổi route trước khi advertise ra peer (ví dụ chỉ advertise prefix mang community nhất định; prepend AS_PATH cho một nhóm prefix).
- Import policy: lọc/biến đổi route khi học từ peer (ví dụ chỉ chấp nhận prefix nằm trong một allowlist; gán lại MED để ép priority).
Theo tài liệu Cloud Router, route policies cho phép "filter and modify BGP route attributes". Chúng dùng để hiện thực các pattern policy thật: chấp nhận route critical-tagged ở region production nhưng từ chối ở dev; ngăn học default route từ một peer kém tin cậy; chuẩn hóa MED khi nhận từ nhiều site. Đây là tầng kiểm soát thay thế và mạnh hơn cấu hình advertised-ranges thuần.
Constraints, trade-offs & failure modes
Asymmetric reachability vì cấu hình advertisement/learning lệch
Vì ra/vào độc lập, lỗi phổ biến nhất là một chiều cấu hình thiếu: VPC học route on-prem (vào ổn) nhưng không advertise subnet ra (ra thiếu) → on-prem không biết đường về VPC → ping một chiều. Quy trình debug đúng: trên Cloud Router xem cả numLearnedRoutes (chiều vào) và danh sách advertised (chiều ra), rồi đối chiếu với BGP table của on-prem.
Quota prefix là trần cứng của propagation
Cả route học (vào) lẫn route advertise (ra) đều đếm vào quota prefix. Khi global mode khuếch đại số region, số prefix có thể nhân lên (mỗi region advertise subnet của mọi region). Vượt quota → ngừng học/advertise prefix mới → mất reachability một phần khó đoán. Summarization (custom advertised ranges) là biện pháp chính; alerting trên metric số prefix là bắt buộc.
Global mode khuếch đại blast radius
Regional mode cô lập: một BGP misconfiguration ở us-central1 chỉ ảnh hưởng us-central1. Global mode lan route đi mọi nơi → một route sai (ví dụ on-prem vô tình advertise 0.0.0.0/0) có thể hút toàn bộ egress của mọi region về on-prem (default route học được, longest-prefix/priority tùy cấu hình). Import policy chặn các prefix nguy hiểm (như 0.0.0.0/0) từ peer là lưới an toàn quan trọng ở global mode.
MED không phải lúc nào cũng được tôn trọng nguyên trạng
MED chỉ so sánh được giữa các route từ cùng AS lân cận theo chuẩn BGP. Khi thiết kế failover đa-site đa-AS, đừng giả định MED một mình đủ điều khiển; kết hợp AS_PATH prepend và route policy để đạt hành vi mong muốn. Hiểu sai điểm này dẫn tới "tôi đặt MED rồi mà nó không nghe lời".
Anti-pattern: dùng global dynamic routing như mặc định mà không hiểu hệ quả
- Vì sao xảy ra: global mode "tiện" (một kết nối phục vụ mọi region), nên bị bật mặc định mà không cân nhắc blast radius và tromboning.
- Hệ quả ở scale: một route sai từ on-prem lan toàn cục; egress đi vòng qua region xa làm tăng latency và chi phí inter-region; debug khó vì lỗi "ở khắp nơi".
- Cách tư duy đúng: chọn mode theo yêu cầu: nếu mỗi region tự có lối ra hybrid và bạn muốn cô lập lỗi → regional. Nếu bạn cố tình muốn một kết nối phục vụ nhiều region → global, nhưng bắt buộc kèm import policy chặn prefix nguy hiểm và hiểu inter-region cost. Global không phải "nâng cấp" của regional; nó là một trade-off khác.
GCP-native implementation guidance
# Đặt dynamic routing mode ở mức VPC (gốc của vấn đề cross-region)
gcloud compute networks update prod-vpc --bgp-routing-mode=global # hoặc regional
# Custom advertisement: summarize để giữ dưới quota prefix
gcloud compute routers update cr-us-central1 --region=us-central1 \
--advertisement-mode=CUSTOM \
--set-advertisement-groups=all_subnets \
--set-advertisement-ranges=10.0.0.0/8
# Advertisement theo từng peer (active/standby qua AS_PATH/MED)
gcloud compute routers update-bgp-peer cr-us-central1 --region=us-central1 \
--peer-name=peer-site-b \
--advertised-route-priority=200 # ánh xạ sang MED khi advertise
# Kiểm tra CẢ hai chiều khi debug
gcloud compute routers get-status cr-us-central1 --region=us-central1 \
--format="yaml(result.bgpPeerStatus[].name,
result.bgpPeerStatus[].numLearnedRoutes,
result.bgpPeerStatus[].advertisedRoutes)"Tóm tắt mental model
- BGP session hai chiều, advertisement (ra) và learning (vào) điều khiển độc lập → coi chừng asymmetric reachability.
- Advertisement mode: default (tự advertise subnet) vs custom (liệt kê ranges, dùng để summarize giữ dưới quota prefix).
- MED → priority: cùng MED → ECMP; khác MED → active/standby. AS_PATH prepend điều khiển ưu tiên từ phía on-prem.
- Dynamic routing mode (thuộc tính VPC) quyết định phạm vi propagation của dynamic route: regional (chỉ region của Cloud Router) vs global (mọi region, kèm inter-region cost ~201–9999 vào MED để tránh tromboning).
- Route policies (import/export) là tầng filter/transform tinh vi; import policy chặn prefix nguy hiểm là lưới an toàn ở global mode.
- Quota prefix là trần cứng; global mode khuếch đại cả số prefix lẫn blast radius.
References
- Cloud Router Overview — advertisement, route policies, dynamic routing mode
- VPC Dynamic routing mode — regional vs global, phạm vi route
- Advertise custom IP ranges / summarization
- VPC Routes — Routing order — priority/MED, longest-prefix tương tác với dynamic route