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 之间的差异。
策略与遥测
安全
- 弃用的
RbacConfig
被ClusterRbacConfig
代替,以正确实现针对集群范围。 参考我们的指南 迁移RbacConfig
到ClusterRbacConfig
中的迁移说明。
istioctl
- 弃用
istioctl create
,istioctl replace
,istioctl get
和istioctl delete
。使用kubectl
代替(参考https://kubernetes.io/docs/tasks/tools/install-kubectl)。下个版本(1.2)将删除这些弃用的命令。 弃用
istioctl gen-deploy
。使用helm template
代替。下个版本(1.2)将删除这些弃用的命令。为 Istio Kubernetes 资源的离线校验增加
istioctl validate
。其目的是代替已经弃用的istioctl create
命令。增加
istioctl verify-install
。这个实验命令验证给的 Istio 安装 YAML 文件的安装状态。
配置
- 你现在可以使用 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
功能,这一功能让服务控制者能够限制访问该服务的命名空间。ServiceEntry
和VirtualService
对象都支持这一功能,还可以通过给 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.
istioctl
和 kubectl
Validate 命令:
istioctl validate
命令可以用离线方式校验 Istio 的 Kubernetes 资源。Verify-Install 命令:新增
istioctl verify-install
命令,根据一个指定的 YAML 文件来检查 Istio 的状态。过期命令:
istioctl create
、istioctl replace
、istioctl get
和istioctl delete
命令都已过期,改用kubectl
命令执行相关任务。istioctl gen-deploy
命令也同样过期,使用helm template
命令来替代。1.12 版本中会移除这些命令。短命令:在
kubectl
中包含了Gateway
、VirtualService
、DestinationRules
以及ServiceEntry
的短命令。