【HDC.Cloud华为云基础服务】早上好,我是 Istio 1.1

备受关注的Istio v1.1已经于今日发布。华为云专家将结合其生产中的使用体会和参与社区共同构建1.1版本的经历,筛选其中影响较大、受关注最多的若干重大特性变化进行深入解析,并陪伴大家一起见证Istio逐步走向成熟的里程碑时刻。本文不对Istio 1.1的所有特性进行列举,完整的功能清单请参考《Istio1.1功能预告》或者移步Istio社区文档:

https://preliminary.istio.io/about/notes/1.1/


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.1

HTTP 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.3

SDS

SDS(SecretDiscovery Service)通过节点密钥生成提供更强的安全性以及动态的证书回滚。可以取代目前使用secret卷挂载的方式提供证书。1.1中目前为alpha,不建议生产环境使用,但是随着Istio发展值得期待。


3.4

授权

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


3.5

Vault集成

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


4

网络


4.1

新的sidecar API资源

在1.1中引入Sidecar这资源对象可以更精细的控制Envoy转发和接收的端口、协议。在指定命名空间中使用sidecar资源时,支持定义可访问的服务范围。这样可以降低发给proxy的配置的数量。在大规模的集群中,我们推荐给每个namespace增加sidecar的对象。 这个功能主要是为了提升性能,减轻pilot计算的负担。对proxy的影响是:1. 内存占用少,2. 降低网络带宽占用。  


4.2

exportTo

在Istio1.1版本中添加了一个重要字段exportTo。用于控制VirtualService、DestinationRule和 ServiceEntry 跨Namespace的可见性。这样就可以控制一个Namespace下定义的资源对象是否可以被其他Namespace下的Envoy执行了。如果未赋值,则默认全局可见。当前版本中只支持“.”和“*”两种配置。

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

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


4.3

Locality based loadbalancer

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

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

    Locality-weighted load balancing允许管理员基于流量来源及终止的位置信息控制流量的分发。例如可以设置从源位置{region}/{zone}/{sub-zone}的工作负载发出的流量转发到目的位置的endpoints负载均衡权重:用户可以为相同区域的工作负载访问设置较高的权重,为不同区域的工作负载设置较小的权重,减少网络延迟。

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

    类似于Envoy的“Zone aware routing”负载均衡策略,基于位置的故障转移特性,通过为不同的位置的endpoints设置不同的优先级,控制流量的转发策略。默认设置如下,同一位置{region}/{zone}/{sub-zone}的endpoints优先级最高,同一{region}/{zone}的endpoints优先级次之,同一region的endpoints第三,最后故障转移设置区域以及其他区域的endpoints依次。endpoints全部健康的情况下,流量只会在同一{region}/{zone}/{sub-zone}转发。当endpoint变得不健康时,会进行相应的降级处理,选择低优先级的endpoints转发。

4.4

pilot配置资源发现

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


5

策略和遥测


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

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

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

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

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

    o 改进Envoy和Mixer的通信协议

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

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

  6. 多方面增强Tracing的能力: 

    o Trace id支持128bit的范围

    o 支持向LightStep发送追踪数据

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

    o 增加策略的decision-aware 追踪

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

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

  9. 安全的Addon证书 改变插件的证书存储方式。Grafana, Kiali, and Jaeger的用户名和密码存放在kubernetes的secrets中以提高安全性和合规性。

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


另外,Istio运维管理的复杂度也不能被部分用户接受(比如:众多的crd资源),因此社区专门成立了User Experience工作组致力于提高Istio的易用性,进一步降低其使用门槛。


经过大家的共同努力,Istio1.1版本几经推迟终于发布了!我们有理由对其充满期待和信心,共同催熟以Istio为代表的云原生服务网格技术,为我们的用户提供高品质的云服务体验。

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