Khám Phá Ban Đầu Về Quản Lý Lưu lượng Istio - 2233win

| May 7, 2025 min read

Ngày 21 tháng 04 năm 2020 - Máy tính

Istio sử dụng Envoy để làm trung gian cho tất cả lưu lượng ra vào của dịch vụ trong lưới. Điều này cho phép kiểm soát lưu lượng một cách tự do mà không cần thay đổi mã nguồn dịch vụ. Với Istio, các đặc điểm cấp dịch vụ như xử lý ngắt kết nối, thời gian chờ dịch vụ, và tái thử đều có thể được thực hiện chỉ với vài dòng cấu hình đơn giản; đồng thời, những nhiệm vụ quan trọng như thử nghiệm A/B, phát hành dần dần, và nâng cấp cuộn theo tỷ lệ cũng có thể dễ dàng đạt được.

Tất cả các tính năng cao cấp nêu trên đều có thể được thực hiện thông qua API quản lý lưu lượng Istio, API này sử dụng CRDs (định nghĩa tài nguyên tùy chỉnh) của Kubernetes để cấu hình. Một số tài nguyên quan trọng của API quản nhà cái 888b lý lưu lượng bao gồm: Virtual Service, Destination Rule, Gateway, Service Entry, và Sidecar. Dưới đây sẽ lần lượt giới thiệu từng tài nguyên này.

Virtual Service

Virtual Service thường được sử dụng cùng với Destination Rule, tạo thành hai tài nguyên quan trọng trong việc kiểm soát lưu lượng của Istio. Virtual Service dùng để cấu hình cách lưu lượng được định tuyến đến dịch vụ và các tập con của nó, trong khi Destination Rule chuyên về cấu hình các tập con của dịch vụ. Việc chia nhỏ thành hai cwin 667 tài nguyên giúp quy tắc định tuyến của Virtual Service trông gọn gàng hơn.

Virtual Service bao gồm một loạt các quy tắc định tuyến được khớp tuần iwin68.club phiên bản mới tự từ trên xuống dưới. Khi lưu lượng đến, nó sẽ duyệt qua các quy tắc đã cấu hình theo thứ tự, và ngay khi tìm thấy sự khớp, nó sẽ chuyển hướng đến dịch vụ đích cụ thể.

Virtual Service tách rời giữa máy khách gửi yêu cầu và dịch vụ đích thực tế. Mô hình sử dụng điển hình là phân phối lưu lượng đến các phiên bản khác nhau (tập con) của một dịch vụ. Nhờ vậy, đối với máy khách, chỉ có một lối vào duy nhất, còn logic phân phối cụ thể thì được thực hiện bởi Envoy của Istio. Trên cơ sở quy tắc định tuyến của Virtual Service, có thể cấu hình các chức năng cao cấp như “20% lưu lượng đến phiên bản mới” hoặc “các yêu cầu của người dùng này đến phiên bản cụ thể”.

Một lợi thế khác của Virtual Service là kiểm soát định tuyến lưu lượng hoàn toàn tách biệt khỏi các trường hợp triển khai thực tế. Điều này cho phép số lượng các phiên bản dịch vụ tương ứng có thể mở rộng hoặc thu hẹp tự do mà không cần lo lắng về cách cấu hình kiểm soát định tuyến. So sánh với việc sử dụng Kubernetes để phân luồng theo tỷ lệ, điều đó đòi hỏi phải kiểm soát số lượng phiên bản, trở nên rất phức tạp.

Ngoài ra, bạn cũng có thể sử dụng Virtual Service để đại diện cho tất cả lưu lượng của các dịch vụ trong Namespace, biến nó thành một lối vào thống nhất cho lưu lượng. Cách dùng này cũng hoàn toàn khả thi. Hơn nữa, nó có thể được kết hợp với Gateway để kiểm soát lưu lượng ra/vào.

Dưới đây là ví dụ cấu hình của Virtual Service. Cấu hình sau đây định nghĩa hai quy tắc định tuyến cho dịch vụ reviews: nếu tiêu đề yêu cầu là end-user: jason thì sẽ dẫn đến phiên bản v2, ngược lại sẽ dẫn đến phiên bản v3.

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
    - reviews
  http:
    - match:
        - headers:
            end-user:
              exact: jason
      route:
        - destination:
            host: reviews
            subset: v2
    - route:
        - destination:
            host: reviews
            subset: v3

Dưới đây là giải thích về các trường quan trọng:

  • hosts: Đại diện cho host của Virtual Service, tức địa chỉ mà máy khách (client) sử dụng để gọi dịch vụ. Trong ví dụ này, sử dụng tên dịch vụ trong Kubernetes.
  • match: Biểu thị điều kiện khớp. Trong ví dụ này, quy tắc khớp đầu tiên sử dụng trường này để lọc yêu cầu dựa trên tiêu đề.
  • destination: Biểu thị nơi lưu lượng thỏa mãn điều kiện sẽ được dẫn đến. Trường host bên dưới biểu thị địa chỉ dịch vụ thực tế (phải đăng ký vào trung tâm đăng ký dịch vụ Istio, nếu không Envoy sẽ không tìm thấy); trường subset biểu thị tập con dịch vụ nào mà lưu lượng thỏa mãn quy tắc sẽ được dẫn đến.

Vì các quy tắc định tuyến được khớp tuần tự từ trên xuống dưới, nên ưu tiên của quy tắc trước cao hơn quy tắc sau. Trong ví dụ này, quy tắc thứ hai không có điều kiện khớp, vì vậy mọi lưu lượng không thỏa mãn quy tắc đầu tiên sẽ được dẫn đến nó. Đề xuất khi viết quy tắc định tuyến của Virtual Service là luôn có một định tuyến mặc định ở cuối.

Ví dụ trên định tuyến lưu lượng cho hai phiên bản của dịch vụ reviews. Dưới đây là cách sử dụng Virtual Service để định tuyến lưu lượng cho hai dịch vụ khác nhau (ratings và reviews).

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: bookinfo
spec:
  hosts:
    - bookinfo.com
  http:
    - match:
        - uri:
            prefix: /reviews
      route:
        - destination:
            host: reviews
    - match:
        - uri:
            prefix: /ratings
      route:
        - destination:
            host: ratings

Quy tắc định tuyến trên thiết lập các prefix khác nhau cho hai dịch vụ, lưu lượng sẽ được dẫn đến dịch vụ khác nhau dựa trên URI của yêu cầu.

Ngoài việc sử dụng match để thiết lập điều kiện khớp, bạn cũng có thể sử dụng trường weight để phân luồng theo tỷ lệ. Ví dụ dưới đây cấu hình quy tắc định tuyến cho dịch vụ reviews, dẫn 80% lưu lượng đến v1 và 20% đến v2.

spec:
  hosts:
    - reviews
  http:
    - route:
        - destination:
            host: reviews
            subset: v1
          weight: 80
        - destination:
            host: reviews
            subset: v2
          weight: 20

[1] #Lưới Dịch Vụ #Istio