0

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

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

我想平衡位于staging命名空间和production命名空间中的服务之间的流量。所以,10% 到staging:service90% 到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
---
4

1 回答 1

1

有任何想法吗?

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

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

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

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

使用跨命名空间示例:

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

文档的另一部分,他们特别建议 ​​Kubernetes 用户使用 FQDN,引用:

Kubernetes 用户注意事项:当使用短名称时(例如“reviews”而不是“reviews.default.svc.cluster.local”),Istio 将根据规则的命名空间而不是服务来解释短名称。包含主机“reviews”的“default”命名空间中的规则将被解释为“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上述百分比的服务,那么可以,这看起来像是有效的配置。

于 2018-07-24T13:54:42.247 回答