一、Istio 工作原理(生产视角)

1.1 架构核心

Istio =

  • 控制面(控制规则)

    • Istiod
  • 数据面(执行流量)

    • Envoy

1.2 请求链路

Client
 ↓
Ingress Gateway
 ↓
Envoy Sidecar(入口)
 ↓
VirtualService(路由规则)
 ↓
DestinationRule(版本选择)
 ↓
v1 / v2 Pod
 ↓
Envoy Sidecar(出口)

二、适用场景(生产级)

2.1 推荐场景

  • 微服务 > 10
  • 需要灰度发布
  • 需要熔断/限流
  • 需要 mTLS 安全
  • 需要流量可观测

2.2 不推荐场景

  • 单体应用
  • 服务很少
  • 没有 Kubernetes

三、生产级部署(完整 YAML)

基于 Kubernetes


3.1 Namespace + 自动注入

apiVersion: v1
kind: Namespace
metadata:
  name: prod
  labels:
    istio-injection: enabled

3.2 Java服务 v1 Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: order-v1
  namespace: prod
spec:
  replicas: 2
  selector:
    matchLabels:
      app: order
      version: v1
  template:
    metadata:
      labels:
        app: order
        version: v1
    spec:
      containers:
      - name: order
        image: order-service:v1
        ports:
        - containerPort: 8080

3.3 Java服务 v2 Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: order-v2
  namespace: prod
spec:
  replicas: 2
  selector:
    matchLabels:
      app: order
      version: v2
  template:
    metadata:
      labels:
        app: order
        version: v2
    spec:
      containers:
      - name: order
        image: order-service:v2
        ports:
        - containerPort: 8080

3.4 Service(统一入口)

apiVersion: v1
kind: Service
metadata:
  name: order
  namespace: prod
spec:
  selector:
    app: order
  ports:
  - name: http
    port: 80
    targetPort: 8080

四、版本定义(核心 Subset)

apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: order
  namespace: prod
spec:
  host: order
  trafficPolicy:
    outlierDetection:
      consecutive5xxErrors: 5
      interval: 5s
      baseEjectionTime: 30s
      maxEjectionPercent: 100
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2

五、Ingress Gateway(入口)

apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: order-gateway
  namespace: prod
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "*"

六、灰度发布核心(VirtualService)

6.1 基础灰度(10%)

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: order
  namespace: prod
spec:
  hosts:
  - order
  gateways:
  - order-gateway
  http:
  - route:
    - destination:
        host: order
        subset: v1
      weight: 90
    - destination:
        host: order
        subset: v2
      weight: 10

6.2 30%灰度

weight: 70
weight: 30

6.3 50%灰度

weight: 50
weight: 50

6.4 全量发布(100% v2)

weight: 0
weight: 100

七、按用户灰度(生产常用)

http:
- match:
  - headers:
      user-type:
        exact: internal
  route:
  - destination:
      host: order
      subset: v2

- route:
  - destination:
      host: order
      subset: v1
    weight: 100

八、熔断 + 自动保护(防止事故扩大)

trafficPolicy:
  outlierDetection:
    consecutive5xxErrors: 5
    interval: 5s
    baseEjectionTime: 30s
    maxEjectionPercent: 50

行为:

v2连续失败 → 自动踢出
流量自动回v1

九、生产级灰度流程(标准SOP)

1. 部署 v2
2. 10%流量
3. 观察指标(Prometheus)
4. 30%
5. 50%
6. 100%

十、监控体系(必须)

基于 Prometheus

关键指标:

  • 请求成功率
  • 5xx比例
  • P95延迟
  • QPS

十一、完整生产链路总结

Git提交
 ↓
CI构建(Jenkins / GitLab CI)
 ↓
Kubernetes部署 v1 + v2
 ↓
Istio VirtualService分流
 ↓
Envoy执行流量
 ↓
Prometheus监控
 ↓
Argo Rollouts决策(可选)
 ↓
自动扩灰 / 回滚

十二、核心总结(一句话)

👉 Istio 本质是:

通过 VirtualService 控制 Envoy 流量,实现无侵入的微服务版本治理系统

更多推荐