1

我在我的应用程序中使用 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 在前端,只有单个后端)

4

0 回答 0