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