1

我在 mesh-virtual-service 中定义金丝雀路由,并想知道我是否可以使其也适用于入口流量(使用 ingress-virtual-service)。使用类似下面的东西,但它不起作用(来自入口的所有流量都将转到非金丝雀版本)

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

所以我在x-canary:true打电话时期待响应标头,myapp.dev.bla但我没有看到。

4

1 回答 1

2

那么答案只是部分在您包含的链接中。我认为在使用 Istio 时要意识到“什么是 Istio 服务网格”。服务网格是每个带有 Istio envoy-proxy sidecar + 所有网关的 pod(网关是独立的 envoy-proxy)。他们都因为 IstioD 而相互了解,所以他们可以合作。

k8s 集群中没有 Istio sidecar 的任何 pod(包括入口 pod 或即 kube-system pod)都不了解 Istio 或 Service Mesh。如果这样的 pod 想要向 Service Mesh 发送流量(应用一些流量管理规则,如您所拥有的),则必须通过 Istio 网关发送它。Gateway是创建标准部署+服务的对象。部署中的 Pod 包含独立envoy-proxy容器。

Gatewayobject 是一个与 k8s ingress 非常相似的概念。但它不一定要在 nodePort 上监听。您也可以将其用作“内部”网关。网关充当服务网格的入口点。无论是外部流量还是内部流量。

  1. 如果您使用 ie Nginx 作为 Ingress 解决方案,您必须重新配置 Ingress 规则以将流量发送到网关之一而不是目标服务。最有可能到您的mesh网关。无非就是 k8s Service inside istio-gatewayor istio-systemnamespace
  2. 或者,您可以将 Istio 网关配置为“新”入口。因为我不确定某些默认的 Istio 网关是否在 nodePort 上侦听,所以您需要检查它(再次在istio-gatewayistio-system命名空间中。或者,您可以仅为您的应用程序创建新网关并应用VirtualService到新网关。
于 2021-04-18T16:43:19.390 回答