Mối quan hệ giữa Istio Virtual Services và Kubernetes Services
Istio Virtual Services và Kubernetes Services hoạt động song song và bổ sung cho nhau để quản lý lưu lượng truy cập microservice trong Kubernetes. Mối quan hệ giữa chúng có thể được tóm tắt như sau:
1. Kubernetes Services:
Hoạt động ở lớp Transport, cung cấp khả năng phát hiện và truy cập các Pod trong một cluster Kubernetes.
Cung cấp thông tin về cách truy cập Pod, bao gồm:
Tên service
Cổng
Giao thức (ví dụ: HTTP, gRPC)
Chọn lọc Pod theo nhãn và selector
Được sử dụng để cân bằng tải lưu lượng truy cập đến các Pod trong một service.
2. Istio Virtual Services:
Xây dựng trên Kubernetes Services, hoạt động ở lớp Network, cung cấp khả năng kiểm soát lưu lượng truy cập microservice chi tiết hơn.
Cung cấp các tính năng nâng cao như:
Phân chia lưu lượng truy cập: Định tuyến lưu lượng truy cập đến các phiên bản microservice khác nhau (ví dụ: canary deployments, A/B testing).
Xử lý lỗi: Xác định cách xử lý các lỗi HTTP (ví dụ: trả về mã trạng thái tùy chỉnh, thực hiện retry).
Bảo mật: Áp dụng các chính sách bảo mật (ví dụ: xác thực, ủy quyền).
Giám sát: Thu thập dữ liệu lưu lượng truy cập và nhật ký.
3. Luồng dữ liệu:
Khi một client gửi yêu cầu đến microservice, yêu cầu sẽ được định tuyến bởi Kubernetes Service dựa trên thông tin service (tên, cổng, giao thức, selector).
Sau khi được định tuyến đến Pod thích hợp, yêu cầu sẽ được chuyển tiếp qua Istio Envoy proxy.
Istio Envoy proxy sẽ kiểm tra yêu cầu dựa trên Virtual Service được cấu hình.
Dựa trên Virtual Service, Istio Envoy proxy có thể thực hiện các hành động sau:
Định tuyến lại yêu cầu: Chuyển tiếp yêu cầu đến một phiên bản microservice khác nhau hoặc một service khác hoàn toàn.
Xử lý lỗi: Trả về mã trạng thái HTTP tùy chỉnh hoặc thực hiện retry nếu xảy ra lỗi.
Áp dụng bảo mật: Yêu cầu xác thực và ủy quyền trước khi cho phép truy cập microservice.
Thu thập dữ liệu: Thu thập dữ liệu lưu lượng truy cập và nhật ký.
Sau khi xử lý yêu cầu, Istio Envoy proxy sẽ gửi yêu cầu đến Pod đích và trả về phản hồi cho client.
Kubernetes Services cung cấp nền tảng cơ bản để phát hiện và truy cập Pod.
Istio Virtual Services xây dựng trên Kubernetes Services, cung cấp khả năng kiểm soát lưu lượng truy cập microservice chi tiết và linh hoạt hơn.
Cả hai đều đóng vai trò quan trọng trong việc quản lý lưu lượng truy cập microservice trong Kubernetes.
Virtual Service được cấu hình bằng YAML, xác định cách Istio Envoy proxy xử lý lưu lượng truy cập đến microservice.
Virtual Service bao gồm các trường sau:
Hosts: Danh sách các tên host mà Virtual Service áp dụng.
Routes: Danh sách các quy tắc định tuyến lưu lượng truy cập.
HTTP: Cấu hình cho lưu lượng truy cập HTTP.
TLS: Cấu hình cho lưu lượng truy cập TLS.
TCP: Cấu hình cho lưu lượng truy cập TCP.
Istio Envoy proxy là một proxy sidecar được triển khai cùng với mỗi Pod trong cluster Kubernetes.
Istio Envoy proxy có trách nhiệm:
Chuyển tiếp lưu lượng truy cập
Áp dụng Virtual Services
Thu thập dữ liệu lưu lượng truy cập và nhật ký
Luồng dữ liệu thông thường đi qua các bước sau:
Yêu cầu gửi đến Kubernetes Service:
- Yêu cầu từ một ứng dụng gửi đến địa chỉ IP hoặc tên DNS của Kubernetes Service.
Kubernetes Service chuyển hướng yêu cầu:
- Kubernetes Service nhận yêu cầu và chuyển tiếp nó đến một trong các pods của dịch vụ tương ứng trong cụm Kubernetes. Quá trình này dựa vào các quy tắc định tuyến của Kubernetes.
Yêu cầu vào Istio Service Mesh:
- Sau đó, yêu cầu sẽ đi qua các sidecar proxy Istio (Envoy) được gắn kèm với mỗi pod trong mạng lưới Istio.
Xử lý thông qua Istio Virtual Service:
- Sidecar proxy sẽ sử dụng thông tin từ Istio Virtual Service để quyết định cách xử lý yêu cầu này, bao gồm việc điều hướng lưu lượng tới các phiên bản khác nhau của dịch vụ, phân phối tải, canary deployments, và các chiến lược định tuyến khác.
Trả về kết quả cho ứng dụng:
- Sau khi xử lý, kết quả được trả về cho ứng dụng gửi yêu cầu ban đầu.
Tóm lại, Kubernetes Services cung cấp định danh và chuyển tiếp lưu lượng cho các dịch vụ trong cụm Kubernetes, trong khi Istio Virtual Services được sử dụng để quản lý và điều hướng lưu lượng trong mạng lưới Istio, bao gồm cả lưu lượng giữa các dịch vụ trong cụm Kubernetes và các dịch vụ bên ngoài cụm.