我想基于标头将流量路由到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"
},
}