Istio:蓝色/绿色部署

问题描述 投票:0回答:1

我可以创建一个流量策略,以便在不同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名称空间内运行的两个服务之间的balancin。

有任何想法吗?

编辑

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
---
kubernetes openshift istio canary-deployment
1个回答
1
投票

有任何想法吗?

您是否尝试使用FQDN来覆盖跨命名空间的pod。它的格式为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,引用:

Kubernetes用户注意事项:当使用短名称(例如“评论”而不是“reviews.default.svc.cluster.local”)时,Istio将根据规则的命名空间而不是服务来解释短名称。包含主机“评论”的“默认”命名空间中的规则将被解释为“reviews.default.svc.cluster.local”,而不管与评论服务相关联的实际命名空间。为避免潜在的错误配置,建议始终在短名称上使用完全限定的域名。

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

Edit for comment:

如果你想将recommendation.istio-project.svc.cluster.local路由到那个运行的pod和所述百分比的recommendation.istio-project-two.svc.cluster.local服务然后是,这看起来像有效的配置。

© www.soinside.com 2019 - 2024. All rights reserved.