I’m trying to create what are essentially quota buckets for different subsets. The idea is that for a given path A with identifying header H1, it will circuit break at a specific number of concurrent requests. For the same path A but a separate identifying header H2, it will circuit break at a different number of concurrent requests, and similar things for separate paths.
I tested using a config similar to the following, but it seems that istio (and maybe envoy) will only support a single inbound cluster for a given destination/port. Basically, I’m trying to figure out if this is even possible.
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: service-buckets
namespace: service
spec:
exportTo:
- .
hosts:
- service.service.svc.cluster.local
http:
- match:
- ignoreUriCase: true
uri:
prefix: /path1
route:
- destination:
host: service.service.svc.cluster.local
subset: bucket-1
- match:
- ignoreUriCase: true
uri:
prefix: /path2
route:
- destination:
host: service.service.svc.cluster.local
subset: bucket-2
---
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: service-buckets
namespace: service
spec:
exportTo:
- .
host: service.service.svc.cluster.local
subsets:
- name: bucket-1
trafficPolicy:
connectionPool:
http:
http2MaxRequests: 10
- name: bucket-2
trafficPolicy:
connectionPool:
http:
http2MaxRequests: 30
The resulting envoy configuration only contains circuit breaking for outbound traffic.