Istio:蓝色/绿色部署

时间:2018-07-24 11:46:21

标签: kubernetes openshift istio canary-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
---

1 个答案:

答案 0 :(得分:1)

  

有什么想法吗?

您尝试使用FQDN来覆盖跨命名空间的容器。它的格式为servicename.namespace.svc.cluster.local。在istio documentation for VirtualServices中,这在其示例中称为:

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”而不是“ reviews.default.svc.cluster.local”)时,Istio将根据规则的名称空间而不是服务来解释短名称。包含主机“评论”的“默认”命名空间中的规则将被解释为“ reviews.default.svc.cluster.local”,而与评论服务关联的实际命名空间无关。为避免可能的错误配置,建议始终使用完全限定的域名代替短名称。

  

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

编辑评论:

如果您希望以所述百分比将recommendation.istio-project.svc.cluster.local路由到在其中运行的pod和recommendation.istio-project-two.svc.cluster.local服务,那么可以,这看起来像是有效的配置。