具有回退的动态基于标头的路由



我想基于标头将流量路由到pod,并进行回退。

所需的结果将是一个k8s集群,其中可以使用头值部署和路由同一服务的多个版本。

svcAsvcBsvcC

这些服务中的每一个(git-reo的主要分支(都将部署到默认命名空间或标记为"main"。每个服务的任何功能分支也可以部署到其自己的命名空间中,或者用分支名称进行标记。

理想情况下,通过将标头X-svcA设置为与分支名称匹配的值,我们可以将任何流量路由到匹配的命名空间或标签。如果没有这样的名称空间或标签,则将流量路由到默认(主(pod。

if HEADERX && svcX:label 
route->svcX:label
else
route->svcX 

第一个问题-这(或类似的事情(在istio或linkerd 中是否可能

您可以使用IstioVirtualService

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
...
spec:
hosts:
- reviews
http:
- match:
- headers:
end-user:
exact: jason
route:
- destination:
host: reviews
subset: v2
- route:
- destination:
host: reviews
subset: v1

点击此处阅读更多信息。

是的,您可以使用Istion&Linkerd

istio有一篇不错的文章:https://dwdraju.medium.com/simplified-header-based-routing-with-istio-for-http-grpc-traffic-ff9be55f83ca

在istio的虚拟服务中,您可以更新标题,如:

http:
- match:
- headers:
x-svc-env:
regex: v2

对于链接器:

Kind = "service-router"
Name = "service"
Routes = [
{
Match {
HTTP {
PathPrefix = "/api/service/com.example.com.PingService"
}
}
Destination {
Service       = "pinging"
},
},
{
Match {
HTTP {
PathPrefix = "/api/service/com.example.com.PingService"
Header = [
{
Name  = "x-version"
Exact = "2"
},
]
}
}
Destination {
Service       = "pinging"
ServiceSubset = "v2"
},
}

相关内容

  • 没有找到相关文章

最新更新