Kubernetes istio mesh虚拟服务如何管理来自入口虚拟服务的流量?

Kubernetes istio mesh虚拟服务如何管理来自入口虚拟服务的流量?,kubernetes,istio,istio-gateway,Kubernetes,Istio,Istio Gateway,我正在定义mesh虚拟服务中的金丝雀路由,并想知道是否可以使其也适用于入口流量(使用入口虚拟服务)。使用类似于下面的内容,但它不起作用(来自入口的所有流量都将使用非金丝雀版本) 因此,当我调用myapp.dev.bla时,我期望得到x-canary:true响应头,但我看不到这一点。答案只是部分在您包含的链接中。我认为在使用Istio“什么是Istio服务网格”时需要意识到的基本点是。服务网格是每个pod,带有Istio特使代理侧车+所有网关(网关是独立的特使代理)。他们都知道对方是因为我,所以

我正在定义mesh虚拟服务中的金丝雀路由,并想知道是否可以使其也适用于入口流量(使用入口虚拟服务)。使用类似于下面的内容,但它不起作用(来自入口的所有流量都将使用非金丝雀版本)


因此,当我调用
myapp.dev.bla
时,我期望得到
x-canary:true
响应头,但我看不到这一点。

答案只是部分在您包含的链接中。我认为在使用Istio“什么是Istio服务网格”时需要意识到的基本点是。服务网格是每个pod,带有Istio特使代理侧车+所有网关(网关是独立的特使代理)。他们都知道对方是因为我,所以他们可以合作

k8s集群中任何没有Istio侧车的吊舱(包括入口吊舱或kube系统吊舱)都不了解Istio或服务网格。如果这样的pod想要将流量发送到服务网格(应用一些像您这样的流量管理规则),则必须通过Istio网关发送<代码>网关是创建标准部署+服务的对象。部署中的POD由独立的
特使代理
容器组成

网关
对象与k8s入口的概念非常相似。但它不一定要在nodePort上监听。您还可以将其用作“内部”网关。网关作为您的服务网格的入口点。用于外部甚至内部通信

  • 如果您使用即Nginx作为入口解决方案,则必须重新配置入口规则,以将流量发送到其中一个网关,而不是目标服务。最有可能是您的
    mesh
    网关。它只是
    istio网关
    istio系统
    名称空间中的k8s服务
  • 或者,您可以将Istio网关配置为“新”入口。由于我不确定某个默认的Istio网关是否侦听nodePort,您需要再次在
    Istio网关
    Istio系统
    命名空间中进行检查。或者,您可以仅为应用程序创建新网关,并将
    VirtualService
    应用于新网关

  • 答案只在您包含的链接中的一部分。我认为在使用Istio时需要了解的一件重要事情是“什么是Istio服务网格”。服务网格是每个pod,带有Istio特使代理侧车+所有网关(网关是独立的特使代理).他们都是因为我才互相了解的,所以他们可以合作

    k8s集群中任何没有Istio侧车的吊舱(包括入口吊舱或kube系统吊舱)都不了解Istio或服务网格。如果此类吊舱希望将流量发送到服务网格(应用一些类似于您的流量管理规则)必须通过Istio网关发送。
    网关
    是创建标准部署+服务的对象。部署中的POD由独立的
    特使代理
    容器组成

    Gateway
    对象与k8s入口的概念非常相似。但它不必监听nodePort。您也可以将其用作“内部”网关。网关用作服务网格的入口点。用于外部甚至内部流量

  • 如果您使用i.e.Nginx作为入口解决方案,则必须重新配置入口规则,以将流量发送到其中一个网关,而不是目标服务。最有可能是您的
    mesh
    gateway。它只是
    istio gateway
    istio system
    命名空间中的k8s服务
  • 或者,您可以将Istio网关配置为“新”入口。由于我不确定是否有默认的Istio网关侦听nodePort,您需要检查它(同样在
    istio-gateway
    istio-system
    命名空间中。或者,您可以仅为应用程序创建新网关,并将
    VirtualService
    应用于新网关

  • 我认为reason已经在:是否有解决方案来实现这一点?我认为reason已经在:是否有解决方案来实现这一点?感谢您的详细阐述。如果我做对了,在给定的示例中,只有pod到pod流量(网格内流量)将由虚拟服务通过主机
    test deployment app.test ns.svc.cluster.local
    配置/管理。我知道为入口流量添加一组额外的匹配器(使用主机
    myapp.dev.bla
    )可以工作,但想检查是否有任何方法可以在集群内虚拟服务中定义匹配规则,这也适用于入口。我试图避免入口网关配置中出现一些排序问题(多个应用使用同一主机并使用canary标头等)感谢您的详细阐述。如果我没有弄错的话,在给定的示例中,只有pod-to-pod流量(网格内流量)将由虚拟服务通过主机
    test deployment app.test ns.svc.cluster.local
    配置/管理。我知道为入口流量添加一组额外的匹配器(通过主机
    myapp.dev.bla
    )可以工作,但想检查是否有任何方法可以在集群内虚拟服务中定义匹配规则,这也适用于入口。我试图避免入口网关配置中出现一些排序问题(多个应用使用同一主机并使用canary标头等)
    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: test-deployment-app
      namespace: test-ns
    spec:
      gateways:
      - mesh 
      hosts:
      - test-deployment-app.test-ns.svc.cluster.local
      http:
      - name: canary
        match:
        - headers:
            x-canary:
              exact: "true"
        - port: 8080
        headers:
          response:
            set:
              x-canary: "true"
        route:
        - destination:
            host: test-deployment-app-canary.test-ns.svc.cluster.local
            port:
              number: 8080
          weight: 100
      - name: stable
        route:
        - destination:
            host: test-deployment-app.test-ns.svc.cluster.local
            port:
              number: 8080
          weight: 100
    ---
    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: test-deployment-app-internal
      namespace: test-ns
    spec:
      gateways:
      - istio-system/default-gateway
      hosts:
      - myapp.dev.bla
      http:
      - name: default
        route:
        - destination:
            host: test-deployment-app.test-ns.svc.cluster.local
            port:
              number: 8080
          weight: 100