Istio Ambient: Hiệu Suất cho Kubernetes

Trong nhiều năm, người dùng Kubernetes tìm kiếm các khả năng mạng ứng dụng tiên tiến đã chuyển sang sử dụng lưới dịch vụ của Istio, dựa vào kiến trúc dựa trên sidecar để có được khả năng quan sát sâu, bảo mật và quản lý lưu lượng. Nó mạnh mẽ, nhưng sức mạnh thường đi kèm với một cái giá—cả về độ phức tạp lẫn mức tiêu thụ tài nguyên. Giờ đây, Istio Ambient Mode ra đời, đánh dấu một sự thay đổi trong cách hoạt động của lưới dịch vụ, mang lại các lợi ích định tuyến lưu lượng Layer 4/Layer 7 (L4/L7) tương tự nhưng với cách tiếp cận gọn nhẹ và hiệu quả hơn.
Gánh nặng của Sidecar
Sidecar từ lâu đã là trụ cột của lưới dịch vụ Istio. Bằng cách chèn một proxy Envoy vào mỗi pod, chúng cung cấp cho các dịch vụ một cách minh bạch để xử lý chính sách bảo mật, định tuyến và khả năng quan sát. Tuy nhiên, người dùng Kubernetes đã phải học một bài học đắt giá rằng, dù sidecar mang lại giá trị, chúng cũng đi kèm với một cái giá—tiêu tốn thêm CPU và bộ nhớ cho mỗi pod. Khi nhân con số đó lên hàng nghìn pod, hiệu suất bỗng trở thành một mối quan ngại ngày càng lớn.
Ngoài vấn đề tài nguyên, sidecar còn làm phức tạp việc quản lý vòng đời. Mỗi lần cập nhật proxy đồng nghĩa với việc khởi động lại từng pod, và việc gỡ lỗi các vấn đề mạng đòi hỏi phải điều hướng qua một mạng lưới các proxy riêng lẻ. Những người vận hành Kubernetes buộc phải cân bằng giữa lợi ích của Istio và gánh nặng vận hành mà nó mang lại.
Một Làn Gió Mới: Chào Đón Chế Độ Ambient
Chế độ Ambient là câu trả lời của Istio cho những hạn chế của sidecar. Thay vì nhúng các proxy vào trong mỗi pod, Istio chuyển trách nhiệm mạng lên một tầng cơ sở hạ tầng dùng chung. Điều này có nghĩa là các dịch vụ không còn cần sidecar để tận hưởng mã hóa lưu lượng, khả năng quan sát hay các quy tắc định tuyến—giải phóng chúng khỏi gánh nặng tiêu tốn thêm CPU và bộ nhớ.
Ở cốt lõi, chế độ Ambient chia mạng của Istio thành hai tầng nhẹ:
Ztunnel (L4) – Tầng này cho phép giao tiếp mã hóa giữa các dịch vụ, thậm chí trước khi định tuyến cấp cao hơn bắt đầu.
Waypoint Proxies (L7) – Thay vì sidecar cho mỗi pod, lưu lượng cần các chính sách L7 nâng cao sẽ được xử lý bởi một proxy dùng chung, giảm thiểu sự trùng lặp.
Kết quả là gì? Một lưới dịch vụ nhẹ hơn, vẫn mang lại các khả năng cốt lõi của Istio nhưng không ảnh hưởng tới tài nguyên hệ thhống
Hiệu Suất Không Đánh Đổi
Bằng cách loại bỏ nhu cầu sử dụng sidecar trong mỗi pod, Istio Ambient Mode giảm đáng kể dấu chân tài nguyên tổng thể của Kubernetes. CPU và bộ nhớ trước đây bị tiêu tốn vào các proxy dư thừa giờ đây có thể được phân bổ lại cho khối lượng công việc ứng dụng. Việc mở rộng quy mô dịch vụ trở nên đơn giản hơn, và cập nhật các chính sách mạng không còn đòi hỏi phải khởi động lại hàng loạt pod.
Nhưng có lẽ điều quan trọng nhất là các lợi ích vẫn được duy trì. Các dịch vụ vẫn nhận được mã hóa lưu lượng, định tuyến chi tiết và khả năng quan sát—chỉ khác là giờ đây chúng không còn bị ràng buộc bởi sidecar. Người vận hành Kubernetes có được sự linh hoạt để lựa chọn khi nào và ở đâu cần xử lý L7, thay vì phải trả giá hiệu suất trên toàn bộ cụm.
Kỷ Nguyên Mới cho Service Mesh
Istio Ambient Mode không chỉ là một cải tiến kỹ thuật—nó là một sự thay đổi mô hình. Nó thừa nhận rằng việc áp dụng lưới dịch vụ không nên đánh đổi bằng hiệu suất hoặc sự đơn giản. Khi các môi trường Kubernetes ngày càng mở rộng về quy mô và độ phức tạp, Ambient Mode mang đến một con đường tiến lên, nơi mạng vẫn mạnh mẽ nhưng không còn ma sát.
Đối với các đội ngũ từng bị gánh nặng bởi "thuế sidecar", cách tiếp cận mới này không chỉ đơn thuần là một tối ưu hóa, mà giống như một luồng gió mới—một luồng gió có thể định hình lại tương lai của lưới dịch vụ.
Ztunnel (L4) - Tầng 4
Giải thích:
Ztunnel là một thành phần trong Istio Ambient Mode hoạt động ở tầng 4 (Layer 4 - tầng vận chuyển) của mô hình OSI. Nó chịu trách nhiệm xử lý giao tiếp cơ bản giữa các dịch vụ, đặc biệt là mã hóa lưu lượng (thường sử dụng TLS) để đảm bảo an toàn trong quá trình truyền dữ liệu. Ztunnel được thiết kế để nhẹ và hiệu quả, hoạt động như một proxy dùng chung cho toàn bộ cụm Kubernetes, thay vì nhúng riêng lẻ vào từng pod như sidecar truyền thống.
Chức năng chính:
Mã hóa lưu lượng dịch vụ-đến-dịch vụ (service-to-service encryption).
Định tuyến cơ bản dựa trên địa chỉ IP và cổng.
Không can thiệp sâu vào nội dung lưu lượng (chẳng hạn như tiêu đề HTTP), vì nó chỉ xử lý ở mức TCP/UDP.
Lợi ích:
Giảm tải tài nguyên vì không cần proxy riêng cho mỗi pod.
Đảm bảo bảo mật cơ bản mà không cần cấu hình phức tạp.
Ví dụ cụ thể:
Giả sử bạn có một ứng dụng web chạy trên Kubernetes với hai dịch vụ:
Dịch vụ A: Một frontend gửi yêu cầu đến backend.
Dịch vụ B: Một backend xử lý yêu cầu.
Trong mô hình sidecar truyền thống, mỗi pod của Dịch vụ A và Dịch vụ B sẽ có một proxy Envoy riêng để mã hóa và gửi lưu lượng qua lại. Với Ztunnel:
Một Ztunnel duy nhất (chạy như một DaemonSet trên mỗi node trong cụm) sẽ chặn lưu lượng từ Dịch vụ A gửi đến Dịch vụ B.
Ztunnel mã hóa lưu lượng bằng TLS trước khi chuyển tiếp nó đến Dịch vụ B, đảm bảo rằng dữ liệu được bảo vệ mà không cần thêm proxy trong pod của Dịch vụ A hay B.
Nếu chỉ cần giao tiếp an toàn cơ bản (ví dụ: gửi dữ liệu qua TCP giữa hai dịch vụ), Ztunnel đã đủ để xử lý mà không cần thêm tầng L7.
Tình huống thực tế: Một ứng dụng IoT với hàng nghìn thiết bị gửi dữ liệu qua giao thức MQTT. Ztunnel có thể mã hóa toàn bộ lưu lượng từ các pod thiết bị đến máy chủ mà không làm tăng mức tiêu thụ tài nguyên đáng kể.
Waypoint Proxies (L7) - Tầng 7
Giải thích:
Waypoint Proxies hoạt động ở tầng 7 (Layer 7 - tầng ứng dụng) và xử lý các chính sách mạng nâng cao hơn mà Ztunnel không thể thực hiện. Thay vì gắn một proxy L7 vào mỗi pod, Waypoint Proxies là các proxy dùng chung trong cụm, chỉ được gọi khi cần áp dụng các quy tắc phức tạp như định tuyến dựa trên tiêu đề HTTP, phân phối tải hoặc kiểm soát truy cập chi tiết.
Chức năng chính:
Xử lý các chính sách L7 như định tuyến dựa trên URL, phân phối lưu lượng (traffic splitting), hoặc giới hạn tỷ lệ (rate limiting).
Được triển khai linh hoạt: chỉ kích hoạt khi dịch vụ yêu cầu xử lý L7.
Tích hợp với Ztunnel để tận dụng mã hóa L4 cơ bản.
Lợi ích:
Loại bỏ sự dư thừa của proxy L7 trong mỗi pod.
Cho phép bật/tắt xử lý L7 theo nhu cầu, tối ưu hóa hiệu suất.
Ví dụ cụ thể:
Tiếp tục với ứng dụng web có Dịch vụ A (frontend) và Dịch vụ B (backend):
Giả sử bạn muốn triển khai thử nghiệm A/B, trong đó 80% lưu lượng từ Dịch vụ A đi đến phiên bản ổn định của Dịch vụ B (v1), còn 20% đi đến phiên bản thử nghiệm (v2).
Ztunnel mã hóa lưu lượng cơ bản từ Dịch vụ A, nhưng không thể xử lý logic phân phối lưu lượng dựa trên tiêu đề HTTP.
Một Waypoint Proxy được triển khai trong cụm sẽ nhận lưu lượng từ Ztunnel, phân tích tiêu đề HTTP (ví dụ: "User-Agent" hoặc "X-Version"), và định tuyến 80% đến Dịch vụ B v1, 20% đến Dịch vụ B v2.
Tình huống thực tế: Một trang thương mại điện tử muốn giới hạn số lượng yêu cầu API từ một khách hàng cụ thể (rate limiting). Waypoint Proxy có thể kiểm tra tiêu đề "API-Key" trong yêu cầu HTTP và từ chối nếu vượt quá giới hạn, trong khi Ztunnel chỉ đảm bảo mã hóa lưu lượng đến Waypoint Proxy.
So sánh và phối hợp
Ztunnel (L4): Tập trung vào hiệu suất và bảo mật cơ bản, phù hợp cho các ứng dụng chỉ cần giao tiếp an toàn mà không cần logic phức tạp.
Waypoint Proxies (L7): Dành cho các trường hợp cần xử lý nâng cao, nhưng chỉ được sử dụng khi cần, tránh lãng phí tài nguyên.
Ví dụ tổng hợp: Một cụm Kubernetes chạy ứng dụng đa dịch vụ:
Dịch vụ gửi thông báo qua TCP (chỉ cần Ztunnel để mã hóa).
Dịch vụ web với yêu cầu cân bằng tải HTTP (Ztunnel mã hóa, Waypoint Proxy xử lý cân bằng tải dựa trên tiêu đề).
Nhờ cách tiếp cận này, Istio Ambient Mode vừa tiết kiệm tài nguyên vừa duy trì tính linh hoạt, phù hợp với nhiều loại ứng dụng khác nhau trong môi trường Kubernetes.
Subscribe to my newsletter
Read articles from Kilo directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
