Bài viết này nhằm mục đích cho người đọc một cái nhìn tổng quan về Service Mesh nói chung và Istio nói riêng.
Nội dung sẽ bao gồm:
- Định nghĩa Service Mesh.
- Các thành phần trong Service Mesh.
- Ưu nhược điểm khi sử dụng Service Mesh.
- Tổng quan kiến trúc của Istio.
Chúng ta hãy bắt đầu tìm hiểu về Service Mesh.
- Định nghĩa Service Mesh.
Service Mesh là một layer hạ tầng trung gian, trong mô hình Microservices, điều khiển và giám sát toàn bộ các luồng packets (network traffic) được gửi nhận giữa các services (service-to-service, hỗ trợ giao thức HTTP/1.1, HTTP/2, TCP TLS/mTLS).
Service Mesh là mạng lưới các Layer 7 Proxy (Layer 7 — tầng ứng dụng, trong mô hình 07 lớp của OSI — Open Source Interconnect) ở đó Microservices có thể trừu tượng hóa hoàn toàn network. Service Mesh đảm bảo các kết nối được nhanh chóng, tin cậy và bảo mật.
Dưới góc nhìn Software-Defined-Networking, Service Mesh sẽ bao gồm các thành phần có thể cấu hình động, trao đổi thông tin và giao tiếp qua các tập APIs.
2. Các thành phần trong Service Mesh.
Cơ bản Service Mesh có 02 thành phần chính:
- Data Plane
- Control Plane
- Data Plane là vùng triển khai cấu trúc/mô hình network (network topology), nơi phát sinh dữ liệu, bao gồm một tập hợp các Sidecar Proxy, với mỗi Sidecar sẽ được đặt cạnh instance của services, Sidecar đóng vai trò như người canh gác, giám sát tất cả các giao tiếp mạng vào/ra (ingress/egress) giữa các service.
- Cấu hình của tập các Sidecar Proxy trên được cập nhật, thay đổi bởi Control Plane, ngoài ra chúng còn thu thập, cung cấp dữ liệu phục vụ cho việc giám sát và phân tích network trong nội bộ microservices.
- Data plane có chịu các trách nhiệm như:
– Service Discovery
– Load Balancing
– Authentication and Authorization
– Request Tracing
– Traffic Management
– Fault Injection
– Rate Limiting
– Observability
- Một số Data Plane phổ biến được biết đến như Linkerd, NGINX, HAProxy, Envoy, Traefik.
- Control Plane là trung tâm điều khiển mọi hoạt động của của service-mesh, tiếp nhận các tương tác của DevOps/SysAdmin thông qua Command Line Interface — CLI, để điều chỉnh, cấu hình mạng lưới Sidecar Proxy. Một số Control Plane như Istio, Nelson, SmartStack
3. Ưu nhược điểm của Service Mesh
Ưu điểm
- Đơn giản hóa việc giao tiếp giữa các services trong mô hình microservices. Sidecar proxy được đặt cạnh container services, kiểm soát toàn bộ các giao tiếp mạng, sẽ rất tiện ích cho việc quản lý network.
- Dễ dàng cho việc điều tra, phân tích những lỗi liên quan đến network khi xảy ra ở lớp hạ tầng.
- Hỗ trợ những tính năng mã hóa kênh truyền (TLS, mTLS), định danh và xác thực các kết nội mạng giữa các instance service.
- Cho phép triển khai, kiểm thử, áp dụng một cách nhanh chóng. Developer chỉ tập chung vào việc phát triển các business logic của service mà không phải quan tâm đến các vấn đề về network.
Một vài nhược điểm
- Tăng độ phức tạp cho việc triển khai ứng dụng theo mô hình microservices.
- Tuy Service Mesh mang lại những tiện ích về mặt Network, nhưng lại tăng độ trễ cho thời gian thực thi ứng dụng & giao tiếp, do request phải đi qua những lính gác Sidecar Proxy.
- Service Mesh không định danh được các vấn đề liên quan đến việc tích hợp các services hoặc hệ thống bên ngoài (ví dụ: routing type — loại định tuyến (static routing, dynamic routing) , transformation mapping — ánh xạ chuyển đổi giữa các giao thức kết nối (HTTP rest <-> gRPC là một ví dụ)).
4. Tổng quan kiến trúc của Istio.
Istio là một Service Mesh, đang được biết đến nhiều nhất, mã mở (Apache License 2.0), được support của Google, IBM, Lyft. Istio được viết bằng go-lang, một ngôn ngữ khá phổ biến để xây dựng những ứng dụng cloud-native (docker, kubernetes…)
Dưới đây là kiến trúc tổng quan của Istio.
Các thành phần Istio bao gồm:
- Envoy — Được sử dụng như là Sidecar proxy, đầu tiên được phát triển từ các kỹ sư của Lyft, được viết bằng C++ là một proxy phân tán có tốc độ cao.
- Mixer — Thực thi những chính sách như xác thực & định danh, rate limits, quotas, truy vết các request và thu thập các thông tin liên quan đến monitoring/metrics từ Data Plane. Mixer Adapters cho phép Istio interface hóa, hỗ trợ tích hợp với rất nhiều backend hạ tầng khác để thu thập metrics/logs, ví dụ như: StackDriver, Prometheus, New Relic….
- Pilot — Có trách nhiệm thực thi những cập nhật, thay đổi cấu hình các sidecar (at runtime).
- Citadel — Chịu trách nhiệm cấp phát, thay đổi các chứng chỉ sử dụng cho việc xác thực, định danh, mã hóa các kết nối.
- Galley — Thực hiện xác nhận, tổng hợp, chuyển đổi và phân phối cấu hình trong Istio.
Khi Istio được triển khai cùng Kubernetes, việc setup rất dễ dàng, có thể tham khảo : https://istio.io/docs/setup/install/. Sau khi được cài đặt, Istio sẽ như một thành phần mở rộng của Kubernetes (Istio’s Custom Resource Definitions (CRDs)).
Các công cụ thực hiện cho monitoring như Grafana, Prothemeus, Kiali sẽ được tích hợp sẵn và mặc định, được deploy như là các Service trong Kubernetes.
Các Envoy Sidecar, kiểm soát kết nối mạng, dễ dàng được tiêm (inject) vào các Pod như là các container. Việc Inject có thể để mặc định theo namespace (label phân nhóm của k8s) hoặc manual inject theo command line (kubectl).
Trên đây là những khái niệm tổng quan về Service Mesh, Istio.
Các vấn đề kỹ thuật sâu hơn về việc tích hợp Istio & Kubernetes, sẽ được ở đề cập ở những bài viết tiếp theo.
Cảm ơn bạn đã quan tâm!
Tham Khảo Thêm Tại Đây:
Đăng ký liền tay Nhận Ngay Bài Mới
Subscribe ngay
Cám ơn bạn đã đăng ký !
Lỗi đăng ký !
Add Comment