External Services và Virtual Service

·

3 min read

External ServicesVirtual 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:

Istioldie 1.6 / Monitoring and Access Policies for HTTP Egress Traffic

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ăngExternal ServicesVirtual 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ụngCung cấp thông tin kết nối dịch vụ bên ngoàiXá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ụngTruy cập dịch vụ bên ngoàiQuả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ền mysql.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 đến mysql.example.com nên được định tuyến đến các pod có nhãn app: mysql.