Istio:Blue/green 部署

Istio: Blue/green deployment

我可以创建流量策略以便在不同 kubernetes 命名空间中的服务 运行 之间路由流量吗?

目前,我的测试服务位于 staging 命名空间。另一方面,我的生产服务在 production 命名空间上。

我想平衡位于 staging 命名空间和 production 命名空间中的服务之间的流量。因此,10% 用于 staging:service,90% 用于 production:service

到目前为止,我已经能够创建一个虚拟服务和一个目标规则,但是这两个服务 运行 在同一个命名空间中。

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  creationTimestamp: null
  name: recommendation
  namespace: istio-project
spec:
  host: recommendation
  subsets:
  - labels:
      version: v1
    name: version-v1
  - labels:
      version: v2
    name: version-v2

还有一个VirtualService:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  creationTimestamp: null
  name: recommendation
  namespace: istio-project
spec:
  hosts:
  - recommendation
  http:
  - route:
    - destination:
        host: recommendation
        subset: version-v1
      weight: 75
    - destination:
        host: recommendation
        subset: version-v2
      weight: 25

此配置在 istio-project 命名空间内的两个服务 运行 之间平衡。

有什么想法吗?

编辑

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  creationTimestamp: null
  name: recommendation
  namespace: istio-project
spec:
  hosts:
  - recommendation
  http:
  - route:
    - destination:
        host: recommendation
      weight: 75
    - destination:
        host: recommendation.istio-project-two.svc.cluster.local
      weight: 25
---

Any ideas?

您是否尝试使用 FQDN 来覆盖跨命名空间 pods。它的格式为 servicename.namespace.svc.cluster.local。在 VirtualServices 的 istio documentation 中,这在他们的示例中被引用为:

spec:
  hosts:
  - ratings.prod.svc.cluster.local

其中 ratings 是服务名称,prod 在该特定示例中是命名空间。他们还列出了:

...
  namespace: foo
spec:
  host: reviews # interpreted as reviews.foo.svc.cluster.local
...

使用跨命名空间示例:

...
spec:
  hosts:
  - productpage.prod.svc.cluster.local # ignores rule namespace
...

other part of documentation 他们特别建议 ​​Kubernetes 用户使用 FQDN,引用:

Note for Kubernetes users: When short names are used (e.g. “reviews” instead of “reviews.default.svc.cluster.local”), Istio will interpret the short name based on the namespace of the rule, not the service. A rule in the “default” namespace containing a host “reviews will be interpreted as “reviews.default.svc.cluster.local”, irrespective of the actual namespace associated with the reviews service. To avoid potential misconfigurations, it is recommended to always use fully qualified domain names over short names.

如果我正确理解您的配置,您将需要:recommendation.staging.svc.cluster.localrecommendation.production.svc.cluster.local 分别作为跨命名空间路由的主机。

编辑评论:

如果您想将 recommendation.istio-project.svc.cluster.local 路由到 pods 运行 和 recommendation.istio-project-two.svc.cluster.local 服务,那么是的,这看起来是有效的配置。