In this chapter we will learn how to test the resiliency of an application by injecting systematic faults. Before we start, we will need to reset the virtual services.
Using Meshery, navigate to the Istio management page:
default
in the Namespace
field.Apply Custom Configuration
card and paste the configuration below.Config:
1apiVersion: networking.istio.io/v1alpha32kind: VirtualService3metadata:4 name: reviews5spec:6 hosts:7 - reviews8 http:9 - route:10 - destination:11 host: reviews12 subset: v2
To start, we will inject a 7s delay for accessing the ratings service for a user jason
. reviews v2 service has a 10s hard-coded connection timeout for its calls to the ratings service configured globally.
Using Meshery, navigate to the Istio management page:
default
in the Namespace
field.Apply Custom Configuration
card and paste the configuration below.This will update the existing virtual service definition for ratings to inject a delay for user jason
to access the ratings V1.
In a few, we should be able to verify the virtual service by using the command below:
1kubectl get virtualservice ratings -o yaml
Config:
1apiVersion: networking.istio.io/v1alpha32kind: VirtualService3metadata:4 name: ratings5spec:6 hosts:7 - ratings8 http:9 - fault:10 delay:11 fixedDelay: 7s12 percentage:13 value: 10014 match:15 - headers:16 end-user:17 exact: jason18 route:19 - destination:20 host: ratings21 subset: v122 - route:23 - destination:24 host: ratings25 subset: v1
Now we login to /productpage
as user jason
and observe that the page loads but because of the induced delay between services the reviews section will show :
If you logout or login as a different user, the page should load normally without any errors.
In this section, , we will introduce an HTTP abort to the ratings microservices for user jason
.
Using Meshery, navigate to the Istio management page:
default
in the Namespace
field.Apply Custom Configuration
card and paste the configuration below.This will update the existing virtual service definition for ratings to inject a HTTP abort for user jason
to access the ratings V1.
In a few, we should be able to verify the virtual service by using the command below:
1kubectl get virtualservice ratings -o yaml
Config:
1apiVersion: networking.istio.io/v1alpha32kind: VirtualService3metadata:4 name: ratings5spec:6 hosts:7 - ratings8 http:9 - fault:10 abort:11 httpStatus: 50012 percentage:13 value: 10014 match:15 - headers:16 end-user:17 exact: jason18 route:19 - destination:20 host: ratings21 subset: v122 - route:23 - destination:24 host: ratings25 subset: v1
Now we login to /productpage
as user jason
and observe that the page loads without any new delays but because of the induced fault between services the reviews section will show:
Ratings service is currently unavailable
.
Verify the fault injection by logging out (or logging in as a different user), the page should load normally without any errors.
1kubectl apply -f samples/bookinfo/networking/virtual-service-all-v1.yaml
1kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-test-v2.yaml
1kubectl apply -f samples/bookinfo/networking/virtual-service-ratings-test-delay.yaml
1kubectl apply -f samples/bookinfo/networking/virtual-service-ratings-test-abort.yaml