Running canary tests
To run a canary test so that some users are routed to the new versions while all other users are still routed to the old versions of the deployed microservices, we need to add the X-group
HTTP header set to the value test
in our requests sent to the external API.
To see which version of a microservice served a request, the serviceAddresses
field in the response can be inspected. The serviceAddresses
field contains the hostname of each service that took part in creating the response. The hostname is equal to the name of the Pod, so we can find the version in the hostname; for example, product-v1-...
for a product
service of version v1
, and product-v2-...
for a product
service of version v2
.
Let's begin by sending a normal request and verifying that it is the v1
versions of the microservices that respond to our request. Next, we'll send a request with the X-group
HTTP header set to the value test
, and verify that the new v2
versions are responding.
To do this, perform the following steps:
- Perform a normal request to verify that the request is routed to the
v1
version of the microservices by usingjq
to filter out theserviceAddresses
field in the response:
ACCESS_TOKEN=$(curl -k https://writer:secret@minikube.me/oauth2/token -d grant_type=client_credentials -s | jq .access_token -r)
echo ACCESS_TOKEN=$ACCESS_TOKEN
curl -ks https://minikube.me/product-composite/1 -H "Authorization: Bearer $ACCESS_TOKEN" | jq .serviceAddresses
Expect a response along the lines of the following:
Figure 18.25: All requests go to the v1 Pods
As expected, all three core services are v1
versions of the microservices.
- If we add the
X-group=test
header, we expect the request to be served byv2
versions of the core microservices. Run the following command:
curl -ks https://minikube.me/product-composite/1 -H "Authorization: Bearer $ACCESS_TOKEN" -H "X-group: test" | jq .serviceAddresses
Expect a response similar to the following:
Figure 18.26: Setting HTTP header X-group=test makes the requests go to the v2 Pods
As expected, all three core microservices that respond are now v2
versions; as a canary tester, we are routed to the new v2
versions!
Given that the canary tests returned the expected results, we are ready to allow normal users to be routed to the new v2
versions using blue/green deployment.