Istio 1.1

自豪地宣布,Istio 1.1 发布了!

我们用了 8 个月的时间,对整个产品做出众多改进,其中包括了来自 Google、IBM、VMware、Huawei、RedHat、Cisco、SAP、Salesforce、Pivotal、SUSE、Datadog 以及 LightStep 等众多厂商和个人的贡献。特别感谢所有的终端用户提供的反馈、功能需求以及在各种规模环境中做出的各种测试。

本文描述了 Istio 1.0.6 以及 Istio 1.1 之间的差异。

策略与遥测

  • Kiali。Service Graph 已经被弃用,推荐使用 Kiali。查看 Kiali 任务了解更多关于 Kiali 的信息。

安全

istioctl

配置

  • 你现在可以使用 Galley 作为 Kubernetes 和其他 Istio 组件(Pilot 和 Mixer)的 Kubernetes 接触点。这个功能处于 alpha 版本。后续的 Istio 版本将使用 Galley 作为 Istio 默认的配置管理机制。

和 1.0 版不兼容的变化

除了下面列出的新的和增强的功能之外,1.1 中做出了较多的不同于 1.0 版本的变化。升级通知中对这些变化做了个列表。

升级

我们推荐用手工方式对控制平面进行 1.1 版本的升级工作。在升级文档中包含更多这方面的信息。

安装

  • 从 Istio 安装中拆分 CRD 安装过程:Istio 的 CRD 被移入 istio-init Helm chart。CRD 独立到自己的 Helm chart 中,能够在升级过程中以及未来 Istio 使用 Helm 之外的安装方式的情况下,保证 CRD 资源的连续性。

  • 预配置安装方案:加入了多个安装配置方案,其中提供了知名的、经过测试的模式,简化安装过程的定制工作。配置方案为用户提供了更好的安装体验。

  • 增强了多集群支持:Istio 1.0 中使用 istio-remote 进行 VPN 模式 以及水平拆分 eds 模式的多集群风方案,1.1 中进行了整合,简化了安装体验。

流量管理

  • 新的 Sidecar 资源Sidecar 资源为附加到工作负载命名空间内的 Sidecar 提供了更细粒度的控制能力。特别是它提供了将 Sidecar 发出的流量限制在特定服务范围的能力。这一功能能够减少代理服务器计算和传播配置的需要,从而提高启动速度、降低资源消耗,同时也增强了控制面的稳定性。对于大规模集群,我们建议为每个命名空间加入 Sidecar 资源。这一资源还提供了对端口、协议以及流量劫持方面的高级控制。

  • 限制服务的可见范围:加入了新的 exportTo 功能,这一功能让服务控制者能够限制访问该服务的命名空间。ServiceEntryVirtualService 对象都支持这一功能,还可以通过给 Kubernetes 服务加入 networking.istio.io/exportTo 注解的方式来进行定义。

  • 命名空间范围:在网关中引用 VirtualService 的时候,我们会根据配置模型来使用基于 DNS 匹配的名称。在命名空间不止一个的情况下,这种用法遇到相同的主机名就很容易混淆。为了提供更清晰的使用命名空间来界定引用范围,在 hosts 字段中可以使用 [{namespace-name}]/{hostname-match} 的方式进行了限制。同样的能力也能够在 Sidecar 的 egress 用例中使用。

  • ServiceEntry 资源的更新:为服务以及相关的双向 TLS 所需的 SAN 加入了区域性的定义。带有 HTTPS 端口的 ServiceEntry 不再需要额外定义 VirtualService 来启用基于 SNI 的路由了。

  • 区域性路由:路由会优先选取同一区域内的服务,请参考区域性负载均衡设置文档

  • 调整多集群路由:简化多集群配置,丰富部署模式。现在可以使用自带的 Ingress 网关连接多个集群,不再需要 Pod 级别的 VPN;可以在每个集群都部署控制平面,达到高可用目的;能够创建跨越多个集群的全局命名空间。在高可用控制平面模式下,会缺省启用路由的区域感知功能。

  • 弃用 Istio Ingress:移除了过期的 Istio Ingress。请参照使用 cert-manager 加密 Kubernetes Ingress一文,了解如何使用网关充当 Ingress 控制器。

  • 性能和伸缩性的增强:调整了 Istio 和 Envoy 的性能和弹性。参考性能和伸缩性一文,了解更多相关信息。

  • 缺省关闭访问日志:缺省关闭所有 Sidecar 的访问日志以提高性能。

安全性

  • 存活及就绪检测:在启用双向 TLS 的情况下,增加 Kubernetes 的 HTTP 存活及就需检测支持。

  • 集群级的 RBAC 配置:用 ClusterRbacConfig 代替 RbacConfig,用于配置集群级别的生效范围。具体升级步骤可以参看RbacConfig 迁移到 ClusterRbacConfig

  • 使用 SDS 提供认证支持:使用 SDS 提供更强的安全性,在节点生成密钥,动态完成证书轮转而无需重启 Envoy。详情请参见通过 SDS 提供身份服务

  • 为 TCP 服务提供访问控制:在 HTTP 和 gRPC 服务之外,为 TCP 服务也加入了授权支持。请参看为 TCP 服务提供访问控制支持

  • 最终用户分组的访问控制:根据 JWT 中的 groups 或者任意列表类型的数据来进行访问控制。参考基于组和列表类型声明的授权,获取更多信息。

  • Ingress 网关控制器的外部证书管理:加入一个控制器,用于为外部证书提供动态加载和轮转支持。

  • 自定义 PKI 集成:加入了 Vault PKI 集成,支持 Vault 保护下的签署密钥以及现存 Vault PKI 的集成能力。Istio Vault CA 集成一节中包含更多详细信息。

  • 自定义域(非 cluster.local:支持组织或者集群特定的域名。

策略和遥测

  • 缺省关闭预检:迎合多数用户场景,缺省关闭策略预检以提高性能。如果有需求,还可以启用策略检查

  • Kiali:用 Kiali 替代了 Service Graph,用于提供更丰富的可视化体验。Kiali 任务中进行了更多细节描述。

  • 降低开销:做出了很多性能和伸缩方面的改进:

    • 减少 Envoy 生成的统计信息的采集。

    • Mixer 加入了负载卸载的功能。

    • 增强了 Envoy 和 Mixer 之间的协议。

  • 对 Header 和路由施加影响:可以利用适配器对请求的 Header 和路由进行变更,请参考控制 Header 和路由任务获取更多相关信息。

  • 进程外适配器:进程外适配器功能已经可以用于生产环境。这一版中我们开始淘汰进程内适配器。所有的新适配器开发都应该使用进程外模型。

  • 增强跟踪:跟踪方面做出很多改进:

    • Trace ID 扩展为 128 位。
    • 加入了发送跟踪数据到 LightStep 的功能。
    • 可以完全禁用 Mixer 服务的跟踪。
    • 可以使用策略来决定跟踪。
  • 缺省的 TCP 指标:为 TCP 连接加入缺省指标。

  • 减少插件对负载均衡器的需求:不再以独立负载均衡服务的方式来开放服务,改为使用 Istio 网关。要使用 HTTP 或 HTTPS 协议开放插件服务,请阅读遥测插件的外部访问一节的介绍。

  • 加密插件凭据:插件凭据的保存方式发生了变更。Grafana、Kiali 和 Jaeger 的用户名和密码保存在 Kubernetes secrets 之中,提高了安全性和合规性。

  • 更具弹性的 statsd 收集器:移除内置的 statsd 收集器。Istio 允许用户自行部署 statsd

配置管理

  • Galley:以 Galley 作为首要的配置接收和分发机制。它提供了一个健壮的模型用于校验、转换和传输配置状态,把 Istio 组件从 Kubernetes 细节中隔离出来。Galley 使用 Mesh Configuration Protocol (MCP) 和各个组件进行交互。

  • 监听端口:Galley 的缺省端口从 9093 改为 15014.

istioctlkubectl

  • Validate 命令istioctl validate 命令可以用离线方式校验 Istio 的 Kubernetes 资源。

  • Verify-Install 命令:新增 istioctl experimental verify-install 命令,根据一个指定的 YAML 文件来检查 Istio 的状态。

  • 过期命令istioctl createistioctl replaceistioctl getistioctl delete 命令都已过期,改用 kubectl 命令执行相关任务。istioctl gen-deploy 命令也同样过期,使用 helm template 命令来替代。1.12 版本中会移除这些命令。

  • 短命令:在 kubectl 中包含了 GatewayVirtualServiceDestinationRules 以及 ServiceEntry 的短命令。