Quản lý lưu lượng Istio với Cơ chế Ngắt mạch - winvip.club

| Jan 8, 2025 min read

Ngày 28 tháng 12 năm 2020 - Máy tính

Cơ chế ngắt mạch là một đặc điểm quan trọng trong việc tạo ra các ứng dụng vi dịch có khả năng phục hồi cao. Sử dụng cơ chế ngắt mạch giúp chủ động bảo vệ trước các vấn đề như quá nhiều kết nối đồng thời, tần suất yêu cầu quá cao, từ đó ngăn chặn hiệu ứng đổ vỡ dây chuyền do một sự cố duy nhất gây ra.

Vì cấu hình ngắt mạch nhắm đến các máy chủ đích cụ thể, Istio sử dụng Quy tắc Điểm đến (Destination Rule) để thiết lập cấu hình này.

Bài viết này sẽ sử dụng ví dụ httpbin đi kèm sẵn của Istio để thiết lập cấu hình ngắt mạch, sau đó sử dụng khách hàng fortio để mô phỏng các yêu cầu đồng thời và kích hoạt cơ chế ngắt mạch. Để biết thêm về cài đặt Istio và chuẩn bị môi trường, bạn có thể tham khảo tài liệu “Cài đặt và Sử dụng Istio”.

1. Triển khai Ví dụ httpbin

Httpbin là một dịch vụ chuyên dùng để kiểm tra yêu cầu HTTP.

Sử dụng tập lệnh triển khai có sẵn trong thư mục samples để triển khai nó.

$ cd /usr/local/istio-1.8.1
$ kubectl apply -n istio-demo -f samples/httpbin/httpbin.yaml

2. Triển khai Khách hàng Fortio

Fortio là một công cụ chuyên dụng để kiểm tra HTTP và gRPC.

Sử dụng tập lệnh triển khai có sẵn trong thư mục samples để triển khai nó.

$ cd /usr/local/istio-1.8.1
$ kubectl apply -n istio-demo -f samples/httpbin/sample-client/fortio-deploy.yaml

Kiểm tra trạng thái Pod, đảm bảo rằng nó đã được triển khai thành công.

$ kubectl get pods -n istio-demo | grep fortio

Thực hiện lệnh trong Pod này để gửi yêu cầu đến dịch vụ httpbin, kết quả trả về cho thấy yêu cầu thành công.

$ kubectl exec fortio-deploy-576dbdfbc4-8gr9c -c fortio -n istio-demo -- /usr/bin/fortio curl -quiet 
HTTP/1.1 200 OK
server: envoy
date: Thứ Ba, 29 tháng 12 năm 2020 00:57:53 GMT
content-type: application/json
content-length: 628
access-control-allow-origin: *
access-control-allow-credentials: true
x-envoy-upstream-service-time: 3
{
 "args": {},
 "headers": {
  "Content-Length": "0",
  "Host": "httpbin:8000",
  "User-Agent": "fortio.org/fortio-1.11.3",
  "X-B3-Parentspanid": "5eaef1e4a496b17b",
  "X-B3-Sampled": "1",
  "X-B3-Spanid": "39a6ff187e9d25f3",
  "X-B3-Traceid": "cb07253ba49f9fb05eaef1e4a496b17b",
  "X-Envoy-Attempt-Count": "1",
  "X-Forwarded-Client-Cert": "By=spiffe://cluster.local/ns/istio-demo/sa/httpbin;Hash=d7126b5e272db10e8d7fc2e5a68d724fa01b7bd4fbbe3b21c830156d8ac0c647;Subject=\"\";URI=spiffe://cluster.local/ns/istio-demo/sa/default"
 },
 "origin": "127.0.0.1",
 "url": ""
}

Thiết lập số lượng kết nối đồng thời là 2 (-c 2), gửi 20 yêu cầu (-n 20), báo cáo cho thấy tất cả các mã phản hồi đều là 200.

$ kubectl exec fortio-deploy-576dbdfbc4-8gr9c -c fortio -n istio-demo -- /usr/bin/fortio load -c 2 -qps 0 -n 20 
...
200 : 20 (100.0 %)
...

3. Kiểm tra Cơ chế Ngắt mạch

Cấu hình Quy tắc Điểm đến (Destination Rule) cho httpbin và thiết lập các thông số ngắt mạch.

$ kubectl apply -n istio-demo -f - <<EOF
heredoc> apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
 name: httpbin
spec:
 host: httpbin
 trafficPolicy:
  connectionPool:
   tcp:
    maxConnections: 1
   http:
    http1MaxPendingRequests: 1
    maxRequestsPerConnection: 1
  outlierDetection:
   consecutiveErrors: 1
   interval: 1s
   baseEjectionTime: 3m
   maxEjectionPercent: 100
heredoc> [Rik68 Club Game Bài Tiền Thật](/post/3255/)  EOF

Thử nghiệm lại bằng cách sử dụng khách hàng fortio: Thiết lập số lượng kết nối đồng thời là 2 (-c 2), gửi 20 yêu cầu (-n 20), báo cáo cho thấy 25.0% yêu cầu trả về mã 503.

$ kubectl exec fortio-deploy-576dbdfbc4-8gr9c -c fortio -n istio-demo -- /usr/bin/fortio load -c 2 -qps 0 -n 20 
...
200 : 15 (75.0 %)
503 : 5 (25.0 %)
...

Truy cập vào Sidecar istio-proxy của fortio và kiểm tra trạng thái của pilot-agent, hiển thị có 5 yêu cầu đã tràn bộ đệm.

$ kubectl exec fortio-deploy-576dbdfbc4-8gr9c -c istio-proxy -n istio-demo -- pilot-agent request GET stats | grep httpbin | grep pending
cluster.outbound|8000||httpbin.istio-demo.svc.cluster.local.upstream_rq_pending_overflow: 5

Điều này chứng minh rằng cơ chế ngắt mạch của httpbin đã được kích hoạt.

4. Dọn dẹp Môi trường

Sau khi hoàn thành thử nghiệm, sử dụng các lệnh dưới đây để gỡ bỏ httpbin và fortio, xóa quy tắc destinationrule tạm thời.

$ kubectl delete -n istio-demo -f samples/httpbin/httpbin.yaml [Sam86 Club Choi Game Bài](/post/4011/) 
$ kubectl delete -n istio-demo -f samples/httpbin/sample-client/fortio-deploy.yaml
$ kubectl delete destinationrule/httpbin -n istio-demo

Tóm tắt bài viết, chúng ta đã giới thiệu cách Istio hỗ trợ cấu hình cơ chế ngắt mạch trên Quy tắc Điểm đến (Destination Rule). Sau đó, chúng ta đã áp dụng cấu hình ngắt mạch cho ví dụ httpbin và thực hiện kiểm tra bằng công cụ khách hàng fortio.


Tham khảo

  • [1] Istio Circuit Breaking
  • [2] Istio Traffic Management

![](Link Ảnh)

#Mạng Dịch Vụ #Istio