Istio 1.20 升级说明

升级到 Istio 1.20 时要考虑的重要变更。

Nov 14, 2023

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

即将到来的 ExternalName 支持变更

以下信息描述了 ExternalName 即将发生的变更。

在此版本中,默认情况下没有行为变更。但是,如果需要, 您可以尽早明确的选择并采用新行为,以及为即将到来的变更准备环境。

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

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

这导致了一些问题:

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

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

这些变更在此版本中默认处于关闭状态,但在不久的将来将默认开启。 需要尽早选择开启,可以设置 ENABLE_EXTERNAL_NAME_ALIAS=true 环境变量。

Envoy 过滤器排序

此更改影响 Envoy 过滤器排序方式的内部实现。 这些按照顺序运行的过滤器是为了实现各类功能。

现在,入站、出站和网关代理模式以及 HTTP 和 TCP 协议的顺序是一致的:

这改变了以下领域:

startupProbe 被默认添加到 Sidecar

Sidecar 容器现在默认启用 startupProbe。启动探测仅在 Pod 启动时运行。 启动探测完成后,就绪探测将继续。

通过使用启动探测,我们可以更积极的轮询 Sidecar 直至启动, 而无需在整个 Pod 生命周期中积极轮询。平均而言, 这将 Pod 启动时间缩短了大约一秒。

如果 10 分钟后启动探测仍未通过,Pod 将被终止。 之前,即使 Pod 无限期地无法启动,也永远不会被终止。

如果您不想要该功能,可以将其禁用。但是,您需要相应地调整就绪探测。

启用启动探测时的推荐值(新默认值):

readinessInitialDelaySeconds: 0
readinessPeriodSeconds: 15
readinessFailureThreshold: 4
startupProbe:
enabled: true
failureThreshold: 600

禁用启动探测的建议值(恢复行为以匹配旧的 Istio 版本):

readinessInitialDelaySeconds: 1
readinessPeriodSeconds: 2
readinessFailureThreshold: 30
startupProbe:
enabled: false