Một số tính năng nổi bật của Istio Service Mesh
- Observability:
Proxy tự động thu thập metrics (độ trễ, lỗi) và traces của mọi request để tạo bản đồ traffic theo thời gian thực. - Multi-Cluster:
Kết nối các service trên nhiều cluster khác nhau như thể chúng đang chạy chung một nơi. - Canary Deployment:
Chuyển một phần nhỏ traffic (ví dụ 10%) sang phiên bản mới để kiểm thử trước khi triển khai toàn bộ. - Bảo mật (Security):
- Authentication (Xác thực): Tự động mã hóa toàn bộ traffic giữa các service bằng mTLS (mutual TLS)
- Authorization (Phân quyền): Định nghĩa các chính sách (policy) để quy định service nào được phép gọi service nào, dựa trên danh tính (identity).
Cài đặt Istio trên Kubernetes
Thêm Istio Helm repository
helm repo add istio https://istio-release.storage.googleapis.com/charts
helm repo update
Tạo namespace cho Istio
kubectl create namespace istio-system
Cài đặt Chart base
Chart này chứa tất cả các Custom Resource Definitions (CRDs) cần thiết cho Istio. Nó không cần file values.
helm install istio-base istio/base -n istio-system
Cài đặt Chart istiod (Control Plane):
Tạo 1 file helm value:
## my-istio-values.yaml
#######################
global:
proxy:
autoInject: disabled
Đây là lúc bạn sử dụng file my-istio-values.yaml đã tạo.
helm install istiod istio/istiod -n istio-system -f my-istio-values.yaml
Nếu bạn được application Istio trên ArgoCD

Tiếp đên chúng ta test auto add sidecard istio-proxy trên namespace default:
kubectl label namespace istio-injection=enabled
Tiếp đến bạn add annotation vào deployment phần spec.template.metadata.annotations của file YAML.như hình:
sidecar.istio.io/inject: 'true'

Sau khi add annotation xong thì bạn kiểm tra pod thấy các container của Istio Sidecar là ok:
Architecture
Một Istio service mesh được chia ra làm 2 phần chính control plane và data plane.
- Control plane quản lý và cấu hình các proxy để định tuyến lưu lượng.
-
The data plane (Envoy) được triển khai dưới dạng sidecar. Các proxy này điều phối và kiểm soát tất cả giao tiếp mạng giữa các microservice. Chúng cũng sẽ collect và report tất cả các traffic trong hệ thống Service Mesh.
Đi sâu vào tìm hiểu Istio Proxy
Phân tích luồng traffic
- Pod A sẽ request vào Pod B thông quan Service B, traffic sẽ được Service B chuyển đến Port 8000 của Pod B.
iptablescan thiệp: Traffic đến Pod B bị các quy tắciptables(doistio-initthiết lập) chặn lại.- Chuyển hướng đến Istio Proxy: Thay vì đi thẳng đến cổng 8000 của container ứng dụng,
iptableschuyển hướng (REDIRECT) traffic này đến một cổng đặc biệt của Istio Proxy. Trong ví dụ là cổng15006(cổng mặc định cho inbound traffic) -
Istio Proxy xử lý: Istio Proxy nhận traffic, áp dụng các chính sách (mTLS, policies, thu thập metrics, v.v.), sau đó chuyển tiếp request đến ứng dụng.
- Proxy -> Container ứng dụng: Đây là điểm mấu chốt. Istio Proxy chuyển tiếp request đến địa chỉ
127.0.0.1:8000(localhost).
Mô tả các cổng quan trọng nhất và vai trò của chúng
| Cổng | Tên/Vai trò | Mô tả |
|---|---|---|
| 15001 | Outbound Traffic Listener | Nhận tất cả traffic đi ra từ ứng dụng bị iptables chuyển hướng. |
| 15006 | Inbound Traffic Listener | Nhận tất cả traffic đi vào pod bị iptables chuyển hướng. |
| 15021 | Health Check | Cung cấp endpoint cho readiness/liveness probe của proxy. |
| 15090 | Prometheus Metrics | Phơi bày các metrics để Prometheus thu thập. |
| 15020 | Istiod Communication / Debug | Dùng cho giao tiếp nâng cao và gỡ lỗi với control plane. |
| 15053 | DNS Proxy | Nhận các truy vấn DNS bị chuyển hướng để xử lý trong mesh. |