ITPub博客

首页 > 云计算 > Docker/K8 > 早上好,我是 Istio 1.1

早上好,我是 Istio 1.1

原创 Docker/K8 作者:CCE_huawei 时间:2019-03-20 09:53:53 0 删除 编辑

1性能增强

虽然Istio1.0的目标是生产可用,但从去年7月份发布以来,在性能和稳定性上并不能让用户满意。社区的Performance and 

Scalability工作组在Istio v1.1中做了大量的努力以提高控制面和数据面的性能,其中最明显的性能增强包括:


  • Sidecar API,减少发给proxy的配置数量以及pilot负载。

  • 网络配置规则(Destinationrule,Virtualservie, ServiceEntry)中增加的 exportTo字段限制配置的可见范围。

  • Envoy默认收集的统计数据大量减少。

  • 给mixer增加load-shedding功能,防止overload。

  • 提升envoy和mixer之间的交互协议。

  • 可配置并发线程数,提高吞吐量。

  • 可配置filter来约束mixer遥测数据。

  • 从对Istio 1.1的测试数据来看,这部分工作取得了显著的效果。


1.1控制面性能表现


Pilot的CPU和内存使用受网格内的配置和系统状态的影响,例如负载变化速率,配置变化速率,连接到Pilot的proxy的数量等

。可以通过增加Pilot的实例数来减少配置分发处理的时间,提高性能。

在网格内有1000个服务,2000 个sidecars,每秒1000请求下的表现:

  • 单Pilot 实例使用 1 vCPU 和1.5 GB 的内存。

  • istio-telemetry服务使用0.6 vCPU。


1.2数据面性能表现


CPU:proxy在每秒1000个请求下大约消耗0.6 vCPU 。

内存:proxy的内存消耗主要取决于它需要处理的配置数量,大量的listeners, clusters, and routes配置会增加内存使用。

proxy每秒1000个请求下大约消耗50MB的内存。

时延:数据在传输时会通过客户端和服务端的sidecar,传输路径上的这两个proxy在1000 rps情况下,99%的请求时延是

10 ms(TP99),单独server端的proxy增加6ms的时延。如果启用策略会进一步增加时延。

2多集群方案

在1.0中只提供了一种基于扁平网络的多集群方案:Istio控制面部署在一个Kubernetes集群中。这种方案要求各集群的 

Pod 地址不能重叠,且所有的 Kubernetes 控制平面API Server 互通。看上去就是物理上把多个Kubernetes并到一个Istio

控制面下,在Istio看来是同一个网格。这种方案的网络要求苛刻,实际应用并不多。


在新发布的1.1版本上,多集群上做了非常多的增强,除了保留1.0扁平网络作为一种单控制面的方案外,还提出了另外两种

方案供用户根据实际环境和需求灵活选择,这两种方案都不要求是扁平网络:


多控制面方案:在每个集群中安装完整的Istio控制面,可以看成是一种松散的联邦,集群间服务在Gateway处联通即可。

通过一个全局的DNS将跨集群的请求路由到另外一个集群里去。这种集群的访问是基于Istio的ServiceEntry和Gateway来

实现的,配置较多且复杂,需用户自己维护。


一种集群感知(Split Horizon EDS)的单控制面方案:Istio控制面板只在一个Kubernetes集群中安装,Istio控制面仍然

需要连接所有Kubernetes集群的Kube API Server。每个集群都有集群标识和网络标识。在服务间访问时,如果目标是本

集群的负载,则类似单集群的方式直接转发;如果是其他集群的实例,则将流量转发到集群的入口网关上,再经过网关转发

给实际对端。

3安全

3.1HTTP Readiness Liveness Probe自动重写


mTLS模式下,进入Envoy的HTTP请求会在TLS握手阶段被拒绝。1.1新增加了HTTP Probe的自动重写,通过将HTTP Probe

请求发送到pilot-agent由其转发HTTP探测到应用,进而绕开Envoy的TLS认证。默认自动重写是关闭状态,用户需要根据

实际需要打开。


3.2集群级别的RBAC设置ClusterRbacConfig


RbacConfig被标记为废弃,用户升级1.1后,必须迁移到使用ClusterRbacConfig。因为RbacConfig有bug,在一些情况下

其作用范围会被缩小到命名空间。


3.3SDS


SDS(SecretDiscovery Service)通过节点密钥生成提供更强的安全性以及动态的证书回滚。可以取代目前使用secret卷挂

载的方式提供证书。1.1中目前为alpha,不建议生产环境使用,但是随着Istio发展值得期待。


3.4授权


新增对TCP类型服务的RBAC授权以及基于用户组的授权。


3.5Vault集成


允许用户集成开源Vault,使用Vault CA签发证书。


4网络

4.1新的sidecar API资源


在1.1中引入Sidecar这资源对象可以更精细的控制Envoy转发和接收的端口、协议。在指定命名空间中使用sidecar资源时

支持定义可访问的服务范围。这样可以降低发给proxy的配置的数量。在大规模的集群中,我们推荐给每个namespace增加

sidecar的对象。 这个功能主要是为了提升性能,减轻pilot计算的负担。对proxy的影响是:1. 内存占用少,2. 降低网络带

宽占用。  


4.2exportTo


在Istio1.1版本中添加了一个重要字段exportTo。用于控制VirtualService、DestinationRule和 ServiceEntry 跨Namespace

的可见性。这样就可以控制一个Namespace下定义的资源对象是否可以被其他Namespace下的Envoy执行了。如果未赋值

则默认全局可见。当前版本中只支持“.”和“*”两种配置。

  •  “.”表示仅应用到当前Namespace。

  • “*”表示应用到所有Namespace。


4.3Locality based loadbalancer


Istio 1.1 引入了负载均衡新特性:基于位置的负载均衡。这也是华为主导的新特性。目前是alpha特性,只支持服务网格全

局的位置感知的负载均衡设置:


基于位置权重的负载均衡设置(Locality-weighted load balancing):


Locality-weighted load balancing允许管理员基于流量来源及终止的位置信息控制流量的分发。例如可以设置从源位置

{region}/{zone}/{sub-zone}的工作负载发出的流量转发到目的位置的endpoints负载均衡权重:用户可以为相同区域的工作

负载访问设置较高的权重,为不同区域的工作负载设置较小的权重,减少网络延迟。


基于位置的故障转移设置:


类似于Envoy的“Zone aware routing”负载均衡策略,基于位置的故障转移特性,通过为不同的位置的endpoints设置不

同的优先级,控制流量的转发策略。默认设置如下,同一位置{region}/{zone}/{sub-zone}的endpoints优先级最高,同一

{region}/{zone}的endpoints优先级次之,同一region的endpoints第三,最后故障转移设置区域以及其他区域的endpoints

依次。endpoints全部健康的情况下,流量只会在同一{region}/{zone}/{sub-zone}转发。当endpoint变得不健康时,会进

行相应的降级处理,选择低优先级的endpoints转发。


4.4pilot配置资源发现


Istio1.1将galley作为默认的 配置规则发现中心,pilot通过MCP协议与galley进行配置订阅,取代1.0以前直接从Kubernetes

以CR的方式watch配置资源。

5策略和遥测

默认关闭策略检查功能 为了提高多数客户场景下的性能,安装时默认关闭策略检查, 后期可按需开启此功能。


弃用ServiceGraph,推荐使用 Kiali:提供了更丰富的可视化体验。


多方面降低开销 ,提升性能和可扩展性:

  • 减少Envoy生成的统计数据的默认收集

  • Mixer的工作负载增加load-shedding功能

  • 改进Envoy和Mixer的通信协议

控制请求头和路由 增加选项使适配器可以修改请求头和路由

进程外适配器 进程外适配器功能生产可用,下个release弃用进程内适配器。


多方面增强Tracing的能力: 

  • Trace id支持128bit的范围

  • 支持向LightStep发送追踪数据

  • 增加选项完全禁用Mixer支持的服务的追踪功能

  • 增加策略的decision-aware 追踪


默认的TCP指标 为追踪TCP连接增加默认指标


降低Addon对Load Balancer的依赖 不再通过独立的load balancers对外暴露addons,而是通过Istio gateway来暴露插件

服务。

安全的Addon证书 改变插件的证书存储方式。Grafana, Kiali, and Jaeger的用户名和密码存放在kubernetes的secrets中

以提高安全性和合规性。

去除内置的statsd collector。Istio目前支持用户自己的statsd,以提高现有Kubernetes部署的灵活性。

另外,Istio运维管理的复杂度也不能被部分用户接受(比如:众多的crd资源),因此社区专门成立了User Experience工作

组致力于提高Istio的易用性,进一步降低其使用门槛。

经过大家的共同努力,Istio1.1版本几经推迟终于发布了!我们有理由对其充满期待和信心,共同催熟以Istio为代表的云原生

服务网格技术,为我们的用户提供高品质的云服务体验。

欢迎试用华为云应用服务网格Istio。


相关服务请访问: https://support.huaweicloud.com/cce/index.html?utm_content=cce_helpcenter_2019




来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69908804/viewspace-2638817/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-01-28

  • 博文量
    46
  • 访问量
    58758