截止到撰写本文时 Istio 的最高版本为 1.15.2,1.13 版本的官方支持已经结束。请对照 Istio 文档中的发布状态描述确定是否需要对 Istio 进行升级。
Istio 官网上给出了升级 Istio 的几种方式:
但实际上,为了减少在升级时对网格内业务的影响,建议在升级 Istio 的时候,使用 canary upgrade,它比 in-place upgrade 更加安全,而且支持回滚。使用 canary upgrade 支持跨越两个小版本,而 in-place upgrade 必须一个一个小版本的升级。不论使用哪种方式,其中 Ingress Gateway 都是 in-place upgrade 的。
Istio 官方文档对升级的步骤描述的不是很详细,本文是对官方文档的一个补充,在升级完成后有两个注意事项:
validatingwebhookconfiguration
并添加新的;下面是详细的升级步骤。
使用的是以下命令安装的 canary 版本:
# 将新版本的 revision 命名为 canary
istioctl install --set revision=canary
# 取消原先自动注入 sidecar 的 namespace 中的 label 并设置新的 label,这样该 namespace 就可以注入 canary 版本对应的 sidecar
kubectl label namespace test-ns istio-injection- istio.io/rev=canary
# 重启数据平面中的工作负载,将完成新版本的 sidecar 自动注入
kubectl rollout restart deployment -n test-ns
注意在升级完成后,为新的 namespace 开启 sidecar 自动注入时,需要给 namespace 打上安装 canary Istio 时候设置的 label,执行下面的命令:
kubectl label namespace new-ns istio-injection- istio.io/rev=canary
在升级完成后,还有一些注意事项。例如如果你已经为其他 namespace 打上了 sidecar 自动注入的 label,请一定要将它删掉,并将 label 设置为 istio.io/rev=canary
,因为可以保证在 pod 中注入新版被 sidecar,并且连接到新版的 Istiod。
另外,你需要把最早安装 Istio 时设置的 ValidatingWebhookConfiguration
删掉,执行下面的命令:
kubectl delete validatingwebhookconfiguration istiod-default-validator
istio-validator-canary-istio-system
的 ValidatingWebhookConfiguration,该配置的目的是在创建和更新 Istio CR 的时候,先检测所有连接的 Istiod 是否有效。关于动态准入控制的详细描述请见 Kubernetes 文档。
因为在安装新版本 Istio 的时候,安装了新的 istio-validator-canary-istio-system
。如果你不将旧的删除话,你在创建 Istio CR 的时候将会看到如下错误。
Error from server (InternalError): error when creating "samples/bookinfo/networking/bookinfo-gateway.yaml": Internal error occurred: failed calling webhook "validation.istio.io": failed to call webhook: Post "https://istiod.istio-system.svc:443/validate?timeout=10s": service "istiod" not found
以上内容在 Istio 的官方文档中里并没有说明,但是在 Istio Issue-36526 中有提及。
最后更新于 2024/12/12