我可以创建一个流量策略,以便在不同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
---
有任何想法吗?
您是否尝试使用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.local
和recommendation.production.svc.cluster.local
分别作为路由命名空间的主机。
如果你想将recommendation.istio-project.svc.cluster.local
路由到那个运行的pod和所述百分比的recommendation.istio-project-two.svc.cluster.local
服务然后是,这看起来像有效的配置。