Retry
This policy enables Kuma to know how to behave if there is a failed scenario (i.e. HTTP request) which could be retried.
Usage
As usual, we can apply sources and destinations selectors to determine how retries will be performed across our data plane proxies.
The policy let you configure retry behaviour for HTTP, GRPC and TCP protocols.
Example
apiVersion: kuma.io/v1alpha1kind: Retrymesh: defaultmetadata:name: web-to-backend-retry-policyspec:sources:- match:kuma.io/service: web_default_svc_80destinations:- match:kuma.io/service: backend_default_svc_80conf:http:numRetries: 5perTryTimeout: 200msbackOff:baseInterval: 20msmaxInterval: 1sretriableStatusCodes:- 500- 504retriableMethods:- GETgrpc:numRetries: 5perTryTimeout: 200msbackOff:baseInterval: 20msmaxInterval: 1sretryOn:- cancelled- deadline_exceeded- internal- resource_exhausted- unavailabletcp:maxConnectAttempts: 3
We will apply the configuration with kubectl apply -f [..].
type: Retryname: web-to-backend-retry-policymesh: defaultsources:- match:kuma.io/service: webdestinations:- match:kuma.io/service: backendconf:http:numRetries: 5perTryTimeout: 200msbackOff:baseInterval: 20msmaxInterval: 1sretriableStatusCodes:- 500- 504retriableMethods:- GET- DELETEgrpc:numRetries: 5perTryTimeout: 200msbackOff:baseInterval: 20msmaxInterval: 1sretryOn:- cancelled- deadline_exceeded- internal- resource_exhausted- unavailabletcp:maxConnectAttempts: 3
We will apply the configuration with kumactl apply -f [..] or via the HTTP API.
HTTP
numRetries(optional)Amount of attempts which will be made on failed (and retriable) requests
perTryTimeout(optional)Amount of time after which retry attempt should timeout (i.e. all the values:
30000000ns,30ms,0.03s,0.0005mare equivalent and can be used to express the same timeout value, equal to30ms)backOff(optional)Configuration of durations which will be used in exponential backoff strategy between retries
baseDuration(required)Base amount of time which should be taken between retries (i.e.
30ms,0.03s,0.0005m)maxInterval(optional)A maximal amount of time which will be taken between retries (i.e.
1s,0.5m)
retriableStatusCodes(optional)A list of status codes which will cause the request to be retried. When this field will be provided it will overwrite the default behaviour of accepting as retriable codes:
502,503and504and if they also should be considered asretriableyou have to manually place them in the listFor example to add a status code
418:retriableStatusCodes:- 418- 502- 503- 504
Note that if you won’t provide
retriableStatusCodes, the default behaviour of the policy is to retry:- when server responds with one of status codes:
502,503or504, - when server won’t respond at all (disconnect/reset/read timeout),
- when server resets the stream with a
REFUSED_STREAMerror code.
retriableMethods(optional)A list of HTTP methods in which a request’s method must be contained before that request can be retried. The default behavior is that all methods are retriable.
GRPC
You can configure your GRPC Retry policy in similar fashion as the HTTP one with the only difference of the retryOn property which replace the retriableStatusCodes from the HTTP policy
retryOn(optional)List of values which will cause retry.
Acceptable values
cancelleddeadline_exceededinternalresource_exhaustedunavailable
Note that if
retryOnis not defined or if it’s empty, the policy will default to all values and is equivalent to:retryOn:- cancelled- deadline_exceeded- internal- resource_exhausted- unavailable
TCP
maxConnectAmount(required)A maximal amount of TCP connection attempts which will be made before giving up
This policy will make attempt to retry the TCP connection which fail to be established and will be applied in the scenario when both, the dataplane, and the TCP service matched as a destination will be down.
Matching
Retry is an Outbound Connection Policy. The only supported value for destinations.match is kuma.io/service.
