我在我的应用程序中使用 Istio。我的应用程序的配置应该在每一层上重复:
前端应用程序 pod => v1, v2
后端应用程序 pod => v1, v2
和两个类似的外部数据库模式
我需要每个 pod 的 2 个版本,所以我有前端的 v1、v2 子集、后端的 v1、v2 子集和两个数据库外部模式,例如 d1、d2。
正确的结果应该是这样的:
v1 前端 -> v1 后端 -> 第一个数据库模式响应
v2 前端 -> v2 后端 -> 第二个数据库模式响应
路由基于以下标头:
kind: VirtualService
...
spec:
hosts:
- fronted-app-domain
gateways:
- frontend-app-gateway
http:
- match:
- headers:
end-user:
exact: jason
route:
- destination:
host: frontend-app-sv
subset: v2
- route:
- destination:
host: frontend-app-sv
subset: v1
kind: DestinationRule
metadata:
name: frontend-app-sv
spec:
host: frontend-app-sv
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
kind: DestinationRule
metadata:
name: backend-app-sv
spec:
host: backend-app-sv
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
此外,我有 4 个部署:前端版本为 v1、v2 后端版本为 v1、v2
后端的流量被路由并显示来自 dbs 的响应,但在再次请求后,结果会从一个数据库模式显示一次到另一个模式。所以我的结论表明后端不能识别这个级别的子集。它会导致以下情况:
v1 前端 -> v1 后端 -> 第一个模式 - 好的
v1 前端 -> v2 后端 -> 第二个模式 - :(
(最终用户标头)v2 前端 -> v2 后端 -> 第二个模式 - 好的
(最终用户标头)v2 前端 -> v1 后端 -> 第一个模式 - :(
我们在 Istio 中是否有任何机制来控制前端和后端层之间子集的内聚?在 Istio 页面示例中,我们只能找到具有两个版本的第一层的简单情况(v1、v2 在前端,只有单个后端)