k8s通过Istio的灰度方案
·
一、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 流量,实现无侵入的微服务版本治理系统
–
更多推荐
所有评论(0)