【问题标题】:Istio Traffic Splitting Not Using Weight ProperlyIstio 流量拆分未正确使用权重
【发布时间】:2020-08-28 22:26:52
【问题描述】:

我正在使用默认的 bookinfo 应用程序 https://istio.io/docs/examples/bookinfo/ 并尝试使用评论服务测试拆分流量。 Kiali 正在显示拆分,一切似乎都已正确配置,但它仍在循环。如果我删除所有虚拟服务和目标规则,该应用程序将按预期工作。

# Source: bookinfo/templates/destination-rule-all.yaml
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: productpage
spec:
  host: productpage
  subsets:
  - name: v1
    labels:
      version: v1
---
# Source: bookinfo/templates/destination-rule-all.yaml
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: ratings
spec:
  host: ratings
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2
  - name: v2-mysql
    labels:
      version: v2-mysql
  - name: v2-mysql-vm
    labels:
      version: v2-mysql-vm
---
# Source: bookinfo/templates/destination-rule-all.yaml
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: details
spec:
  host: details
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2
---
# Source: bookinfo/templates/destination-rule-all.yaml
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: reviews
spec:
  host: reviews
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2
  - name: v3
    labels:
      version: v3
---
# Source: bookinfo/templates/bookinfo-gateway.yaml
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: bookinfo-gateway
  chart: bookinfo-0.1.2
  release: bookinfo
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "*"
---
# Source: bookinfo/templates/bookinfo-gateway.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: bookinfo
  chart: bookinfo-0.1.2
  release: bookinfo
spec:
  hosts:
  - "*"
  gateways:
  - bookinfo-gateway
  http:
  - match:
    - uri:
        exact: /productpage
    - uri:
        prefix: /static
    - uri:
        exact: /login
    - uri:
        exact: /logout
    - uri:
        prefix: /api/v1/products
    route:
    - destination:
        host: productpage
        port:
          number: 9080
---
# Source: bookinfo/templates/virtual-service-all-v1.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: productpage
spec:
  hosts:
  - productpage
  gateways:
  - bookinfo-gateway
  http:
  - route:
    - destination:
        host: productpage
        subset: v1
---
# Source: bookinfo/templates/virtual-service-all-v1.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
  - reviews
  gateways:
  - bookinfo-gateway
  http:
  - route:
    - destination:
        host: reviews
        subset: v1
      weight: 100
    - destination:
        host: reviews
        subset: v2
      weight: 0
    - destination:
        host: reviews
        subset: v3
      weight: 0
---
# Source: bookinfo/templates/virtual-service-all-v1.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: ratings
spec:
  hosts:
  - ratings
  gateways:
  - bookinfo-gateway
  http:
  - route:
    - destination:
        host: ratings
        subset: v1
---
# Source: bookinfo/templates/virtual-service-all-v1.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: details
spec:
  hosts:
  - details
  gateways:
  - bookinfo-gateway
  http:
  - route:
    - destination:
        host: details
        subset: v1

# Source: bookinfo/templates/reviews-v1-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: reviews-v1
  labels:
    chart: bookinfo-0.1.2
    release: bookinfo
    app: reviews
    version: v1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: reviews
      release: bookinfo
      version: v1
  template:
    metadata:
      labels:
        app: reviews
        release: bookinfo
        version: v1
    spec:
      serviceAccountName: bookinfo-reviews
      containers:
      - name: reviews
        image: myhub/istio/examples-bookinfo-reviews-v1:1.15.0
        imagePullPolicy: IfNotPresent
        env:
        - name: LOG_DIR
          value: "/tmp/logs"
        ports:
        - containerPort: 9080
        volumeMounts:
        - name: tmp
          mountPath: /tmp
        - name: wlp-output
          mountPath: /opt/ibm/wlp/output
      volumes:
      - name: wlp-output
        emptyDir: {}
      - name: tmp
        emptyDir: {}
---
# Source: bookinfo/templates/reviews-v2-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: reviews-v2
  labels:
    chart: bookinfo-0.1.2
    release: bookinfo
    app: reviews
    version: v2
spec:
  replicas: 1
  selector:
    matchLabels:
      app: reviews
      release: bookinfo
      version: v2
  template:
    metadata:
      labels:
        app: reviews
        release: bookinfo
        version: v2
    spec:
      serviceAccountName: bookinfo-reviews
      containers:
      - name: reviews
        image: myhub/istio/examples-bookinfo-reviews-v2:1.15.0
        imagePullPolicy: IfNotPresent
        env:
        - name: LOG_DIR
          value: "/tmp/logs"
        ports:
        - containerPort: 9080
        volumeMounts:
        - name: tmp
          mountPath: /tmp
        - name: wlp-output
          mountPath: /opt/ibm/wlp/output
      volumes:
      - name: wlp-output
        emptyDir: {}
      - name: tmp
        emptyDir: {}
---
# Source: bookinfo/templates/reviews-v3-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  metadata:
  name: reviews-v3
  labels:
    chart: bookinfo-0.1.2
    release: bookinfo
    app: reviews
    version: v3
spec:
  replicas: 1
  selector:
    matchLabels:
      app: reviews
      release: bookinfo
      version: v3
  template:
    metadata:
      labels:
        app: reviews
        release: bookinfo
        version: v3
    spec:
      serviceAccountName: bookinfo-reviews
      containers:
      - name: ratings
        image: myhub/istio/examples-bookinfo-reviews-v3:1.15.0
        imagePullPolicy: IfNotPresent
        env:
        - name: LOG_DIR
          value: "/tmp/logs"
        ports:
        - containerPort: 9080
        volumeMounts:
        - name: tmp
          mountPath: /tmp
        - name: wlp-output
          mountPath: /opt/ibm/wlp/output
      volumes:
      - name: wlp-output
        emptyDir: {}
      - name: tmp
        emptyDir: {}
---

环境

kind v0.7.0 go1.13.6 linux/amd64

K8s v1.18.1 v1.17.0

【问题讨论】:

    标签: kubernetes yaml istio envoyproxy kind


    【解决方案1】:

    我尝试使用 istio 1.5.2 在 gke 上重现您的问题,一切正常。


    我关注了 istio bookinfo documentation

    kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
    kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
    

    如上所述here

    应用默认目标规则

    在您可以使用 Istio 控制 Bookinfo 版本路由之前,您需要在目标规则中定义可用版本,称为子集。

    运行以下命令为 Bookinfo 服务创建默认目标规则:

    如果您没有启用双向 TLS,请执行以下命令:

    如果您是 Istio 新手并且正在使用演示配置文件,请选择此选项。

    $ kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml
    

    如果您确实启用了双向 TLS,请执行以下命令:

    $ kubectl apply -f samples/bookinfo/networking/destination-rule-all-mtls.yaml
    

    等待几秒钟,让目标规则传播。

    您可以使用以下命令显示目标规则:

    $ kubectl get destinationrules -o yaml
    

    应用您的虚拟服务进行评论

    示例

    仅针对子集 v1 的流量。

    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: reviews
    spec:
      hosts:
      - reviews
      http:
      - route:
        - destination:
            host: reviews
            subset: v1
    

    仅针对子集 v2 的流量。

    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: reviews
    spec:
      hosts:
      - reviews
      http:
      - route:
        - destination:
            host: reviews
            subset: v2
    

    子集 v2 和 v3 的 50/50 权重流量。

    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: reviews
    spec:
      hosts:
      - reviews
      http:
      - route:
        - destination:
            host: reviews
            subset: v2
          weight: 50
        - destination:
            host: reviews
            subset: v3
          weight: 50
    

    子集 v1、v2 和 v3 的 100/0/0 权重流量。

    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: reviews
    spec:
      hosts:
      - reviews
      http:
      - route:
        - destination:
            host: reviews
            subset: v2
          weight: 100
        - destination:
            host: reviews
            subset: v3
          weight: 0
        - destination:
            host: reviews
            subset: v1
          weight: 0
    

    虚拟服务仅适用于子集 v1 Kiali 显示流量仅流向 v1

    Istio 产品页面没有显示星星,所以是评论 v1。


    有关于weight-based routing 的文档供审核。

    【讨论】:

    • 太奇怪了,我用 Kiali 的照片更新了我的帖子。它显示一切都已正确配置,但是当我刷新 bookinfo 应用程序时,我得到红色、黑色和没有星星。我什至尝试删除所有虚拟服务和目标规则,该应用程序仍然正常运行。似乎是流量不是通过代理强制的
    • 这很奇怪。您的 istio 是否部署在 istio-system 命名空间中?你的 istio 版本是多少?
    • 很奇怪。版本 1.5.1,是的,它在 istio-system 命名空间中,但 bookinfo 在它自己的命名空间中,但入口正在工作。我也通过 Kind 在本地运行我的环境,因此可能是环境存在缺陷。
    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 2020-04-02
    • 1970-01-01
    相关资源
    最近更新 更多