Fork me on GitHub

版权声明 本站原创文章 由 萌叔 发表
转载请注明 萌叔 | https://vearne.cc

1. 前言

本文存在的目的,是为了通过图例的方式更好的整理envoy存在的意义

2. 图示

envoy

namespace配置了自动注入(istio-injection:enabled)之后,每个POD都会自动生成1个Sidecar容器 istio-proxy(运行sidecar代理,实现方式为Envoy或MOSN

图示展示服务网格中的请求的情况

2.1 请求网格内部的服务

downstreamupstream是网格内的2个服务的容器
downstream调用upstream

对这种场景,请求穿过需要穿过2个envoy,1个是调用方POD中的envoy, 1个是被调用方POD中的envoy

2.2 请求网格外部的服务

External Service是网格外部的1个服务
对于这种场景,只穿过一次envoy

3. 支持的服务治理功能

  • 请求分发, 按不同版本,以特定权重分发
  • 负载均衡
  • URL重写
  • 故障注入,包含增加延迟,或者直接拒绝
  • 服务熔断,比如针对5XX执行熔断操作
  • 限频
  • 重试
  • 超时控制
  • 状态统计 QPS/流量/URL/延迟等
    这部分信息最后会由prometheus统一收集,最终展现在Grafana和Kiali中

envoy实际是将原来应用中的拦截器以及网关实现的部分功能做了抽取和抽象,使得应用开发人员能够转注于业务逻辑开发。

后记(重要)

istio默认不记录日志。如果需要记录请求日志,需要在ConfigMap istio中,增加

accessLogFile: /dev/stdout
accessLogEncoding: JSON    # 可选值为 JSON或TEXT

另外envoy不支持HTTP1.0,如果发出的请求是HTTP1.0,会收到HTTP Status Code 426,要求升级协议。

参考资料

1.Sidecar 注入及透明流量劫持
2.Istio流量分析


打赏我

微信支付码

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注