Quản lý lưu lượng Istio với tính năng Mirror Traffic - p88 nhà cái

| Apr 16, 2025 min read

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

Bài viết này sẽ giới thiệu về tính năng mirror traffic (phản chiếu lưu lượng) của Istio. Tính năng này cho phép sao chép một bản sao của lưu lượng thực tế từ dịch vụ này đến dịch vụ khác. Đặc biệt hữu ích khi tiến hành gỡ lỗi trong môi trường sản xuất.

Trong bài viết này, chúng ta sẽ sử dụng ví dụ httpbin để kiểm tra. Đầu tiên triển khai hai phiên bản của dịch vụ httpbin, sau đó chuyển tất cả lưu lượng yêu cầu đến v1 và cuối cùng sử dụng tính năng mirror Tai Benvip Game Danh Bai 3C traffic để sao chép lưu lượng đến v2.

Về việc cài đặt Istio và các bước chuẩn bị môi trường, bạn có thể tham khảo “Hướng dẫn cài đặt Pk16vn Bet và sử dụng Istio”.

1. Triển khai ví dụ httpbin

Triển khai httpbin-v1 với log truy cập được bật.

apiVersion: apps/v1
kind: Deployment
metadata:
 name: httpbin-v1
spec:
 replicas: 1
 selector:
  matchLabels:
   app: httpbin
   version: v1
 template:
  metadata:
   labels:
    app: httpbin
    version: v1
  spec:
   containers:
   - image: docker.io/kennethreitz/httpbin
    imagePullPolicy: IfNotPresent
    name: httpbin
    command: ["gunicorn", "--access-logfile", "-", "-b", "0.0.0.0:80", "httpbin:app"] # Bật log truy cập
    ports:
    - containerPort: 80

Tiếp tục triển khai httpbin-v2 cũng với log truy cập được bật.

apiVersion: apps/v1
kind: Deployment
metadata:
 name: httpbin-v2
spec:
 replicas: 1
 selector:
  matchLabels:
   app: httpbin
   version: v2
 template:
  metadata:
   labels:
    app: httpbin
    version: v2
  spec:
   containers:
   - image: docker.io/kennethreitz/httpbin
    imagePullPolicy: IfNotPresent
    name: httpbin
    command: ["gunicorn", "--access-logfile", "-", "-b", "0.0.0.0:80", "httpbin:app"] # Bật log truy cập
    ports:
    - containerPort: 80

Kiểm tra trạng thái Pod, cả hai phiên bản đã được triển khai thành công.

$ kubectl get pods -n istio-demo | grep httpbin
httpbin-v1-75d9447d79-vblbs    2/2   Đang chạy  0     2m29s
httpbin-v2-fb86d8d46-wgskr    2/2   Đang chạy  0     91s

Tạo Service cho httpbin.

apiVersion: v1
kind: Service
metadata:
 name: httpbin
 labels:
  app: httpbin
spec:
 ports:
 - name: http
  port: 8000
  targetPort: 80
 selector:
  app: httpbin

Sau khi hoàn thành việc triển khai httpbin, bây giờ hãy triển khai sleep, đây là một dịch vụ chứa các lệnh như curl để sử dụng làm client kiểm thử.

2. Triển khai client sleep

Triển khai dịch vụ sleep.

apiVersion: apps/v1
kind: Deployment
metadata:
 name: sleep
spec:
 replicas: 1
 selector:
  matchLabels:
   app: sleep
 template:
  metadata:
   labels:
    app: sleep
  spec:
   containers:
   - name: sleep
    image: tutum/curl
    command: ["/bin/sleep","infinity"]
    imagePullPolicy: IfNotPresent

Truy cập vào Pod và gửi yêu cầu đến httpbin.

$ kubectl exec sleep-96c4ddd7f-ktjgg -c sleep -n istio-demo -- curl -s 

Kiểm tra log của httpbin v1 và v2. Bạn sẽ thấy rằng cả hai phiên bản nhận được yêu cầu ngẫu nhiên.

$ kubectl logs -f -l app=httpbin,version=v1 -c httpbin -n istio-demo
127.0.0.1 - - [30/Tháng Mười Hai/2020:00:41:30 +0000] "GET /headers HTTP/1.1" 200 559 "-" "curl/7.35.0"

$ kubectl logs -f -l app=httpbin,version=v2 -c httpbin -n istio-demo
127.0.0.1 - - [30/Tháng Mười Hai/2020:00:41:28 +0000] "GET /headers HTTP/1.1" 200 559 "-" "curl/7.35.0"

3. Chuyển toàn bộ lưu lượng đến v1

Cấu hình Virtual Service và Destination Rule cho httpbin để chuyển toàn bộ lưu lượng yêu cầu đến v1.

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
 name: httpbin
spec:
 hosts:
  - httpbin
 http:
 - route:
  - destination:
    host: httpbin
    subset: v1
   weight: 100
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
 name: httpbin
spec:
 host: httpbin
 subsets:
 - name: v1
  labels:
   version: v1
 - name: v2
  labels:
   version: v2

Khi sử dụng sleep để gửi yêu cầu đến httpbin, chỉ có httpbin v1 in ra log truy cập.

4. Phản chiếu lưu lượng đến v2

Chỉnh sửa cấu hình route của Virtual Service httpbin để sao chép lưu lượng từ v1 sang v2.

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
 name: httpbin
spec:
 hosts:
  - httpbin
 http:
 - route:
  - destination:
    host: httpbin
    subset: v1
   weight: 100
  mirror: # Thêm cấu hình phản chiếu lưu lượng
   host: httpbin
   subset: v2
  mirror_percent: 100

Lúc này, khi sử dụng sleep để gửi yêu cầu đến httpbin, bạn sẽ thấy cả httpbin v1 và v2 đều in ra log truy cập.

$ kubectl logs -f -l app=httpbin,version=v1 -c httpbin -n istio-demo
127.0.0.1 - - [30/Tháng Mười Hai/2020:00:51:27 +0000] "GET /headers HTTP/1.1" 200 559 "-" "curl/7.35.0"

$ kubectl logs -f -l app=httpbin,version=v2 -c httpbin -n istio-demo
127.0.0.1 - - [30/Tháng Mười Hai/2020:00:51:27 +0000] "GET /headers HTTP/1.1" 200 599 "-" "curl/7.35.0"

Như vậy đã kiểm chứng được tính năng mirror traffic của Istio.

5. Dọn dẹp môi trường

Sau khi hoàn thành kiểm tra, sử dụng các lệnh dưới đây để gỡ bỏ httpbin và sleep.

$ kubectl delete deployment httpbin-v1 httpbin-v2 sleep -n istio-demo
$ kubectl delete svc httpbin -n istio-demo

Xóa cấu hình route tạm thời.

$ kubectl delete virtualservice/httpbin -n istio-demo
$ kubectl delete destinationrule/httpbin -n istio-demo

Tóm tắt bài viết, chúng ta đã giới thiệu về tính năng mirror traffic của Istio và kiểm tra nó thông qua ví dụ httpbin.

[1] Istio game bài đổi thưởng 2023 Mirroring
[2] Istio Traffic Management

#MạngDịchVụ #Istio