【问题标题】:How to resolve Istio traffic routing bug?如何解决 Istio 流量路由错误?
【发布时间】:2018-11-19 10:41:38
【问题描述】:

对于以下文件,ISTIO 仅在第一个 v1 应用程序中显示输出。如果我更改 v1 的版本,则输出会更改。所以流量根本不会转移到其他版本。

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: sampleweb
  namespace: default
spec:
  hosts:
  - "web.xyz.com"
  gateways:
  - http-gateway
  http:
  - route:
    - destination:
        port:
          number: 8080
        host: web
        subset: v1
      weight: 30
  - route:
    - destination:
        port:
          number: 8080
        host: web
        subset: v2
      weight: 30
  - route:
    - destination:
        port:
          number: 8080
        host: web
        subset: v3
      weight: 40

---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: samplewebdr
  namespace: default
spec:
  host: web
  subsets:
  - name: v1
    labels:
      app: web
      version: prod
  - name: v2
    labels:
      app: web
      version: baseline
  - name: v3
    labels:
      app: web
      version: canary
  trafficPolicy:
    tls:
      mode: ISTIO_MUTUAL

有人可以帮忙吗?

【问题讨论】:

  • 除了这些之外,您还定义了其他 VS / DR 吗?也许有些是矛盾的。
  • 您能否添加有关您的应用程序部署(或您拥有的任何内容)的信息

标签: kubernetes istio spinnaker


【解决方案1】:

您的问题是您创建了一个VirtualService,其中包含 3 条规则。因此,第一个规则没有特定的匹配标准,因此始终是被调用的规则。当您在 VirtualService 中有多个规则时,您需要小心正确地对它们进行排序,如 here 所述。

也就是说,在你的情况下,你真的不想要多个规则,而是一个具有多个加权目的地的单一规则,如下所示:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: sampleweb
  namespace: default
spec:
  hosts:
  - "web.xyz.com"
  gateways:
  - http-gateway
  http:
  - route:
    - destination:
        port:
          number: 8080
        host: web
        subset: v1
      weight: 30
    - destination:
        port:
         number: 8080
        host: web
        subset: v2
      weight: 30
    - destination:
        port:
          number: 8080
        host: web
        subset: v3
      weight: 40

顺便说一句,虽然无害,但您不需要在 DestinationRule 子集中包含 app: web 标签。您只需要唯一标识 Web 服务子集之间差异的标签。

【讨论】:

    【解决方案2】:

    【讨论】:

      【解决方案3】:

      我认为问题在于,对于所有版本,您都有相同的标签 app: web,因此 istio 将流量引导到具有这些标签的 pod,它们恰好是同一个 pod。您需要为不同的版本指定不同的标签,例如 vor v2,标签为 version: v1,对于 v2 - version: v2,您还需要使用这些标签创建 pod。

      【讨论】:

      • 标签:app=web app.kubernetes.io/managed-by=spinnaker app.kubernetes.io/name=web pod-template-hash=2895261194 version=canary
      猜你喜欢
      • 2020-04-03
      • 2023-01-18
      • 2020-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-17
      • 2019-12-04
      相关资源
      最近更新 更多