Docker Networking nâng cao: Overlay và Service Discovery
Overlay Network biến nhiều Docker host thành một mạng LAN ảo duy nhất — container trên các server khác nhau nói chuyện như cùng một máy. Tìm hiểu VXLAN, mã hóa IPSec và service discovery.
10 phút đọc•
Mục lục bài viết36
Bạn có biết?
Hãy tưởng tượng bạn có một hệ thống đường cao tốc ảo kết nối các container chạy trên nhiều Docker hosts khác nhau - như thể tất cả đều nằm trong cùng một mạng LAN vậy. Đó chính xác là những gì Overlay Network mang lại. Khi ứng dụng của bạn cần mở rộng ra nhiều server, Overlay Network cho phép các container "nói chuyện" với nhau như thể chúng đang ở trong cùng một máy.
Docker Network Types
Bridge Network (mặc định)
Driver: bridge
Dùng cho: single-host
Tạo network ảo riêng, các container kết nối qua virtual bridge
Host Network
Driver: host
Dùng cho: containers cần performance cao
Container dùng network của host trực tiếp, bỏ qua Docker network isolation
Overlay Network
Driver: overlay
Dùng cho: multi-host (Docker Swarm)
Tạo virtual LAN xuyên qua nhiều Docker hosts
Yêu cầu Swarm mode hoạt động
Macvlan
Driver: macvlan
Dùng cho: Legacy apps cần direct network access
Container có MAC address riêng, xuất hiện như physical device trên network
Overlay Network trong Swarm
Khởi tạo Swarm
# Khởi tạo Swarm (leader)
docker swarm init# Tham gia Swarm với token
docker swarm join --token SWMTKN-1-xxxxx node-ip:2377
Bạn đã đi qua gần hết series Docker — giờ là lúc tổng hợp mọi kiến thức cho production! Checklist bảo mật, tối ưu hiệu năng, monitoring, chiến lược deploy và troubleshooting các lỗi thường gặp.
Quản lý container bằng tay trên nhiều server thật mệt mỏi? Docker Swarm biến nhiều host thành một cluster duy nhất — tự động phân phối, scale và tự phục hồi. Khởi tạo Swarm và deploy service.
Thay vì một tòa nhà khổng lồ, microservices xây mỗi chức năng một tòa nhà riêng — Docker là hệ thống đường xá kết nối chúng. Tìm hiểu microservices với Compose, API Gateway và Message Queue.
-
my-overlay
networks:
my-overlay:
driver:
overlay
Service Discovery
DNS-based discovery
Container có thể resolve theo service name - không cần IP cứng. Ví dụ: từ web container, bạn có thể ping db để kết nối đến database service.
Embedded DNS
Docker có built-in DNS server với địa chỉ 127.0.0.11. Tất cả container tự động được cấu hình để resolve qua Docker DNS.
VIP (Virtual IP)
Load balancing tự động qua VIP với round-robin mặc định. Service có một IP ảo duy nhất, Docker tự động phân phối requests đến các containers.
DNS Round Robin
# Kích hoạt DNS round-robin
docker service create --endpoint-mode dnsrr --name my-service my-image
Mỗi container có nhiều A records, client có thể chọn random IP.
Overlay Network kết nối các container qua nhiều hosts như một mạng LAN ảo
Web service và API service chạy trên các hosts khác nhau nhưng vẫn giao tiếp được qua Overlay Network.
Best Practices
Dùng custom networks - tách biệt frontend/backend
Overlay cho multi-host - cần Swarm mode hoạt động
Service discovery tự động - dùng service name thay vì IP cứng
External access - dùng ingress network để publish services
Macvlan cho legacy apps - khi cần direct network access
Bước tiếp theo
Tiếp theo, chúng ta sẽ tìm hiểu về Docker Logging và Monitoring - cách thu thập logs và theo dõi performance của containers trong production.
Overlay Network chi tiết: VXLAN và Encryption
Overlay network trong Docker sử dụng giao thức VXLAN (Virtual Extensible LAN) để đóng gói các gói tin Layer 2 thành UDP packets và truyền qua mạng Layer 3. Mỗi overlay network được gán một VNI (VXLAN Network Identifier) 24-bit, cho phép tối đa 16 triệu networks riêng biệt.
Docker Overlay với Encryption
Để bảo mật dữ liệu truyền giữa các nodes, Docker hỗ trợ mã hóa IPSec cho overlay network:
# Tạo overlay network với mã hóa
docker network create -d overlay--opt encrypted
my-secure-overlay
Khi bật encryption, Docker tự động quản lý key và mã hóa mọi gói tin giữa các containers qua nodes khác nhau. Tuy nhiên, encryption sẽ làm giảm throughput khoảng 10-20%, nên chỉ dùng khi cần thiết.
Load Balancing trong Overlay Network
Docker Swarm hỗ trợ hai cơ chế load balancing cho services:
VIP (Virtual IP) — Mặc định
Mỗi service được gán một VIP. Docker's internal load balancer (dùng IPVS) tự động phân phối requests đến các container instance theo round-robin:
# Tạo service với VIP mode (mặc định)
docker service create
--name web
--replicas3--network my-overlay
nginx:alpine
# Kiểm tra VIP
docker service inspect web --format '{{json .Endpoint.VirtualIPs}}'
DNSRR (DNS Round Robin) — Alternative
Thay vì VIP, DNS trả về nhiều A records, mỗi record trỏ đến một container IP khác nhau. Client tự chọn IP để kết nối:
Tiêu chí
VIP
DNSRR
Cách hoạt động
Load balancer trung tâm
Client tự chọn IP
Performance
Thêm 1 hop nhỏ
Direct connection
Session stickiness
Cần cấu hình thêm
Client có thể chọn cùng IP
Dùng khi
Hầu hết trường hợp
Cần maximum performance
docker service create
--name web
--replicas3--endpoint-mode dnsrr
--network my-overlay
nginx:alpine
Ingress Network — External Access
Ingress network là một overlay network đặc biệt giúp services có thể truy cập từ bên ngoài Swarm cluster. Khi bạn publish port cho service (ví dụ --publish 80:80), Docker tự động kết nối service đó vào ingress network:
# Service publish port sẽ tự động kết nối ingress
docker service create--name web --publish 80:80 --replicas 3
nginx:alpine
# Kiểm tra ingress network
docker network inspect ingress
Mỗi node trong Swarm cluster sẽ listen port 80. Khi request đến bất kỳ node nào, Docker routing mesh tự động chuyển tiếp đến container thích hợp — bất kể container đó đang chạy trên node nào.
Trong cấu hình này, 3 nodes tạo thành Swarm cluster. Redis chạy 1 instance, API scale 3 replicas, Web scale 2 replicas. Tất cả giao tiếp qua overlay network my-app-net.
0 bình luận
Đang tải bình luận...
Để lại bình luận