Istio 0.2

综合

  • 更新配置模型:目前 Istio 使用的是 Kubernetes 自定义资源 来描述和保存配置信息。在 Kubernetes 中运行时,可以选择使用 kubectl 命令来进行配置的管理了。

  • 多命名空间的支持:现在 Istio 控制平面被部署到独立的 istio-system 命名空间,Istio 能够管理其它非系统命名空间的服务了。

  • 网格扩展:服务网格中开始加入对非 Kubernetes 服务的支持(虚拟机或物理机上的服务)。这是一个非常早期的版本,还有一些限制(例如需要一个跨越容器和虚拟机的平面网络)。

  • 多环境支持:开始和其他的服务注册机制提供支持(包括 Consul 和 Eureka)。

  • Sidecar 的自动注入:Kubernetes 提供了 Alpha 阶段的 Initializers 功能,Istio 利用这一功能自动的将 Sidecar 注入到 Pod 之中。

性能和质量

这一版本中做出很多性能和可靠性方面的改进。虽然还 Istio 0.2 还不能投入生产使用,但是我们在这个方向上取得了长足的进步。下面是一些记录:

  • 客户端缓存:Envoy 中使用的 Mixer 客户端库开始为预检功能提供缓存,并用批处理的方式来进行报告,应该能减少端到端的开销。

  • 避免热重启:有效的运用 LDS/RDS/CDS/EDS 技术,消除了大多数热重启 Envoy 的需要。

  • 降低内存用量:Sidecar helper agent 的内存用量从 50Mb 降低为 7Mb。

  • 改善 Mixer 延迟:Mixer 清晰的划定了配置和请求的边界,避免了在请求发起时做出额外的设置工作,从而提供了更平滑的平均延迟。更好的资源缓存也改善了端到端性能。

  • 降低 Egress 流量的延迟:现在直接从 Sidecar 完成到外部服务的流量转发。

流量管理

  • Egress 规则:可以为 Egress 流量指定路由规则了。

  • 新的协议:为 MongoDB、WebSocket 连接以及 Kubernetes Headless 服务 提供网格范围的支持。

  • 其它改进:Ingress 为 gRPC 服务提供了正确的支持,并改善了健康检查和 Jaeger 跟踪功能。

遥测和策略实施

  • ** Ingress 策略**:除了 0.1 中提供的东西向流量支持,现在还可以将策略应用于南北向流量。

  • 支持 TCP 服务:在 0.1 中为 HTTP 提供了策略控制,0.2 中为 TCP 服务也提供了策略控制。

  • 新的 Mixer API:Envoy 用于与 Mixer 交互的 API 已经过全面重新设计,以提高健壮性和灵活性,并提供了客户端缓存和批处理等措施以提高性能。

  • 新的 Mixer 适配器模型:新的适配器组合模型通过模板添加全新的适配器类,可以更轻松地扩展Mixer,这个新模型将成为未来许多功能的基础构建模块,请参阅适配器开发人员指南,深入了解开发适配器的方法。

  • 改进的 Mixer 构建模型:现在,构建包含自定义适配器的 Mixer 二进制文件变得更加容易。

  • Mixer 适配器更新:所有内置适配器都已重写,以适应新的适配器模型,该版本中添加了 stackdriver 适配器,实验性的 Redis 配额适配器已在 0.2 版本中删除,但预计将在 0.3 版本中恢复提供。

  • Mixer 调用跟踪:现在可以在 Zipkin 仪表板中追踪和分析 Envoy 和 Mixer 之间的调用。

安全

  • TCP 流量的双向 TLS:除 HTTP 流量外,现在还为 TCP 流量提供了双向 TLS 支持。

  • 虚拟机和物理机的身份配置Auth 支持使用节点代理进行身份配置的新机制,此代理在每个节点(VM /物理机)上运行,并负责生成和发送 CSR(证书签名请求),并 Istio CA 获取证书。

  • 自行提供 CA 证书:允许用户为 Istio CA 提供自己的密钥和证书。

  • 持久性 CA 密钥/证书存储:Istio CA 为密钥和证书提供了持久存储,便于 CA 重新启动。

已知的问题

  • 用户在访问应用程序时可能会定期遭遇 404 错误: 我们注意到,有时 Envoy 无法正确获取路由,因此返回给用户 404 错误,我们正积极解决这一问题

  • 在 Pilot 实际就绪之前,Istio Ingress 或 Egress 报告已准备就绪:您可以在 istio-system 命名空间中检查 istio-ingressistio-egress 的 Pod 状态,并在所有 Istio pod 达到就绪状态后等待几秒钟,该问题正在解决之中。

  • 启用了 Istio Auth 的服务无法与非 Istio 服务通信:将会在近期解除这一限制。