MeshFaultInjection

With the MeshFaultInjection policy you can easily test your microservices against resiliency.

This policy uses a new policy matching algorithm. Do not combine with FaultInjection.

targetRef support matrix

targetRef Allowed kinds
targetRef.kind Mesh, Dataplane, MeshSubset(deprecated)
from[].targetRef.kind Mesh, MeshSubset, MeshServiceSubset

To learn more about the information in this table, see the matching docs.

Configuration

MeshFaultInjection allows configuring a list of HTTP faults. They execute in the same order as they were defined.

default:
  http:
    - abort:
        httpStatus: 500
        percentage: "2.5"
      delay:
        value: 5s
        percentage: 5
      responseBandwidth:
        limit: "50Mbps"
        percentage: 50
    - abort:
        httpStatus: 500
        percentage: 10
    - delay:
        value: 5s
        percentage: 5

It’s worth mentioning that percentage of the next filter depends on the percentage of previous ones.

http:
  - abort:
      httpStatus: 500
      percentage: 70
  - abort:
      httpStatus: 503
      percentage: 50

That means that for 70% of requests, it returns 500 and for 50% of the 30% that passed it returns 503.

Abort

Abort defines a configuration of not delivering requests to destination service and replacing the responses from destination data plane by predefined status code.

  • httpStatus - HTTP status code which will be returned to source side, has to be in [100 - 599] range
  • percentage - a percentage of requests on which abort will be injected, has to be in [0.0 - 100.0] range. If the value is a double number, put it in quotes.

Delay

Delay defines a configuration of delaying a response from a destination.

  • value - the duration during which the response will be delayed
  • percentage - a percentage of requests on which abort will be injected, has to be in [0.0 - 100.0] range. If the value is a double number, put it in quotes.

ResponseBandwidth limit

ResponseBandwidth defines a configuration to limit the speed of responding to requests.

  • limit - represented by value measure in Gbps, Mbps, kbps, or bps, for example 10kbps
  • percentage - a percentage of requests on which abort will be injected, has to be in [0.0 - 100.0] range. If the value is a double number, put it in quotes.

Examples

Service backend returns 500 for 50% of requests from frontend service

apiVersion: kuma.io/v1alpha1
kind: MeshFaultInjection
metadata:
  name: default-fault-injection
  namespace: kuma-demo
  labels:
    kuma.io/mesh: default
spec:
  targetRef:
    kind: Dataplane
    labels:
      app: backend
  from:
  - targetRef:
      kind: MeshSubset
      tags:
        kuma.io/service: frontend
    default:
      http:
      - abort:
          httpStatus: 500
          percentage: 50

50.5% of requests to service backend from any service is going to be delayed by 5 seconds

apiVersion: kuma.io/v1alpha1
kind: MeshFaultInjection
metadata:
  name: default-fault-injection
  namespace: kuma-demo
  labels:
    kuma.io/mesh: default
spec:
  targetRef:
    kind: Dataplane
    labels:
      app: backend
  from:
  - targetRef:
      kind: Mesh
      name: default
    default:
      http:
      - delay:
          percentage: '50.5'
          value: 5s

Backend service with a list of faults that are applied for frontend service

apiVersion: kuma.io/v1alpha1
kind: MeshFaultInjection
metadata:
  name: default-fault-injection
  namespace: kuma-demo
  labels:
    kuma.io/mesh: default
spec:
  targetRef:
    kind: Dataplane
    labels:
      app: backend
  from:
  - targetRef:
      kind: MeshSubset
      tags:
        kuma.io/service: frontend
    default:
      http:
      - abort:
          httpStatus: 500
          percentage: '2.5'
      - abort:
          httpStatus: 500
          percentage: 10
      - delay:
          value: 5s
          percentage: 5

See also

All policy options

targetRef object
TargetRef is a reference to the resource the policy takes an effect on. The resource could be either...
kind enum required
Kind of the referenced resource
Values: Mesh | MeshSubset | MeshGateway | MeshService | MeshExternalService | MeshMultiZoneService | MeshServiceSubset | MeshHTTPRoute | Dataplane
name string
Name of the referenced resource. Can only be used with kinds: `MeshService`, `MeshServiceSubset` and...
namespace string
Namespace specifies the namespace of target resource. If empty only resources in policy namespace wi...
labels object
Labels are used to select group of MeshServices that match labels. Either Labels or Name and Namespa...
sectionName string
SectionName is used to target specific section of resource. For example, you can target port from Me...
mesh string
Mesh is reserved for future use to identify cross mesh resources.
proxyTypes array
ProxyTypes specifies the data plane types that are subject to the policy. When not specified, all da...
tags object
Tags used to select a subset of proxies by tags. Can only be used with kinds `MeshSubset` and `MeshS...
from array
From list makes a match between clients and corresponding configurations
TargetRef is a reference to the resource that represents a group of destinations.
kind enum required
Kind of the referenced resource
Values: Mesh | MeshSubset | MeshGateway | MeshService | MeshExternalService | MeshMultiZoneService | MeshServiceSubset | MeshHTTPRoute | Dataplane
name string
Name of the referenced resource. Can only be used with kinds: `MeshService`, `MeshServiceSubset` and...
namespace string
Namespace specifies the namespace of target resource. If empty only resources in policy namespace wi...
labels object
Labels are used to select group of MeshServices that match labels. Either Labels or Name and Namespa...
sectionName string
SectionName is used to target specific section of resource. For example, you can target port from Me...
mesh string
Mesh is reserved for future use to identify cross mesh resources.
proxyTypes array
ProxyTypes specifies the data plane types that are subject to the policy. When not specified, all da...
tags object
Tags used to select a subset of proxies by tags. Can only be used with kinds `MeshSubset` and `MeshS...
Default is a configuration specific to the group of destinations referenced in 'targetRef'
Http allows to define list of Http faults between dataplanes.
Abort defines a configuration of not delivering requests to destination service and replacing the re...
httpStatus integer required
HTTP status code which will be returned to source side
percentage any required
Percentage of requests on which abort will be injected, has to be either int or decimal represented ...
Delay defines configuration of delaying a response from a destination
percentage any required
Percentage of requests on which delay will be injected, has to be either int or decimal represented ...
value string required
The duration during which the response will be delayed
ResponseBandwidth defines a configuration to limit the speed of responding to the requests
limit string required
Limit is represented by value measure in Gbps, Mbps, kbps, e.g. 10kbps
percentage any required
Percentage of requests on which response bandwidth limit will be either int or decimal represented a...
to array
To list makes a match between clients and corresponding configurations
TargetRef is a reference to the resource that represents a group of destinations.
kind enum required
Kind of the referenced resource
Values: Mesh | MeshSubset | MeshGateway | MeshService | MeshExternalService | MeshMultiZoneService | MeshServiceSubset | MeshHTTPRoute | Dataplane
name string
Name of the referenced resource. Can only be used with kinds: `MeshService`, `MeshServiceSubset` and...
namespace string
Namespace specifies the namespace of target resource. If empty only resources in policy namespace wi...
labels object
Labels are used to select group of MeshServices that match labels. Either Labels or Name and Namespa...
sectionName string
SectionName is used to target specific section of resource. For example, you can target port from Me...
mesh string
Mesh is reserved for future use to identify cross mesh resources.
proxyTypes array
ProxyTypes specifies the data plane types that are subject to the policy. When not specified, all da...
tags object
Tags used to select a subset of proxies by tags. Can only be used with kinds `MeshSubset` and `MeshS...
Default is a configuration specific to the group of destinations referenced in 'targetRef'
Http allows to define list of Http faults between dataplanes.
Abort defines a configuration of not delivering requests to destination service and replacing the re...
httpStatus integer required
HTTP status code which will be returned to source side
percentage any required
Percentage of requests on which abort will be injected, has to be either int or decimal represented ...
Delay defines configuration of delaying a response from a destination
percentage any required
Percentage of requests on which delay will be injected, has to be either int or decimal represented ...
value string required
The duration during which the response will be delayed
ResponseBandwidth defines a configuration to limit the speed of responding to the requests
limit string required
Limit is represented by value measure in Gbps, Mbps, kbps, e.g. 10kbps
percentage any required
Percentage of requests on which response bandwidth limit will be either int or decimal represented a...