Course Content
1. DevOps overview
DevOps là gì
0/1
4. Kubernetes từ cơ bản đến nâng cao
0/20
5. CI/CD từ cơ bản đến nâng cao
6. Monitoring, Logging và Tracing
Khóa Học: DevOps Zero to Hero. (Đăng nhập để xem các video 1 cách miễn phí)

Một số tính năng nổi bật của Istio Service Mesh

  1. 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.
  2. 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.
  3. 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ộ.
  4. Bảo mật (Security):
    1. Authentication (Xác thực): Tự động mã hóa toàn bộ traffic giữa các service bằng mTLS (mutual TLS)
    2.  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 planedata 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

  1. 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.
  2. iptables can thiệp: Traffic đến Pod B bị các quy tắc iptables (do istio-init thiết lập) chặn lại.
  3. Chuyển hướng đến Istio Proxy: Thay vì đi thẳng đến cổng 8000 của container ứng dụng, iptables chuyển hướng (REDIRECT) traffic này đến một cổng đặc biệt của Istio Proxy. Trong ví dụ là cổng 15006 (cổng mặc định cho inbound traffic)
  4. 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.

  5. 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.

 

0% Complete