Istio 1.21 升级说明

升级到 Istio 1.21.x 时要考虑的重要变更。

Mar 13, 2024

当您从 Istio 1.20.x 升级到 Istio 1.21.x 时,您需要考虑本页所述的变更。 这些说明详述了故意打破 Istio 1.20.x 向后兼容性的一些变更。 这些说明还提到了在引入新特性的同时保持向后兼容性的一些变更。 这里仅包含出乎 Istio 1.20.x 用户意料的新特性变更。

功能标志 ENABLE_AUTO_SNI 的默认值为启用

auto-sni 默认情况下被启用。这意味着如果 DestinationRule 未显式设置相同的内容,SNI 将根据下游 HTTP 主机/权限标头被自动设置。

如果不需要该功能,请使用新的 compatibilityVersion 功能回退到旧版本行为。

功能标志 VERIFY_CERT_AT_CLIENT 的默认值被设置为启用

这意味着在不设置 DestinationRule caCertificates 字段时, 将使用操作系统 CA 证书自动验证服务器证书。 如果不需要该功能,请使用新的 compatibilityVersion 功能回退到旧版本行为, 或使用 DestinationRule 中的 insecureSkipVerify 字段跳过验证。

ExternalName 支持变更

Kubernetes ExternalName 服务允许用户创建新的 DNS 条目。 例如,您可以创建指向 example.comexample 服务。 这是通过 DNS CNAME 重定向实现的。

在 Istio 中,ExternalName 的实现在历史上有很大不同。 每个 ExternalName 代表其自身的服务,与该服务匹配的流量会被发送到所配置的 DNS 名称中。

这导致了一些问题:

现已对 ExternalName 支持进行了改进以解决这些问题。ExternalName 现在被简单地视为别名。 无论我们在哪里匹配 Host: <concrete service>, 我们都会额外匹配 Host: <external name service>。 请注意,ExternalName 的主要实现(DNS)是在 Kubernetes DNS 实现中的 Istio 外部处理的,并且保持不变。

如果您将 ExternalName 与 Istio 一起使用,请注意以下行为变化:

要选择禁用,可以设置 ENABLE_EXTERNAL_NAME_ALIAS=false 环境变量。

注意:之前的版本中引入了相同的变更,但默认情况下处于关闭状态。 此版本中默认开启该标志。

网关名称标签已修改

如果您使用 Kubernetes Gateway 来管理 Istio 网关,则用于标识网关名称的标签名称从 istio.io/gateway-name 更改为 gateway.networking.k8s.io/gateway-name。 旧标签将继续附加到相关标签集以实现向后兼容性,但将在未来版本中移除。 此外,istiod 的网关控制器将自动检测并继续使用旧标签作为属于现有 Deployment 和 Service 资源的标签选择器。

因此,完成 Istio 升级后,只要准备好使用新标签, 就可以更改 DeploymentService 资源中的标签选择器。

此外,请升级依赖于旧标签的任何其他策略、资源或脚本。