我可以创建流量策略以在运行在不同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
---
答案 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.local
和recommendation.production.svc.cluster.local
作为主机来跨命名空间进行路由。
如果您希望以所述百分比将recommendation.istio-project.svc.cluster.local
路由到在其中运行的pod和recommendation.istio-project-two.svc.cluster.local
服务,那么可以,这看起来像是有效的配置。