You are viewing documentation for KubeSphere version:v3.0.0
KubeSphere v3.0.0 documentation is no longer actively maintained. The version you are currently viewing is a static snapshot. For up-to-date documentation, see the latest version.
Traffic Mirroring
Traffic mirroring, also called shadowing, is a powerful, risk-free method of testing your app versions as it sends a copy of live traffic to a service that is being mirrored. Namely, you implement a similar setup for acceptance test so that problems can be detected in advance. As mirrored traffic happens out of band of the critical request path for the primary service, your end users will not be affected during the whole process.
Prerequisites
- You need to enable KubeSphere Service Mesh.
- You need to create a workspace, a project and an account (
project-regular
). The account must be invited to the project with the role ofoperator
. For more information, see Create Workspaces, Projects, Accounts and Roles. - You need to enable Application Governance and have an available app so that you can mirror the traffic of it. The sample app used in this tutorial is Bookinfo. For more information, see Deploy Bookinfo and Manage Traffic.
Create a Traffic Mirroring Job
-
Log in to KubeSphere as
project-regular
. Under Categories, click Create Job on the right of Traffic Mirroring. -
Set a name for it and click Next.
-
Select your app from the drop-down list and the service of which you want to mirror the traffic. If you also use the sample app Bookinfo, select reviews and click Next.
-
On the Grayscale Release Version page, add another version of it (for example,
v2
) as shown in the image below and click Next:Note
The image version isv2
in the screenshot. -
Click Create in the final step.
-
The traffic mirroring job created displays under the tab Job Status. Click it to view details.
-
You can see the traffic is being mirrored to
v2
with real-time traffic displaying in the line chart. -
The new Deployment is created as well.
-
You can directly get the virtual service to view
mirror
andweight
by executing the following command:kubectl -n demo-project get virtualservice -o yaml
Note
- When you execute the command above, replace
demo-project
with your own project (i.e. namespace) name. - If you want to execute the command from the web kubectl on the KubeSphere console, you need to use the account
admin
.
- When you execute the command above, replace
-
Expected output:
... spec: hosts: - reviews http: - route: - destination: host: reviews port: number: 9080 subset: v1 weight: 100 mirror: host: reviews port: number: 9080 subset: v2 ...
This route rule sends 100% of the traffic to
v1
. The last stanza specifies that you want to mirror to the servicereviews v2
. When traffic gets mirrored, the requests are sent to the mirrored service with their Host/Authority headers appended with-shadow
. For example,cluster-1
becomescluster-1-shadow
.Note
These requests are mirrored as “fire and forget”, which means that the responses are discarded. You can specify theweight
field to mirror a fraction of the traffic, instead of mirroring all requests. If this field is absent, for compatibility with older versions, all traffic will be mirrored. For more information, see Mirroring.
Take a Job Offline
You can remove the traffic mirroring job by clicking Job offline, which does not affect the current app version.