Xin chào ! Nếu đây là lần đầu tiên bạn đến với diễn đàn, xin vui lòng danh ra một phút bấm vào đây để đăng kí và tham gia thảo luận cùng VnPro.
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Docker Networking: Overlay network với vxlan

    Docker Networking (Phần 3): Overlay Network với VXLAN — “kéo” L2 qua ranh giới L3 cho microservices đa host


    Trong môi trường multi-host, làm sao để container trên host-A “nhìn thấy” container trên host-B như thể chúng nằm chung một LAN? Câu trả lời là Overlay Network của Docker, sử dụng VXLAN để mở rộng L2 qua L3 — rất hữu ích khi bạn tách lớp ứng dụng theo microservices và cần east–west traffic ổn định, tách biệt. Khái niệm nhanh gọn
    • Overlay: mạng logic chạy “chồng” lên mạng vật lý (underlay).
    • VXLAN: cơ chế encapsulation gói L2 vào UDP (mặc định port 4789) để đi qua L3.
    • VTEP (VXLAN Tunnel Endpoint): điểm đầu/cuối thực hiện encaps/decaps VXLAN; có thể ở NIC, hệ điều hành, hoặc phần mềm (Docker Engine / kernel).
    • Mục tiêu: “mở rộng” L2 giữa các host, để container/endpoint ở các host khác nhau vẫn hoạt động như cùng broadcast domain (trong phạm vi logic của overlay).
    Docker Overlay làm gì?
    • Extend Layer 2 across Layer 3 boundaries: Kéo L2 qua biên L3 bằng VXLAN.
    • VTEP & MAC distribution: VTEP gói/giải gói và phân phối thông tin MAC đến các host trong overlay.
    • DNS nội bộ: Docker Engine cung cấp local DNS để container trong overlay resolve IP nội bộ theo service/container name.
    • ARP trong overlay: sử dụng static ARP entries (được engine quản lý) để OS biết “gửi đi đâu” trong mạng overlay, giảm broadcast/unknown-unicast.
    Luồng gói tin (packet flow) — chi tiết
    1. c1 gửi gói đến c2 (cùng overlay).
    2. VTEP trên host-A nhìn gói, encapsulate bằng VXLAN để chuyển đến host đích thuộc overlay.
    3. Gói đi qua underlay: host-A → host-B (UDP/4789).
    4. host-B VTEP decapsulate VXLAN, đẩy gói L2 “nguyên bản” đến c2. Kết quả: c2 nhận như đang cùng một L2 segment.
    Khi nào nên dùng Overlay?
    • Multi-tier/microservices chạy đa host (Docker Swarm, Kubernetes CNI tương tự).
    • Cần cô lập (isolate)mở rộng nhanh môi trường L2 mà không đụng chạm lớn vào underlay.
    • Môi trường hybrid/on-prem nơi địa chỉ IP trùng lặp có thể nảy sinh, cần lớp logic để tách biệt.
    Triển khai nhanh (Docker Swarm + Overlay)
    Yêu cầu: bật Swarm mode để overlay hoạt động cross-host.
    # 1) Khởi tạo Swarm docker swarm init \ --advertise-addr <IP_manager> # (Các worker join) docker swarm join --token <token> <manager_ip>:2377 # 2) Tạo overlay network docker network create -d overlay \ --attachable \ --subnet 10.20.0.0/24 \ --opt encrypted \ app-overlay # 3) Chạy service/containers gắn vào overlay docker service create \ --name web \ --network app-overlay \ -p 8080:80 \ nginx:stable # Hoặc container attachable (mode dev/test) docker run -d --name c1 --network app-overlay alpine sleep 1d docker run -d --name c2 --network app-overlay alpine sleep 1d
    Ghi chú
    • --opt encrypted: bật IPSec trên tunnel control/data của overlay trong Swarm → mã hóa lưu lượng VXLAN giữa các node.
    • --attachable: cho phép container “đơn lẻ” (không phải service) attach vào overlay (tiện cho debug).
    Tối ưu & vận hành
    • MTU: VXLAN thêm ~50 bytes overhead. Nếu underlay MTU=1500, dễ bị fragmentation.
      • Giải pháp: tăng MTU underlay (VD 9000 “jumbo”), hoặc giảm MTU trong overlay/container.
    • ECMP/Underlay: đảm bảo underlay (L3) định tuyến ổn, hỗ trợ ECMP để tận dụng nhiều đường; overlay tốt tới đâu cũng phụ thuộc underlay.
    • DNS nội bộ: dùng service name để tham chiếu thay vì hard-code IP. Docker Engine DNS sẽ resolve trong overlay.
    • Segmentation: tạo nhiều overlay cho từng miền ứng dụng (frontend/app/db) để giảm blast radius và áp dụng micro-segmentation ở layer policy.
    Bảo mật (SecDevOps góc nhìn)
    • Bật --opt encrypted để mã hóa traffic overlay trong Swarm.
    • Kết hợp host firewall (iptables/nftables) để giới hạn UDP/4789 chỉ giữa các node tin cậy.
    • Quản trị secrets/config bằng Docker Swarm secrets hoặc KMS bên ngoài; tránh đưa secrets vào image.
    • Áp dụng least privilege cho node và registry; ký image (cosign/notary) và enforce policy (OPA/Gatekeeper, Conftest).
    Quan sát & khắc phục sự cố
    • Kiểm tra network:
      docker network ls docker network inspect app-overlay
    • Kiểm tra interface VXLAN trên host:
      ip link show | grep -i vxlan ip addr show
    • Bắt gói VXLAN (udp/4789):
      tcpdump -i <uplink|any> udp port 4789 -vv
    • Kiểm tra DNS nội bộ từ container:
      apk add bind-tools # (Alpine) nslookup c2 ping -c 3 c2
    • MTU/Fragmentation: nếu thấy Frag needed hoặc loss bất thường, đo MTU đường đi và điều chỉnh (PMTUD, sysctl, hoặc jumbo frame).
    So sánh nhanh với các driver khác
    • bridge: nội bộ 1 host, NAT ra ngoài, đơn giản nhưng không cross-host.
    • host: chia sẻ namespace mạng với host; hiệu năng cao nhưng ít cô lập.
    • macvlan: cấp IP “thật” từ underlay cho container (no-NAT); kiểm soát tốt L2 underlay nhưng ít linh hoạt khi di chuyển multi-host.
    • overlay: cross-host L2 logic, tách biệt rõ ràng, phù hợp multi-node/microservices.

    Kết


    Overlay với VXLAN là “xương sống” để microservices trải rộng multi-host mà vẫn giữ cảm giác L2 liền mạch. Nắm chắc VTEP, MTU, DNS/ARP trong overlay và bảo mật đường hầm là chìa khóa để hệ thống chạy ổn định, có thể quan sát, và an toàn.
    Attached Files
    Đặng Quang Minh, CCIE#11897 (Enterprise Infrastructure, Wireless, Automation, AI), CCSI#31417

    Email : dangquangminh@vnpro.org
    https://www.facebook.com/groups/vietprofessional/
Working...
X