Skip to content

Dynamic Routes và Cloud Router — BGP trong GCP và Cơ Chế Học Route Tự Động

Cloud Router Là Gì — Và Quan Trọng Hơn, Nó Không Là Gì

Cloud Router là thành phần BGP trong GCP VPC — nhưng nó không phải là router theo nghĩa truyền thống. Tài liệu GCP xác nhận rõ: Cloud Router không thực hiện packet forwarding hay routing. Toàn bộ data plane (việc thực sự forward packets) vẫn do Andromeda agent trên mỗi host thực hiện.

Vậy Cloud Router làm gì? Nó là một BGP control plane daemon:

  1. Thiết lập BGP sessions với peers (Cloud VPN, Interconnect, on-premises)
  2. Nhận route advertisements từ BGP peers
  3. Đưa các routes học được vào VPC route table (dynamic routes)
  4. Quảng bá subnet ranges và các IP ranges khác của VPC tới BGP peers

Khi Cloud Router học được route 192.168.0.0/16 từ on-premises qua BGP, nó chuyển thông tin này cho GCP control plane, control plane tạo dynamic route trong VPC route table, và Andromeda agents trên tất cả hosts được cập nhật. Chính Andromeda (không phải Cloud Router) forward packets đến on-premises.

Internal Model: BGP Session Lifecycle

Tạo Cloud Router

bash
gcloud compute routers create prod-router \
  --network=prod-vpc \
  --region=us-west1 \
  --asn=65001

Cloud Router cần một ASN (Autonomous System Number) — đây là ASN của VPC trong BGP. GCP không cấp ASN này — bạn chọn một ASN private (64512-65534 theo RFC 6996) hoặc public ASN nếu bạn có.

Khi tạo Cloud Router:

  • GCP deploy BGP daemon (phần mềm) trong GCP infrastructure (không phải trên VM của bạn)
  • Daemon lắng nghe các BGP connections từ peers
  • Daemon quảng bá VPC subnet ranges theo cấu hình

BGP Session Mechanics

Khi bạn thêm BGP peer (ví dụ: on-premises router qua Cloud VPN):

bash
gcloud compute routers add-bgp-peer prod-router \
  --peer-name=onprem-peer \
  --peer-asn=65002 \
  --peer-ip-address=169.254.1.2 \
  --interface=prod-vpn-interface \
  --advertised-route-priority=100 \
  --region=us-west1

BGP link IPs (169.254.x.x) là link-local addresses — đây là GCP tunnel interface IPs, không phải VPC subnet IPs. Chúng chỉ dùng cho BGP control plane communication, không cho data plane.

Quá trình establish BGP session:

  1. Cloud Router gửi BGP OPEN message đến peer
  2. Peer respond với OPEN message của nó (ASN, capabilities)
  3. Trao đổi KEEPALIVE để maintain session
  4. Bắt đầu trao đổi UPDATE messages (route advertisements)
  5. Session UP → Cloud Router bắt đầu nhận routes từ peer

Hold timer mặc định: 90 giây. Nếu không có KEEPALIVE trong 90 giây, BGP session được coi là DOWN và routes học được bị rút khỏi route table.

Khi BGP Peer Fail

Thời gian 0:    BGP peer (on-premises router) bị restart
Thời gian +30s: Hold timer expire → BGP session DOWN
Thời gian +30s: Cloud Router withdraw tất cả routes từ peer đó
Thời gian +30s: Dynamic routes từ peer bị xóa khỏi VPC route table
Thời gian +30s: Andromeda agents update: không còn route đến 192.168.0.0/16
Thời gian +31s: Traffic đến 192.168.0.0/16 bị drop (hoặc route fallback)

Sau khi peer recover:
  BGP reconnect → routes được re-advertised → route table update

GCP BGP hỗ trợ BFD (Bidirectional Forwarding Detection) để detect peer failure nhanh hơn hold timer. BFD có thể detect failure trong vài milliseconds thay vì 90 giây.

bash
gcloud compute routers update-bgp-peer prod-router \
  --peer-name=onprem-peer \
  --bfd-session-initialization-mode=ACTIVE \
  --bfd-min-receive-interval=300 \
  --bfd-min-transmit-interval=300 \
  --region=us-west1

Dynamic Routing Mode: Regional vs Global

Đây là một trong những quyết định thiết kế quan trọng nhất khi dùng Cloud Router.

Regional Mode (Default)

Cloud Router trong regional mode chỉ chia sẻ dynamic routes trong region nó đặt.

Cloud Router ở us-west1 (regional mode):
  Learns: 192.168.1.0/24 từ on-premises
  Installs route: chỉ trong us-west1

VMs ở us-west1: CÓ route đến 192.168.1.0/24 ✓
VMs ở europe-west1: KHÔNG có route đến 192.168.1.0/24 ✗
VMs ở asia-northeast1: KHÔNG có route đến 192.168.1.0/24 ✗

Global Mode

bash
gcloud compute networks update prod-vpc \
  --bgp-routing-mode=global

Với global mode, Cloud Router chia sẻ dynamic routes với tất cả regions trong VPC:

Cloud Router ở us-west1 (global mode):
  Learns: 192.168.1.0/24 từ on-premises
  Installs route: trong TẤT CẢ regions

VMs ở us-west1: CÓ route ✓
VMs ở europe-west1: CÓ route ✓  ← traffic đi qua us-west1 Cloud VPN
VMs ở asia-northeast1: CÓ route ✓

Trade-off:

Khía cạnhRegionalGlobal
ReachChỉ router's regionToàn VPC
Latency (cross-region traffic)N/ATraffic phải đi qua Cloud Router region
ComplexityThấpCao hơn (traffic path không obvious)
Use caseSingle-region hoặc multi-router setupSingle entry point cho on-premises

Khi nào dùng global mode?

  • Khi bạn có on-premises kết nối qua một region duy nhất nhưng cần access từ nhiều regions
  • Khi muốn đơn giản hóa với một Cloud VPN/Interconnect cho toàn VPC

Khi nào dùng regional mode?

  • Khi mỗi region có kết nối riêng với on-premises (multiple Interconnects)
  • Khi muốn kiểm soát chặt traffic path (traffic từ europe-west1 không nên đi vòng qua us-west1)
  • Khi cần latency predictability

Global Mode: Routing Asymmetry Risk

Với global mode, có thể xảy ra routing asymmetry:

Outbound (GCP → On-premises):
  VM ở europe-west1 → 192.168.1.5
  Route: đi qua Cloud VPN ở us-west1 (route learned from us-west1 router)
  Path: europe-west1 → us-west1 (cross-region) → VPN tunnel → on-premises

Return traffic (On-premises → GCP):
  On-premises → 10.1.0.5 (europe-west1 VM)
  Path: on-premises → VPN → us-west1 → cross-region → europe-west1

Total: Europe → US → On-premises (outbound)
       On-premises → US → Europe (return)
       Extra latency: 2× transatlantic hop

Đây là lý do nhiều production environments dùng regional mode với multiple Cloud Routers — một router per region với kết nối Interconnect local.

Route Advertisement: VPC Quảng Bá Gì Cho Peers

Theo mặc định, Cloud Router quảng bá:

  • Tất cả subnet primary CIDR ranges trong VPC (hoặc trong region với regional mode)
  • Không quảng bá secondary ranges
  • Không quảng bá routes học được từ VPC Peering

Bạn có thể customize:

bash
# Chỉ quảng bá specific ranges
gcloud compute routers update prod-router \
  --advertisement-mode=custom \
  --set-advertisement-ranges=10.0.0.0/20,10.1.0.0/16 \
  --region=us-west1

Khi nào cần custom advertisement?

  1. GKE secondary ranges: On-premises cần route đến pod IPs → phải advertise secondary ranges
  2. Aggregate advertisement: Thay vì advertise nhiều /20 subnets, advertise một /16 supernet để giảm BGP update noise
  3. Selective access: Không muốn on-premises biết về internal staging subnets

Bạn có thể advertise bất kỳ IP range nào, không chỉ subnet ranges:

bash
# Advertise custom range (ví dụ: GKE pod range)
gcloud compute routers update-bgp-peer prod-router \
  --peer-name=onprem-peer \
  --advertisement-mode=custom \
  --set-advertisement-ranges=10.0.0.0/20,10.1.0.0/16 \
  --region=us-west1

Best Path Selection: Cloud Router Chọn Route Tốt Nhất

Khi nhiều BGP peers quảng bá cùng route prefix, Cloud Router phải chọn một:

Tiêu Chí Lựa Chọn (Theo Thứ Tự)

  1. Highest LOCAL_PREF: Nếu bạn set local preference trên peer advertisement
  2. Shortest AS_PATH: Route qua ít AS hops hơn được ưu tiên
  3. Lowest MED (Multi-Exit Discriminator): Nếu multiple paths từ cùng peer
  4. Route type: eBGP preferred over iBGP
  5. Advertised route priority: Lower priority number = preferred trong GCP context
bash
# Set priority khi add peer (lower = more preferred)
gcloud compute routers add-bgp-peer prod-router \
  --peer-name=primary-peer \
  --advertised-route-priority=100 \  # preferred
  --region=us-west1

gcloud compute routers add-bgp-peer prod-router \
  --peer-name=backup-peer \
  --advertised-route-priority=200 \  # backup
  --region=us-west1

Điểm quan trọng: advertised-route-priority là MED được quảng bá đến peers (ảnh hưởng đến cách on-premises chọn path về GCP). Nó không trực tiếp ảnh hưởng đến cách Cloud Router chọn path từ GCP ra ngoài.

HA VPN: Active-Active với ECMP

Cloud VPN HA (High Availability) tạo 2 tunnels. Với Cloud Router:

Tunnel 1: 169.254.1.2 (peer 1)
Tunnel 2: 169.254.2.2 (peer 2)

Cả 2 tunnels quảng bá cùng routes với cùng priority:
  192.168.0.0/16 via Tunnel 1 (priority 100)
  192.168.0.0/16 via Tunnel 2 (priority 100)

→ ECMP: Cloud Router install cả 2 routes
→ GCP distribute traffic across 2 tunnels (per-flow ECMP)
→ Nếu Tunnel 1 fail: chỉ còn route via Tunnel 2
→ Failover trong vài seconds (BGP convergence)

Đây là design pattern cho HA VPN — hai tunnels, ECMP, tự động failover.

Cloud Router và Cloud Interconnect

Cloud Interconnect (Dedicated hoặc Partner) kết nối on-premises với Google network qua physical fiber, không qua public internet.

Cloud Router với Interconnect hoạt động tương tự VPN nhưng:

  • BGP session chạy over Interconnect VLAN attachment (không phải VPN tunnel)
  • Bandwidth cao hơn nhiều (10 Gbps - 200 Gbps cho Dedicated)
  • Latency thấp hơn (phụ thuộc vào physical location)
  • SLA cao hơn
bash
# Tạo VLAN attachment cho Interconnect
gcloud compute interconnects attachments dedicated create prod-attachment \
  --router=prod-router \
  --region=us-west1 \
  --interconnect=prod-interconnect \
  --vlan=100

# BGP session được tạo tự động bởi GCP

Đặc Điểm Đặc Biệt Của Interconnect

Phải có Cloud Router: Khác với Classic VPN (có thể dùng static routes), Interconnect bắt buộc phải dùng Cloud Router với BGP. Không có lựa chọn static routing với Interconnect.

Router appliance (Network Connectivity Center): Với Router appliance, VM trong VPC của bạn có thể làm BGP speaker thay vì Cloud Router managed. Dùng cho cases muốn chạy custom routing protocols hoặc NVA (Network Virtual Appliance) của third-party vendors.

Cloud Router Logging: Visibility Vào BGP

BGP events được log vào Cloud Logging:

bash
# Enable Cloud Router logging
gcloud compute routers update prod-router \
  --region=us-west1 \
  --enable-logging

Events được log:

  • BGP session UP/DOWN
  • Route advertisements received/withdrawn
  • Best path selection changes

Useful query trong Cloud Logging:

resource.type="gce_router"
jsonPayload.event_type="bgp_session_state_change"

Failure Modes Quan Trọng

1. BGP Flap: Route Instability

Nếu BGP peer không ổn định (BGP session liên tục UP/DOWN), routes sẽ flap:

  • Andromeda agents liên tục update route table
  • Traffic intermittently bị drop trong khoảng thời gian convergence
  • Excessive route churn ảnh hưởng toàn VPC

Detection: Monitor BGP session state changes trong Cloud Logging. Alert khi session state changes nhiều hơn X lần trong Y phút.

Mitigation: Tăng hold timer (giảm sensitivity nhưng chậm detect failure) hoặc dùng BFD với careful tuning.

2. Route Leak

Route leak xảy ra khi on-premises quảng bá route prefix quá rộng:

On-premises quảng bá: 0.0.0.0/0 (default route)
→ Cloud Router học default route từ on-premises
→ Tất cả internet traffic từ GCP sẽ đi qua on-premises (nếu priority thấp hơn default internet gateway)
→ Unexpected latency, traffic routing qua on-premises firewall, bottleneck

Mitigation: Cấu hình route filter (import policy) trên Cloud Router để chỉ accept specific prefixes:

bash
gcloud compute routers update-bgp-peer prod-router \
  --peer-name=onprem-peer \
  --import-custom-routes=false \  # Chỉ accept default nếu cần
  --region=us-west1

Hoặc dùng prefix lists để filter:

bash
# Chỉ accept routes trong specific range
gcloud compute routers add-interface prod-router \
  --router-appliance-instance=filter-appliance \
  --region=us-west1

3. MTU Mismatch qua Interconnect

Interconnect hỗ trợ larger MTU (1440 bytes cho Dedicated Interconnect). Nếu VPC MTU không match, có thể xảy ra packet fragmentation:

VPC MTU: 1500 bytes
Interconnect VLAN MTU: 1440 bytes (với VLAN headers overhead)
→ Packets > 1440 bytes bị fragmented tại Interconnect edge
→ Performance degradation cho large payloads

Giải pháp: Set VPC MTU xuống 1440 hoặc configure TCP MSS clamping:

bash
gcloud compute networks update prod-vpc --mtu=1440

References