External Services và Virtual Service
External Services và Virtual Service là hai khái niệm quan trọng trong Istio, được sử dụng để định nghĩa và quản lý lưu lượng truy cập đến và từ các dịch vụ bên ngoài cụm Kubernetes. Tuy nhiên, chúng có những điểm khác biệt rõ ràng về chức năng và cách sử dụng:
External Services:
Mục đích: Định nghĩa các dịch vụ bên ngoài cụm Kubernetes mà các dịch vụ bên trong cần truy cập.
Cách sử dụng:
Cung cấp tên miền hoặc địa chỉ IP của dịch vụ bên ngoài.
Xác định các cổng và giao thức truy cập.
Tùy chọn cấu hình cân bằng tải và xác thực.
Ví dụ:
Dịch vụ cơ sở dữ liệu MySQL bên ngoài cụm Kubernetes.
Hệ thống thanh toán của bên thứ ba.
Virtual Service:
Mục đích: Định nghĩa cách thức lưu lượng truy cập được định tuyến đến các dịch vụ bên trong cụm Kubernetes.
Cách sử dụng:
Xác định các bộ chọn HTTP để khớp với các yêu cầu đến.
Định tuyến lưu lượng truy cập đến các phiên bản dịch vụ mong muốn.
Áp dụng các chính sách xử lý lưu lượng truy cập như cân bằng tải, giới hạn tốc độ và xác thực.
Thêm các tính năng nâng cao như chuyển hướng, viết lại URL và xử lý lỗi.
Ví dụ:
Định tuyến lưu lượng truy cập đến phiên bản mới nhất của dịch vụ microservice.
Cân bằng tải lưu lượng truy cập giữa nhiều bản sao dịch vụ.
Áp dụng xác thực JWT để kiểm soát quyền truy cập vào dịch vụ.
Bảng so sánh:
Tính năng | External Services | Virtual Service |
Mục đích | Định nghĩa dịch vụ bên ngoài | Định tuyến lưu lượng truy cập đến dịch vụ bên trong |
Cách sử dụng | Cung cấp thông tin kết nối dịch vụ bên ngoài | Xác định bộ chọn HTTP, định tuyến lưu lượng truy cập, áp dụng chính sách |
Ví dụ | Dịch vụ MySQL bên ngoài | Định tuyến lưu lượng truy cập đến phiên bản mới nhất của microservice |
Ứng dụng | Truy cập dịch vụ bên ngoài | Quản lý lưu lượng truy cập nội bộ |
Giả sử bạn đang triển khai một ứng dụng microservice trong Kubernetes bao gồm hai dịch vụ:
Dịch vụ microservice: Cung cấp chức năng cốt lõi của ứng dụng.
Dịch vụ bên ngoài: Dịch vụ MySQL bên ngoài cụm Kubernetes được sử dụng để lưu trữ dữ liệu cho ứng dụng microservice.
Mục tiêu:
- Sử dụng Istio để quản lý lưu lượng truy cập giữa dịch vụ microservice và dịch vụ MySQL bên ngoài.
Giải pháp:
1. Sử dụng External Services:
- Định nghĩa dịch vụ MySQL bên ngoài trong Istio:
apiVersion: networking.istio.io/v1alpha1
kind: ExternalService
metadata:
name: mysql-external
spec:
hosts:
- mysql.example.com
ports:
- number: 3306
protocol: TCP
- Trong dịch vụ microservice, sử dụng External Service để kết nối với dịch vụ MySQL:
YAML
apiVersion: v1
kind: Service
metadata:
name: microservice
spec:
selector:
app: microservice
ports:
- port: 80
targetPort: 8080
externalTrafficPolicy: Local
---
apiVersion: networking.istio.io/v1alpha1
kind: DestinationRule
metadata:
name: microservice-destination
spec:
host: mysql.example.com
subselect:
labels:
app: mysql
Giải thích:
External Service
mysql-external
định nghĩa dịch vụ MySQL bên ngoài với tên miềnmysql.example.com
và cổng TCP 3306.Dịch vụ microservice sử dụng External Traffic Policy
Local
để kết nối với dịch vụ MySQL bên ngoài thông qua External Service.Destination Rule
microservice-destination
xác định rằng lưu lượng truy cập từ dịch vụ microservice đếnmysql.example.com
nên được định tuyến đến các pod có nhãnapp: mysql
.