概念
- Gateway 网关
- VirtualService 虚拟路由
- DestinationRule 目标规则(和VS、SE配合使用)
- ServiceEtnry 服务入口(引用外部服务)
- WorkloadEntry 外部端点(外部集合和SE配合使用)
- EnvoyFilter 过滤器
- Sidecar
VS
和 DR
的关系
VirtualService
决定了流量要去哪个子集,而DestinationRule
定义了到达子集后如何分配流量。
————
除了Sidecar其他生产中都已经上过了, 这篇比较粗糙 了解个大概
案例
不同接口不同服务
# VS
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: bookinfo
spec:
hosts:
- bookinfo.com
http:
- match:
- uri:
prefix: /reviews
route:
- destination:
host: reviews
- match:
- uri:
prefix: /ratings
route:
- destination:
host: ratings
超时
# VS
http:
- match:
- uri:
prefix: /Beta.AiAssistantH5/
route:
- destination:
host: betaaiassistanth5
port:
number: 80
timeout: 30s
转发
# VS
http:
- match:
- uri:
prefix: /Beta.AiAssistantH5/
rewrite:
uri: /
route:
- destination:
host: betaaiassistanth5
port:
number: 80
重定向
# VS
spec:
hosts:
- proxy # service名称
http:
- name: redirect
match:
- uri:
prefix: "/backend" # 匹配前缀。
redirect: # 重定向配置
uri: /
authority: backend # 后端服务,service名称
port: 8082 # 从proxy这个service进来的请求,如果请求前缀是/backend,就把请求重定向到backend:8082/
- name: default
route:
- destination:
host: proxy # 请求前缀不是/backend的,依然让proxy服务处理
重试
下面的示例配置了在初始调用失败后最多重试 3 次来连接到服务子集,每个重试都有 2 秒的超时。
# VS
spec:
hosts:
- ratings
http:
- route:
- destination:
host: ratings
subset: v1
retries:
attempts: 3
perTryTimeout: 2s
权重
—— 不同的后端承接1个接口, 根据权重控制 (默认轮询)流量
# VS
spec:
hosts:
- bookinfo.com
http:
- match:
- uri:
prefix: /login
route:
- destination:
host: reviews
subset: v1
weight: 70
route:
- destination:
host: ratings
subset: v2
weight: 30
故障注入
⚠️⚠️⚠️ 不能和VirutalService中的超时、重试 结合使用
延迟:延迟是时间故障。它们模拟增加的网络延迟或一个超载的上游服务。
终止:终止是崩溃失败。他们模仿上游服务的失败。终止通常以 HTTP 错误码或 TCP 连接失败的形式出现。
下面的VS为千分之一的访问 ratings
服务的请求配置了一个 5 秒的延迟:
# VS
spec:
hosts:
- ratings
http:
- fault:
delay:
percentage:
value: 0.1
fixedDelay: 5s
route:
- destination:
host: ratings
subset: v1
熔断器
# DR
spec:
host: reviews
subsets:
- name: v1
labels:
version: v1
trafficPolicy:
connectionPool:
tcp:
maxConnections: 100
基于源IP会话保持
---
# DR
spec:
host: betaauthh5
trafficPolicy:
loadBalancer:
consistentHash:
useSourceIp: true
基于cookie会话保持
---
# DR
spec:
host: beta.authserver-slave
trafficPolicy:
loadBalancer:
consistentHash:
httpCookie:
name: beta_alb_keep
path: /
ttl: 0s
参考
流量管理实践
https://blog.csdn.net/qq_42515722/article/details/134207751
Istio流量管理
https://istio.io/latest/zh/docs/concepts/traffic-management/#retries
DestinationRule的路由规则
https://istio.io/latest/zh/docs/reference/config/networking/destination-rule/
Envoy路由管理
https://www.envoyproxy.io/docs/envoy/v1.5.0/intro/arch_overview/load_balancing