在继续之前,请确保你熟悉 Istio 隔离边界 功能。
升级方法
尽管默认情况下首选并假定使用原地网关升级,但你可以通过在 ControlPlane
CR 或 Helm 值文件中设置 ENABLE_INPLACE_GATEWAY_UPGRADE
变量来控制以版本为基础的网关升级的两种方式。
ENABLE_INPLACE_GATEWAY_UPGRADE=true
是默认行为。在使用原地网关升级时,现有的网关部署将使用新的代理镜像进行修补,并将继续使用相同的网关服务。这意味着你无需进行任何更改以配置网关的外部 IP。ENABLE_INPLACE_GATEWAY_UPGRADE=false
意味着将创建一个新的网关服务和部署以进行金丝雀版本的升级,因此现在可能会有两个服务:<网关名称>
/<网关名称>-old
,负责处理非修订版/旧版本控制平面工作负载流量。<网关名称>-1-6-0
,负责处理版本控制平面工作负载流量,将为此新创建的<网关名称>-canary
服务分配新的外部 IP。
你可以通过使用外部负载均衡器或更新 DNS 条目来控制两个版本之间的流量。
由于原地网关升级是默认行为,你无需更改现有的 ControlPlane
CR。要使用金丝雀网关升级,你需要在以下 xcp
组件中将 ENABLE_INPLACE_GATEWAY_UPGRADE
设置为 false
:
spec:
...
components:
xcp:
kubeSpec:
deployment:
env:
- name: ENABLE_INPLACE_GATEWAY_UPGRADE
value: "false" # 禁用原地升级以创建网关的金丝雀部署和服务
isolationBoundaries:
- name: global
revisions:
- name: 1-6-0
网关升级是通过更新 Ingress/Egress/Tier1Gateway
资源中的 spec.revision
字段来触发的。
如果 ENABLE_INPLACE_GATEWAY_UPGRADE=false
,请注意,将会有另一组新版本的 Service/Deployment/其他对象,我们正在对其进行升级。
网关升级是通过更新 Ingress/Egress/Tier1Gateway
资源中的 spec.revision
字段来触发的。
kubectl get deployments -n bookinfo
# 输出
tsb-gateway-bookinfo 1/1 1 1 8m12s
tsb-gateway-bookinfo-1-6-0 1/1 1 1 4m19s
kubectl get svc -n bookinfo
# 输出
tsb-gateway-bookinfo LoadBalancer 10.255.10.81 172.29.255.151 15443:31159/TCP,8080:31789/TCP,...
tsb-gateway-bookinfo-1-6-0 LoadBalancer 10.255.10.85 172.29.255.152 15443:31159/TCP,8080:31789/TCP,...