Kubernetes Istio对多个名称空间的负载平衡

Kubernetes Istio对多个名称空间的负载平衡,kubernetes,istio,Kubernetes,Istio,我有两个名称空间承载不同版本的服务,名称空间sh blue承载每个服务的一个版本,sh green承载每个服务的新版本。每次新部署时,所有服务都会更新为新版本。我想实现从当前版本到新版本的canary部署 下面的代码是我目前拥有的,它工作得很好,只是不清楚它使用的是哪种负载平衡。当我检查入口网关日志时,它是这样的:蓝色,绿色,绿色,蓝色,绿色,绿色,红色,绿色,蓝色,蓝色,绿色,绿色 是否可以控制负载平衡?有没有更好的方法来设置这个 apiVersion: networking.istio.io

我有两个名称空间承载不同版本的服务,名称空间sh blue承载每个服务的一个版本,sh green承载每个服务的新版本。每次新部署时,所有服务都会更新为新版本。我想实现从当前版本到新版本的canary部署

下面的代码是我目前拥有的,它工作得很好,只是不清楚它使用的是哪种负载平衡。当我检查入口网关日志时,它是这样的:蓝色,绿色,绿色,蓝色,绿色,绿色,红色,绿色,蓝色,蓝色,绿色,绿色

是否可以控制负载平衡?有没有更好的方法来设置这个

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: sh-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "*.something.local"

您可以在Istio
DestinationRule
流量管理中指定负载平衡配置。它要求mesh服务包含
流量策略
,以便控制负载平衡


有关更多信息,我建议访问Istio负载平衡器设置。

在我的示例中,虚拟服务是两个不同服务之间的50/50路由,
DestinationRule
在选择其中一个服务后应用。如果我设置了
ROUND_ROBIN
,则只有在其中一个服务中存在负载平衡吊舱时才会发生这种情况。我希望能够设置如何在两个服务之间平衡请求,目前它看起来是随机的。我会为
前缀:/index
前缀:/config
路径分别创建两个独立的
虚拟服务
,分别绑定到相同的
网关
,然后查看流量分布,只是为了检查行为。我和您有同样的问题。在这种情况下,您找到更好的方法来控制负载平衡了吗?
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: sh
spec:
  hosts:
  - "*"
  gateways:
  - sh-gateway
  http:
  - match:
    - uri:
        prefix: /index
    route:
    - destination:
        host: index.sh-blue.svc.cluster.local
        port:
          number: 8080
      weight: 50
    - destination:
        host: index.sh-green.svc.cluster.local
        port:
          number: 8080
      weight: 50
  - match:
    - uri:
        prefix: /config
    route:
    - destination:
        host: config.sh-blue.svc.cluster.local
        port:
          number: 8080
      weight: 50
    - destination:
        host: config.sh-green.svc.cluster.local
        port:
          number: 8080
      weight: 50
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: bookinfo-ratings-port
spec:
  host: ratings.prod.svc.cluster.local
  trafficPolicy: # Apply to all ports
    portLevelSettings:
    - port:
        number: 80
      loadBalancer:
        simple: LEAST_CONN
    - port:
        number: 9080
      loadBalancer:
        simple: ROUND_ROBIN