+8

Tổng quan về Istio: Service Mesh cho người mới bắt đầu

1. Bối cảnh

Trong thế giới phát triển phần mềm hiện đại, các ứng dụng ngày càng trở nên phức tạp và phân tán. Các hệ thống monolithic đã dần nhường chỗ cho các kiến trúc microservices, nơi mà ứng dụng được chia thành nhiều dịch vụ nhỏ hơn, độc lập và dễ quản lý hơn. Tuy nhiên, với sự phân tán này, việc quản lý các giao tiếp giữa các dịch vụ trở nên thách thức. Đây là nơi mà Service Mesh xuất hiện như một giải pháp hữu hiệu.

2. Service Mesh là gì?

Service Mesh là một lớp phần mềm chuyên quản lý việc giao tiếp giữa các microservices trong một ứng dụng. Nó cung cấp các tính năng như giám sát, log, tracing, và kiểm soát lưu lượng mà không cần thay đổi mã nguồn của dịch vụ. Điều này giúp các nhà phát triển tập trung vào logic nghiệp vụ mà không phải lo lắng về các vấn đề hạ tầng.

Service Mesh Architecture

3. Các thành phần trong Service Mesh

Service Mesh gồm có hai thành phần chính là control plane và data plane:

  • Control plane sẽ thực hiện vài trò là quản lý toàn bộ các services.
  • Data plane sẽ đóng vai trò xử lý giao tiếp giữa các services.

3.1 Data Plane

image.png

Data Plane là một proxy mạng được triển khai cùng với mỗi microservice (được gọi là sidecar), quản lý tất cả lưu lượng mạng vào và ra thay mặt cho microservice. Nó có thể thực hiện các chức năng như khám phá dịch vụ, cân bằng tải, bảo mật và độ tin cậy. Dịch vụ và sidecar nên được triển khai trên cùng một máy chủ và nếu triển khai dưới dạng container thì nên nằm trong cùng một pod.

Data Plane bao gồm các dịch vụ chạy cùng với các proxy sidecar. Các dịch vụ này xử lý logic nghiệp vụ, trong khi các proxy nằm giữa chúng và các dịch vụ khác. Tất cả lưu lượng, cả vào và ra, đều thông qua các proxy, chịu trách nhiệm định tuyến (proxying) lưu lượng đến các dịch vụ khác.

Nhiều tính năng được cung cấp bởi service mesh hoạt động ở mức yêu cầu, biến các sidecar thành proxy tầng 7 (Layer 7). Bằng cách hoạt động ở tầng này, service mesh cung cấp các khả năng như cân bằng tải thông minh dựa trên độ trễ quan sát được, hoặc cung cấp thời gian chờ hợp lý và nhất quán cho các yêu cầu.

Sidecar cũng cung cấp chức năng ở mức kết nối. Ví dụ, sidecar có thể cung cấp các chức năng như Mutual Transport Layer Security (mTLS), cho phép mỗi bên trong giao tiếp xác nhận chứng chỉ của bên kia.

Một số Data Plane phổ biến được biết đến như Linkerd, NGINX, HAProxy, Envoy, Traefik.

3.2 Control Plane

image.png

Control Plane cấu hình các proxy. Điều này được thực hiện thông qua control plane, bao gồm một số dịch vụ cung cấp chức năng quản trị cho service mesh và cung cấp một giao diện để cấu hình hành vi của data plane và để các proxy phối hợp hành động.

Người vận hành tương tác với service mesh thông qua control plane bằng cách sử dụng CLI hoặc API. Ví dụ, người vận hành làm việc thông qua control plane để định nghĩa các quy tắc định tuyến, tạo các circuit breaker, hoặc thực thi kiểm soát truy cập.

Tùy thuộc vào triển khai, bạn có thể sử dụng control plane để xuất dữ liệu quan sát như số liệu, log và trace. Một số Control Plane như Istio, Nelson, SmartStack

image.png

4. Ưu nhược điểm khi sử dụng Service Mesh

Ưu điểm:

  • Quản lý giao tiếp dễ dàng: Cung cấp khả năng giám sát, tracing, và log cho các giao tiếp giữa các dịch vụ.
  • Tăng cường bảo mật: Hỗ trợ mã hóa và xác thực giữa các dịch vụ.
  • Kiểm soát lưu lượng: Cho phép kiểm soát và định tuyến lưu lượng một cách linh hoạt.
  • Khả năng mở rộng: Hỗ trợ các mô hình triển khai phức tạp như canary deployments, blue-green deployments.

Nhược điểm:

  • Độ phức tạp: Giới thiệu thêm một lớp phức tạp trong kiến trúc ứng dụng.
  • Chi phí vận hành: Yêu cầu quản lý và giám sát thêm các thành phần mới.
  • Hiệu suất: Có thể gây ra một số overhead về hiệu suất do việc quản lý lưu lượng qua các proxy.

5. Istio là gì?

image.png

Istio là một service mesh mã nguồn mở, được thiết kế để làm việc chủ yếu với Kubernetes. Các tính năng mạnh mẽ của Istio cung cấp một cách tiếp cận đồng nhất và hiệu quả hơn để bảo mật, kết nối và giám sát các dịch vụ. Istio là con đường để cân bằng tải, xác thực dịch vụ tới dịch vụ và giám sát mà không cần hoặc ít thay đổi mã nguồn của dịch vụ. Các tính năng chính của Istio bao gồm:

  • Giao tiếp bảo mật giữa các dịch vụ trong một cluster với mã hóa TLS, xác thực và ủy quyền dựa trên danh tính mạnh mẽ.
  • Cân bằng tải tự động cho lưu lượng HTTP, gRPC, WebSocket và TCP.
  • Kiểm soát chi tiết hành vi lưu lượng với các quy tắc định tuyến phong phú, retry, failover và fault injection.
  • Lớp chính sách có thể cắm thêm và API cấu hình hỗ trợ kiểm soát truy cập, giới hạn tốc độ và hạn ngạch.
  • Tự động thu thập số liệu, log và trace cho tất cả lưu lượng trong cluster, bao gồm cả lưu lượng vào và ra cluster.
  • Istio được thiết kế để mở rộng và có thể xử lý nhiều nhu cầu triển khai khác nhau. Control plane của Istio chạy trên Kubernetes, và bạn có thể thêm các ứng dụng được triển khai trong cluster đó vào mesh của mình, mở rộng mesh sang các cluster khác hoặc thậm chí kết nối các VM hoặc các điểm cuối khác đang chạy ngoài Kubernetes.

Một hệ sinh thái rộng lớn của các nhà đóng góp, đối tác, tích hợp và nhà phân phối mở rộng và tận dụng Istio cho nhiều kịch bản khác nhau. Bạn có thể tự cài đặt Istio hoặc sử dụng các sản phẩm của nhiều nhà cung cấp tích hợp và quản lý Istio cho bạn.

6. Tổng quan kiến trúc của Istio

image.png

Trước khi sử dụng Istio

image.png

Sau khi sử dụng Istio

Istio cũng gồm hai phần chính là control plane và data plane:

  • Data plane bao gồm một tập hợp các proxy thông minh (Envoy) được triển khai dưới dạng sidecar. Các proxy này làm trung gian và kiểm soát tất cả hoạt động giao tiếp mạng giữa các microservices. Họ cũng thu thập và báo cáo dữ liệu từ xa về tất cả mesh traffic.
  • Control plane quản lý và cấu hình các proxy để định tuyến lưu lượng.

Ảnh màn hình 2024-05-19 lúc 16.02.14.png

6.1 Envoy

Istio sử dụng phiên bản mở rộng của proxy Envoy. Envoy là proxy hiệu suất cao được phát triển bằng C++ để điều phối tất cả lưu lượng truy cập vào và ra cho tất cả các dịch vụ trong service mesh.

Proxy của Envoy được triển khai dưới dạng sidecar cho các dịch vụ, tăng cường các dịch vụ một cách hợp lý với nhiều tính năng tích hợp sẵn của Envoy, ví dụ::

  • Dynamic service discovery
  • Load balancing
  • TLS termination
  • HTTP/2 and gRPC proxies
  • Circuit breakers
  • Health checks
  • Staged rollouts with %-based traffic split
  • Fault injection
  • Rich metrics

Mô hình proxy sidecar cũng cho phép bạn thêm các tính năng của Istio vào một triển khai hiện có mà không cần bạn phải thiết kế lại hoặc viết lại mã.

Một số tính năng và nhiệm vụ của Istio được kích hoạt bởi các Envoy proxy bao gồm:

  • Các tính năng kiểm soát lưu lượng: thực hiện kiểm soát lưu lượng tinh vi với các quy tắc định tuyến phong phú cho lưu lượng HTTP, gRPC, WebSocket và TCP.

  • Các tính năng về độ bền của mạng: thiết lập thử lại, chuyển sang các bản sao, ngắt mạch và chèn lỗi.

  • Các tính năng bảo mật và xác thực: thực hiện các chính sách bảo mật và kiểm soát truy cập và giới hạn tỷ lệ được xác định thông qua API cấu hình.

  • Mô hình mở rộng có thể được cắm dựa trên WebAssembly cho phép việc thực thi chính sách tùy chỉnh và tạo ra telemetry tùy chỉnh cho mesh traffic.

6.2 Istiod

Istiod là thành phần cung cấp khám phá dịch vụ, cấu hình và quản lý chứng chỉ.

Istiod chuyển đổi các quy tắc định tuyến cấp cao kiểm soát hành vi lưu lượng thành cấu hình cụ thể cho Envoy, và truyền chúng đến các sidecar trong thời gian chạy. Pilot trừu tượng hóa các cơ chế khám phá dịch vụ cụ thể của nền tảng và tổng hợp chúng thành một định dạng tiêu chuẩn mà bất kỳ sidecar nào tuân theo API của Envoy đều có thể sử dụng.

Bạn có thể sử dụng API Quản lý Lưu lượng của Istio để chỉ dẫn Istiod điều chỉnh cấu hình Envoy để thực hiện kiểm soát lưu lượng tinh vi hơn trong mạng lưới dịch vụ của bạn.

Bảo mật của Istiod cho phép xác thực mạnh mẽ từ dịch vụ đến dịch vụ và người dùng cuối với quản lý danh tính và chứng chỉ tích hợp sẵn. Bạn có thể sử dụng Istio để nâng cấp lưu lượng không được mã hóa trong mạng lưới dịch vụ. Sử dụng Istio, các nhà điều hành có thể áp dụng chính sách dựa trên danh tính dịch vụ thay vì trên các định danh mạng tương đối không ổn định ở tầng 3 hoặc tầng 4. Ngoài ra, bạn có thể sử dụng tính năng phê duyệt của Istio để kiểm soát ai có thể truy cập vào dịch vụ của bạn.

Istiod hoạt động như một Tổ chức Chứng chỉ (CA) và tạo ra các chứng chỉ để cho phép giao tiếp mTLS an toàn trong mặt dữ liệu.

Kết luận

Service Mesh và đặc biệt là Istio đang ngày càng trở nên quan trọng trong việc quản lý các ứng dụng phân tán hiện đại. Với các tính năng mạnh mẽ và khả năng mở rộng, Istio giúp các nhà phát triển tập trung vào việc phát triển các tính năng mới mà không phải lo lắng về các vấn đề hạ tầng phức tạp.

Hãy thử khám phá Istio để thấy được tiềm năng mà nó mang lại cho dự án của bạn nhé!


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí