Istio:Blue/green 部署
Istio: Blue/green 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
---
Any ideas?
您是否尝试使用 FQDN 来覆盖跨命名空间 pods。它的格式为 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,引用:
Note for Kubernetes users: When short names are used (e.g. “reviews” instead of “reviews.default.svc.cluster.local”), Istio will interpret the short name based on the namespace of the rule, not the service. A rule in the “default” namespace containing a host “reviews will be interpreted as “reviews.default.svc.cluster.local”, irrespective of the actual namespace associated with the reviews service. To avoid potential misconfigurations, it is recommended to always use fully qualified domain names over short names.
如果我正确理解您的配置,您将需要:recommendation.staging.svc.cluster.local
和 recommendation.production.svc.cluster.local
分别作为跨命名空间路由的主机。
编辑评论:
如果您想将 recommendation.istio-project.svc.cluster.local
路由到 pods 运行 和 recommendation.istio-project-two.svc.cluster.local
服务,那么是的,这看起来是有效的配置。
我可以创建流量策略以便在不同 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
---
Any ideas?
您是否尝试使用 FQDN 来覆盖跨命名空间 pods。它的格式为 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,引用:
Note for Kubernetes users: When short names are used (e.g. “reviews” instead of “reviews.default.svc.cluster.local”), Istio will interpret the short name based on the namespace of the rule, not the service. A rule in the “default” namespace containing a host “reviews will be interpreted as “reviews.default.svc.cluster.local”, irrespective of the actual namespace associated with the reviews service. To avoid potential misconfigurations, it is recommended to always use fully qualified domain names over short names.
如果我正确理解您的配置,您将需要:recommendation.staging.svc.cluster.local
和 recommendation.production.svc.cluster.local
分别作为跨命名空间路由的主机。
编辑评论:
如果您想将 recommendation.istio-project.svc.cluster.local
路由到 pods 运行 和 recommendation.istio-project-two.svc.cluster.local
服务,那么是的,这看起来是有效的配置。