Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes 通过K8s集群的Istio内部路由加权流量_Kubernetes_Google Kubernetes Engine_Istio_Amazon Eks - Fatal编程技术网

Kubernetes 通过K8s集群的Istio内部路由加权流量

Kubernetes 通过K8s集群的Istio内部路由加权流量,kubernetes,google-kubernetes-engine,istio,amazon-eks,Kubernetes,Google Kubernetes Engine,Istio,Amazon Eks,我有2个应用程序(Web和Api),分别有2个服务和2个Istio VirtualService。每个服务也有两个版本(v1和v2) 我想做三件事- 对于Web,除测试用户之外的所有流量将仅路由到版本v1 对于Web,对于测试用户而言,流量将仅路由100%到版本v2(第1点反之亦然)。在上线之前,QA团队将对版本v2进行测试,一旦QA团队验证,将为每个用户将流量移动到100%至v2,并删除版本v1 对于Api,流量将为版本v1(稳定)分配95%,为版本v2(发布)分配5% Web清单文件: ap

我有2个应用程序(Web和Api),分别有2个服务和2个Istio VirtualService。每个服务也有两个版本(v1和v2)

我想做三件事-

  • 对于Web,除测试用户之外的所有流量将仅路由到版本v1

  • 对于Web,对于测试用户而言,流量将仅路由100%到版本v2(第1点反之亦然)。在上线之前,QA团队将对版本v2进行测试,一旦QA团队验证,将为每个用户将流量移动到100%v2,并删除版本v1

  • 对于Api,流量将为版本v1(稳定)分配95%,为版本v2(发布)分配5%

  • Web清单文件:

    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: web-vs
    spec:
      hosts:
      - web.example.com
      http:
      - match:
        - headers:
            end-user:
              exact: test-user
        route:
        - destination:
            host: web-svc
            subset: v2
      - route:
        - destination:
            host: web-svc
            subset: v1
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: web-svc
      labels:
        app: web
    spec:
      ports:
      - name: http
        port: 3000
        targetPort: 3000
      selector:
        app: web
    
    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: api-vs    -------------> #1
    spec:
      hosts:
      - api-svc
      http:
      - route:
        - destination:
            host: api-svc
            subset: v1
            weight: 95
        - destination:
            host: api-svc
            subset: v2
            weight: 5
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: api-svc    -------------> #2
      labels:
        app: api
    spec:
      ports:
      - name: http
        port: 8000
        targetPort: 8000
      selector:
        app: api
    
    API清单文件:

    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: web-vs
    spec:
      hosts:
      - web.example.com
      http:
      - match:
        - headers:
            end-user:
              exact: test-user
        route:
        - destination:
            host: web-svc
            subset: v2
      - route:
        - destination:
            host: web-svc
            subset: v1
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: web-svc
      labels:
        app: web
    spec:
      ports:
      - name: http
        port: 3000
        targetPort: 3000
      selector:
        app: web
    
    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: api-vs    -------------> #1
    spec:
      hosts:
      - api-svc
      http:
      - route:
        - destination:
            host: api-svc
            subset: v1
            weight: 95
        - destination:
            host: api-svc
            subset: v2
            weight: 5
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: api-svc    -------------> #2
      labels:
        app: api
    spec:
      ports:
      - name: http
        port: 8000
        targetPort: 8000
      selector:
        app: api
    
    流量路由策略-

  • 当我们点击urlweb.example.com时,它将为来自服务websvc的流量提供服务。(此项已设置)

  • 在后端,服务web svc将在内部调用服务api svc,服务api svc将流量95%分别分配到v15%v2。(这就是我正在努力解决的wieghted路由问题。)


  • 我认为问题在于缩进和主机。从中,尝试如下操作:


    编辑:目标主机。

    我认为问题在于缩进和主机。从中,尝试如下操作:


    已编辑:目标主机。

    来自服务“web svc”(仅暴露于internet)的用户希望在内部调用服务“api svc”,以便-1。web svc-->95%的次数将在v1 2上调用api svc。web svc-->05%次将在v2上调用api svc注意:请忽略yaml代码段中的缩进。主机在目标中不匹配。根据参考编辑答案。我已用标记-#1和#2更新了我的案例。当k8s服务“web svc”在内部调用k8s服务“api svc”时会发生什么?流量将直接从k8s服务“api svc”(即跳数=1)提供服务,或流量将通过istio virtualService“api vs”路由到k8服务“api svc”(即跳数=2)?据我所知,根据您提供的信息,我认为它应该是这样工作的:如果流量是外部的:Istio ingressgateway转到->网关->VS->服务,最后转到Pod。希望这有助于澄清一些问题。从服务“WebSVC”(仅暴露于internet)开始,希望在内部调用服务“APISVC”,以便-1。web svc-->95%的次数将在v1 2上调用api svc。web svc-->05%次将在v2上调用api svc注意:请忽略yaml代码段中的缩进。主机在目标中不匹配。根据参考编辑答案。我已用标记-#1和#2更新了我的案例。当k8s服务“web svc”在内部调用k8s服务“api svc”时会发生什么?流量将直接从k8s服务“api svc”(即跳数=1)提供服务,或流量将通过istio virtualService“api vs”路由到k8服务“api svc”(即跳数=2)?据我所知,根据您提供的信息,我认为它应该是这样工作的:如果流量是外部的:Istio ingressgateway转到->网关->VS->服务,最后转到Pod。希望这有助于澄清一些问题。