Istio Mixer组件和服务的重要说明

[TOC]

Istio Mixer组件和服务的重要说明

Mixer的Service和Pod

三个Service【statsd、Policy、Telemetry】

Mixer分为Policy和Telemetry两个子模块。Policy用于向Envoy提供准入策略控制,黑白名单控制,速率限制等相关策略;Telemetry为Envoy提供了数据上报和日志搜集服务,以用于监控告警和日志查询。

Mixer Policy和Mixer Telemetry很容易成为整个集群的性能短板,因为Envoy发起每个请求前都需要对Policy服务进行Check请求,一方面增加了业务请求本身的延迟,一方面也给作为单点的Policy增大了负载压力。如果追求性能,可以裁剪一些功能如速率限制,全局配额等,禁用Mixer的Policy

Istio 在 UAEK 中的实践改造之路中有对这个的较多说明。

istio-statsd-prom-bridge 这个服务也是mixer会提供的,通过安装参数--set mixer.enabled=false就禁能了这个组件,禁能这个组件会导致envoy初始化失败,报错日志error initializing configuration '/etc/istio/proxy/envoy-rev0.json': malformed IP address: istio-statsd-prom-bridge

Policy、Telemetry 、statsd详解

kubectl get svc -n istio-system可以发现会有两个和Mixer相关的Service

  • istio-policy

    • Mixer相关组件,用于与envoy交互,check需要上报的数据,确定缓存内容,挂掉会影响check相关功能,除非设置为不进行check

    • Envoy会在每次请求发送前向Mixer Policy发送Check请求检查该请求是否收策略限制或者配额限制

    • 不能直接关闭或者说禁能这个策略组件,因为默认请求都是要去policy pods进行check检测的,如果失败则会导致请求失败,详见

    • 如果要禁能所有的policy策略检查,需要重新编辑整个服务网格的配置,并且重启pilot 容器

    • 全局选项--set global.disablePolicyChecks=true可以禁止策略检查,然后对应的helm install的value.yaml的配置这里修改disablePolicyChecks为true也是OK的。注意这些个策略的更改需要稍等一些时间才能全部生效。修改完需要重启pilot。

    • 通过安装参数--set mixer.enabled=false禁能Mixer组件

  • istio-telemetry

    • Mixer相关组件的Service,用于采集envoy上报的遥测数据,该组件挂掉将导致各监控运维插件无法采集到数据,同时,该组件在高并发情境下,会承受较大负荷,建议设置为多实例,增强可靠性

    • Envoy每次请求接收后会向Mixer Telemetry上报本次请求的基本信息,如调用是否成功、返回状态码、耗时数据。

    • 暴露9091、9093、15004、42422端口

      • 9093端口是Mixer组件本身的prometheus暴露的端口
      • 42422是所有 Mixer 生成的网格指标
    • 通过安装参数--set mixer.enabled=false禁能Mixer组件

  • istio-statsd-prom-bridge

    • 暴露9102、9125端口

    • 这个 statsd是一个转换为prometheus的组件,用来统计envoy 生成的数据,这个是必须的

    • 通过安装参数--set mixer.enabled=false就禁能了这个组件,禁能这个组件会导致ingressgateway的envoy初始化失败,报错日志error initializing configuration '/etc/istio/proxy/envoy-rev0.json': malformed IP address: istio-statsd-prom-bridge,因为statsdUdpAddress这个参数指定了地址为istio-statsd-prom-bridge:9125,因此还需要修改istio这个configmap中的statsdUdpAddress地址

    • 安装选项global.proxy.envoyStatsd.enabled可以控制envoy是否直接通过statsd上报,global.proxy.envoyStatsd.host和global.proxy.envoyStatsd.port可以设置statsd exporter的地址

  • 整体而言,完全禁用Mixer的话,需要配置:

    • envoy的statsd exporter的地址【statsdUdpAddress】
    • set global.disablePolicyChecks=true
    • set mixer.enabled=false

如果直接通过安装参数--set mixer.enabled=false禁能Mixer组件后,访问会报错如下:

[2018-10-12T09:21:17.749Z] "GET /wudebao HTTP/1.1" 503 - 0 33 0 - "192.168.65.3" "curl/7.54.0" "457cf709-2396-953e-b9e0-c405c9c56544" "www.wudebao-web.com" "-"
[libprotobuf ERROR src/istio/mixerclient/report_batch.cc:83] Mixer Report failed with: UNAVAILABLE:Cluster not available

不过,这个异步的report上报不会影响使用,也就是不会影响正常流程。只有同步的check才会影响到流程和功能使用,设置全局选项不进行check即可解决,但是需要注意envoy的statsdUdpAddress

修改 install/kubernetes/helm/istio/charts/mixer/templates/deployment.yaml 和 service.yaml ,删除掉policy配置,然后更新就不会再部署policy了 。或者直接将install/kubernetes/helm/istio/charts/mixer/templates/deployment.yaml 和 service.yaml文件移除,就都不会部署istio-telemetry 和 istio-policy,这个做法还会部署istio-statsd-prom-bridge ,其实这正是我们想要的。

不过问题在于,无法通过选型参数来禁止istio-telemetry 和 istio-policy,这个后面还需要再研究研究。

Mixer的check和report

需要check的 policy 策略

envoy的每个前置请求都要到mixer中进行check,这个check必然会导致一些性能的降低,抛开性能不谈,先看看这个check的到底是哪些策略,有些什么策略可以check,check完会如何?

首先要说明的是,这些策略的检测,是人为控制的,也就是并非是istio自带就有会这些策略需要检测,而是需要人为去配置一些策略。

envoy发起check请求的时候,会根据收到的请求生成指定的attributes,然后attributes作为参数之一向Mixer发起Check rpc请求。Mixer中如果有对应的adapter,则会进行处理然后返回响应结果,然后envoy根据结果决定是否执行请求或拒绝请求。

一些常见的check策略如:白名单检查、ACL检查、速率限制等,其实这些功能都是相对来说对业务更为友好的一些功能,所以,如果性能问题不是一个大的瓶颈下的话,这个组件最好还是保留较好。

需要report的Telemetry遥测报告

Mixer提供了一个GRPC接口,这个接口负责接收Envoy上报的数据,Envoy会向Mixer上报日志、监控(log、metrics)等数据,Envoy上报的原始数据都是一些属性词汇,然后Mixer会转换,最终会分发到logentry 和 Metric,Mixer后端的adapter(如prometheus)会基于遥测数据做进一步处理。

Proxy代理(Envoy sidecar)是在执行请求之后才需要Report,调用Mixer进行上报,这个属于后置上报,是异步的处理流程,模式是fire-and-forget,当然如果后端adapter处理不过来,无法Response给Envoy的话同样还是会影响到Envoy的性能。

从一些Default Metrics中可以看到提供给外界的一些监控指标是非常重要的,有助于我们去分析整个系统和后端adapter

遥测相关的后端包含:

  • Tracing
  • prometheus
  • grafana
  • serviceGraph
  • Metrics
  • Fluentd

当然,prometheus、grafana、Tracing等可以直接通过envoy,而不经过Mixer;经过Mixer可以查询到更丰富的数据,当然缺陷就在于多了一层降低性能。

问题 & TODO

无法通过选项参数来禁止istio-telemetry 和 istio-policy,这个后面还需要再研究研究。可以将helm install下的相关的Service和Deployment文件移除,然后helm install 或者 upgrade

【"欢迎关注我的微信公众号:Linux 服务端系统研发,后面会大力通过微信公众号发送优质文章"】

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容