diff --git a/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/advance-concepts-of-service-meshes/deploy-an-application.md b/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/advance-concepts-of-service-meshes/deploy-an-application.md index 41d7117f9..accb76f2a 100644 --- a/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/advance-concepts-of-service-meshes/deploy-an-application.md +++ b/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/advance-concepts-of-service-meshes/deploy-an-application.md @@ -12,30 +12,22 @@ title: "Deploy a sample application" To play with Istio and demonstrate some of it's capabilities, you will deploy the example BookInfo application, which is included the Istio package. -

What is the Bookinfo Application

-
+### **What is the Bookinfo Application** + This application is a polyglot composition of microservices are written in different languages and sample BookInfo application displays information about a book, similar to a single catalog entry of an online book store. Displayed on the page is a description of the book, book details (ISBN, number of pages, and so on), and a few book reviews. -The end-to-end architecture of the application is shown in the figure. - -
- -_Figure: BookInfo deployed off the mesh_ -
It’s worth noting that these services have no dependencies on Istio, but make an interesting service mesh example, particularly because of the multitude of services, languages and versions for the reviews service. As shown in the figure below, proxies are sidecarred to each of the application containers. -
_Figure: BookInfo deployed on the mesh_ -
Sidecars proxy can be either manually or automatically injected into the pods. Automatic sidecar injection requires that your Kubernetes api-server supports `admissionregistration.k8s.io/v1` or `admissionregistration.k8s.io/v1beta1` or `admissionregistration.k8s.io/v1beta2` APIs. Verify @@ -49,12 +41,10 @@ If your environment **does NOT** supports either of these two APIs, then you may As part of Istio deployment in [Previous chapter](./getting-started), you have deployed the sidecar injector. -

Deploying Sample App with Automatic sidecar injection

-
Istio, deployed as part of this workshop, will also deploy the sidecar injector. Let us now verify sidecar injector deployment. @@ -96,9 +86,7 @@ This will do 3 things: 1. Deploys all the BookInfo services in the `default` namespace. 1. Deploys the virtual service and gateway needed to expose the BookInfo's productpage application in the `default` namespace. -

- Verify Bookinfo deployment{" "} -

+#### **Verify Bookinfo deployment** 1. Verify that the deployments are all in a state of AVAILABLE before continuing. @@ -122,13 +110,9 @@ kubectl describe svc productpage Next, you will expose the BookInfo application to be accessed external from the cluster. -
-

Alternative: Manual installation

+#### **Alternative: Manual installation** Follow this if the above steps did not work for you -
-
- -

Label namespace for injection

+##### **Label namespace for injection** Label the default namespace with istio-injection=enabled @@ -150,8 +134,7 @@ kube-public Active 1h kube-system Active 1h ``` -

Deploy BookInfo

-
+#### **Deploy BookInfo** Applying this yaml file included in the Istio package you collected in [Getting Started](./getting-started) will deploy the BookInfo app in you cluster. @@ -159,14 +142,13 @@ Applying this yaml file included in the Istio package you collected in [Getting kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml ``` -

Deploy Gateway and Virtual Service for BookInfo app

+#### **Deploy Gateway and Virtual Service for BookInfo app** ```sh kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml ```
-

@@ -183,7 +165,7 @@ curl https://raw.githubusercontent.com/istio/istio/master/samples/bookinfo/platf Observing the new yaml file reveals that additional container Istio Proxy has been added to the Pods with necessary configurations: -``` +```yaml image: docker.io/istio/proxyv2:1.3.0 imagePullPolicy: IfNotPresent name: istio-proxy diff --git a/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/advance-concepts-of-service-meshes/expose-services.md b/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/advance-concepts-of-service-meshes/expose-services.md index 0369c617c..41db97011 100644 --- a/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/advance-concepts-of-service-meshes/expose-services.md +++ b/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/advance-concepts-of-service-meshes/expose-services.md @@ -11,12 +11,9 @@ id: "expose-services" {{< chapterstyle >}} The components deployed on the service mesh by default are not exposed outside the cluster. An Ingress Gateway is deployed as a Kubernetes service of type LoadBalancer (or NodePort). To make Bookinfo accessible external to the cluster, you have to create an `Istio Gateway` for the Bookinfo application and also define an `Istio VirtualService` with the routes we need. -
-
+### **Inspecting the Istio Ingress Gateway** -

Inspecting the Istio Ingress Gateway

-
The ingress gateway gets exposed as a normal Kubernetes service of type LoadBalancer (or NodePort): ```sh @@ -61,10 +58,9 @@ Now let us find the ingress pod and output the log: kubectl logs istio-ingressgateway-... -n istio-system ``` -

View Istio Ingress Gateway for Bookinfo

-
+### **View Istio Ingress Gateway for Bookinfo** -

View the Gateway and VirtualServices

+#### **View the Gateway and VirtualServices** Check the created `Istio Gateway` and `Istio VirtualService` to see the changes deployed: @@ -76,9 +72,8 @@ kubectl get virtualservices kubectl get virtualservices -o yaml ``` -

- Find the external port of the Istio Ingress Gateway by running: -

+#### **Find the external port of the Istio Ingress Gateway by running:** + ```sh kubectl get service istio-ingressgateway -n istio-system -o wide @@ -90,7 +85,7 @@ To just get the first port of istio-ingressgateway service, we can run this: kubectl get service istio-ingressgateway -n istio-system --template='{{(index .spec.ports 1).nodePort}}' ``` -

Create a DNS entry:

+#### **Create a DNS entry:** Modify your local `/etc/hosts` file to add an entry for your sample application. @@ -106,7 +101,7 @@ echo "http://$(kubectl get nodes --selector=kubernetes.io/role!=master -o jsonpa Docker Desktop users please use `http://localhost/productpage` to access product page in your browser. -

Apply default destination rules

+### **Apply default destination rules** Before we start playing with Istio's traffic management capabilities we need to define the available versions of the deployed services. They are called subsets, in destination rules. @@ -187,16 +182,16 @@ kubectl get destinationrules kubectl get destinationrules -o yaml ``` -

Browse to BookInfo

+### **Browse to BookInfo** Browse to the website of the Bookinfo. To view the product page, you will have to append `/productpage` to the url. -

Reload Page

+#### **Reload Page** Now, reload the page multiple times and notice how it round robins between v1, v2 and v3 of the reviews service. -

Inspect the Istio proxy of the productpage pod

+###Inspect the Istio proxy of the productpage pod To better understand the istio proxy, let's inspect the details. Let us `exec` into the productpage pod to find the proxy details. To do so we need to first find the full pod name and then `exec` into the istio-proxy container: @@ -221,14 +216,12 @@ As a last step, lets exit the container: exit ``` -
-

Alternative: Manual installation

+### **Alternative: Manual installation** + Follow this if the above steps did not work for you -
-
-

Default destination rules

+##### **Default destination rules** Run the following command to create default destination rules for the Bookinfo services: @@ -236,9 +229,8 @@ Run the following command to create default destination rules for the Bookinfo s kubectl apply -f samples/bookinfo/networking/destination-rule-all-mtls.yaml ``` -

- Configure the Bookinfo route with the Istio Ingress gateway -

+##### **Configure the Bookinfo route with the Istio Ingress gateway** + We can create a virtualservice & gateway for bookinfo app in the ingress gateway by running the following: diff --git a/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/advance-concepts-of-service-meshes/getting-started.md b/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/advance-concepts-of-service-meshes/getting-started.md index 617a4b3f1..d8bb41b6a 100644 --- a/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/advance-concepts-of-service-meshes/getting-started.md +++ b/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/advance-concepts-of-service-meshes/getting-started.md @@ -10,11 +10,11 @@ title: "Getting Started with Istio" {{< chapterstyle >}} -

Setup Istio

+### **Setup Istio** Now that we have a Kubernetes cluster and Meshery, we are ready to download and deploy Istio resources. -

Steps

+### **Steps** 1. [Install Istio](#1) 1. [Verify install](#2) @@ -25,9 +25,8 @@ Optional (manual install of Istio): 1. [Setup `istioctl`](#1.2) 1. [Install istio](#1.3) -

- Install Istio -

+#### **Install Istio** + Using Meshery, select `Istio` from the `Management` menu. @@ -36,15 +35,10 @@ In the Istio management page: 1. Type `istio-system` into the namespace field. 1. Click the (+) icon on the `Install` card and select `Latest Istio` to install the latest version of Istio. -

Alternative:Manual installation

+#### **Alternative:Manual installation** Perform the below steps if the above steps doesn't work for you. -
-
- -

- Download Istio -

+#### **Download Istio** You will download and deploy the latest Istio resources on your Kubernetes cluster. @@ -55,10 +49,7 @@ On your local machine, execute: ```sh curl -L https://git.io/getLatestIstio | ISTIO_VERSION=1.7.3 sh - ``` - -

- Setting up istioctl -

+#### **Setting up istioctl** On a \*nix system, you can setup `istioctl` by doing the following: @@ -85,9 +76,7 @@ Check if the cluster is ready for installation: istioctl verify-install ``` -

- Install Istio -

+##### **Install Istio** To install Istio with a `demo` profile, execute the below command. @@ -101,16 +90,14 @@ Alternatively, with Envoy logging enabled: istioctl install --set profile=demo --set meshConfig.accessLogFile=/dev/stdout ``` -

- Verify install -

+#### **Verify install** In the Istio management page: 1. Click the (+) icon on the `Validate Service Mesh Configuration` card. 1. Select `Verify Installation` to verify the installation of Istio. -

Alternatively:

+#### **Alternatively:** Istio is deployed in a separate Kubernetes namespace `istio-system`. To check if Istio is deployed, and also, to see all the pieces that are deployed, execute the following: diff --git a/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/advance-concepts-of-service-meshes/observability.md b/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/advance-concepts-of-service-meshes/observability.md index 510100bc7..3e38b8e01 100644 --- a/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/advance-concepts-of-service-meshes/observability.md +++ b/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/advance-concepts-of-service-meshes/observability.md @@ -10,7 +10,7 @@ title: "Observability with Istio" {{< chapterstyle >}} -

Install Telemetry Add-ons

+### **Install Telemetry Add-ons** Using Meshery, install Istio telemetry add-ons. In the Istio management page: @@ -22,7 +22,7 @@ Using Meshery, install Istio telemetry add-ons. In the Istio management page: You will use Prometheus and Grafana for collecting and viewing metrics and [Jaeger](https://www.jaegertracing.io/) collecting and viewing distributed traces. Expose each add-on external to the cluster. Each the service network typs are set to "LoadBalancer". -

Service Mesh Performance and Telemetry

+### **Service Mesh Performance and Telemetry** Many of the labs require load to be placed on the sample apps. Let's generate HTTP traffic against the BookInfo application, so we can see interesting telemetry. @@ -40,14 +40,14 @@ The URL to run a load test against will be `http://Connect Grafana (optionally, Prometheus) to Meshery. +#### **Connect Grafana (optionally, Prometheus) to Meshery.** On the Settings page: 1. Navigate to the `Metrics` tab. 1. Enter Grafana's URL:port number and submit. -

Use Meshery to generate load and analyze performance.

+#### **Use Meshery to generate load and analyze performance.** On the Performance page: @@ -63,14 +63,10 @@ Click on `Run Test`. A performance test will run and statistical analysis perfor Next, you will begin controlling requests to BookInfo using traffic management features. -
-

Alternative: Manual installation

+#### **Alternative: Manual installation** Follow these steps if the above steps did not work -
-
-

Install Add-ons:

-
+##### **Install Add-ons:** **Prometheus** @@ -93,8 +89,7 @@ kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.7/sampl ``` -
-

Exposing services

+##### **Exposing services** Istio add-on services are deployed by default as `ClusterIP` type services. We can expose the services outside the cluster by either changing the Kubernetes service type to `NodePort` or `LoadBalancer` or by port-forwarding or by configuring Kubernetes Ingress. @@ -104,7 +99,7 @@ To expose them using NodePort service type, we can edit the services and change **Option 2: Expose services with port-forwarding** Port-forwarding runs in the foreground. We have appended `&` to the end of the above 2 commands to run them in the background. If you donot want this behavior, please remove the `&` from the end. -

Prometheus

+##### **Prometheus** You will need to expose the Prometheus service on a port either of the two following methods: @@ -132,11 +127,8 @@ kubectl -n istio-system port-forward \ Browse to `http://:` and in the `Expression` input box enter: `istio_request_bytes_count`. Click the Execute button. -
-
-
-

Grafana

+##### **Grafana** You will need to expose the Grafana service on a port either of the two following methods: @@ -159,9 +151,7 @@ kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l app=gr -o jsonpath='{.items[0].metadata.name}') 3000:3000 & ``` -
-
-

Distributed Tracing

+##### **Distributed Tracing** The sample Bookinfo application is configured to collect trace spans using Zipkin or Jaeger. Although Istio proxies are able to automatically send spans, it needs help from the application to tie together the entire trace. To do this applications need to propagate the appropriate HTTP headers so that when the proxies send span information to Zipkin or Jaeger, the spans can be correlated correctly into a single trace. @@ -175,12 +165,7 @@ To do this the application collects and propagates the following headers from th - `x-b3-flags` - `x-ot-span-context` -
- -
-
- -

Exposing services

+##### **Exposing services** Istio add-on services are deployed by default as `ClusterIP` type services. We can expose the services outside the cluster by either changing the Kubernetes service type to `NodePort` or `LoadBalancer` or by port-forwarding or by configuring Kubernetes Ingress. In this lab, we will briefly demonstrate the `NodePort` and port-forwarding ways of exposing services. @@ -202,7 +187,7 @@ To find the assigned ports for Jaeger: kubectl -n istio-system get svc tracing ``` -
Option 2: Expose services with port-forwarding
+**Option 2: Expose services with port-forwarding** To port-forward Jaeger: @@ -212,7 +197,7 @@ kubectl -n istio-system port-forward \ 16686:16686 & ``` -

View Traces

+##### **View Traces** Let us find the port Jaeger is exposed on by running the following command: diff --git a/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/advance-concepts-of-service-meshes/service-security-capabilities.md b/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/advance-concepts-of-service-meshes/service-security-capabilities.md index 1399d1859..63f1d67ba 100644 --- a/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/advance-concepts-of-service-meshes/service-security-capabilities.md +++ b/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/advance-concepts-of-service-meshes/service-security-capabilities.md @@ -10,7 +10,7 @@ title: "Service Security Capabilities of Istio" {{< chapterstyle >}} -

Access Control

+### **Access Control** You will start by denying all traffic. @@ -23,9 +23,7 @@ metadata: spec: {} ``` -

- And then begin poking holes in your service mesh "firewall". -

+#### **And then begin poking holes in your service mesh "firewall".** ```yaml --- @@ -44,7 +42,7 @@ spec: methods: ["GET"] ``` -

Create AuthorizationPolicy for each BookInfo service.

+#### **Create AuthorizationPolicy for each BookInfo service.** ```yaml --- @@ -114,7 +112,7 @@ spec: methods: ["GET", "POST"] ``` -

Allow per user access

+#### **Allow per user access** ```yaml --- @@ -139,7 +137,7 @@ spec: values: ["naruto"] ``` -

Reset BookInfo Subsets (reset destination rules)

+#### **Reset BookInfo Subsets (reset destination rules)** ```yaml apiVersion: networking.istio.io/v1alpha3 @@ -206,13 +204,13 @@ spec: --- ``` -

Identity Verification

+### **Identity Verification** Note: this lab uses the sample application HTTPbin. Using Meshery, deploy the HTTPbin sample application. -

Add Claims

+#### **Add Claims** ```yaml apiVersion: security.istio.io/v1beta1 @@ -234,7 +232,7 @@ spec: values: ["group1"] ``` -

Def

+#### **Def** ```yaml apiVersion: "security.istio.io/v1beta1" @@ -251,7 +249,7 @@ spec: jwksUri: "https://raw.githubusercontent.com/istio/istio/release-1.7/security/tools/jwt/samples/jwks.json" ``` -

Mutual TLS

+### **Mutual TLS** Using Meshery, you can change mTLS enforcement for a namespace. diff --git a/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/advance-concepts-of-service-meshes/webassembly-and-intelligent-data-planes.md b/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/advance-concepts-of-service-meshes/webassembly-and-intelligent-data-planes.md index 0808fdb39..a877f9b82 100644 --- a/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/advance-concepts-of-service-meshes/webassembly-and-intelligent-data-planes.md +++ b/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/advance-concepts-of-service-meshes/webassembly-and-intelligent-data-planes.md @@ -13,7 +13,7 @@ title: "WebAssembly and Intelligent Data Planes" In this lab, you will use the sample application [Image Hub](https://github.com/layer5io/image-hub). This version of the Image Hub filter has been simplified for your lab. To self-study deeper functionality, try the other version of the Image Hub filter that is available in the Image Hub repo. -## Deploy Sample Application +### Deploy Sample Application Using Meshery, select Istio from the Management menu. @@ -25,7 +25,7 @@ In the Istio management page:

-## Load the filter +### Load the filter Next, load the custom Envoy filter. This filter is written in Rust and is compiled against WebAssembly as it's target runtime. diff --git a/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/introduction-to-service-meshes/circuit-breaking.md b/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/introduction-to-service-meshes/circuit-breaking.md index c73def9d1..5b330da50 100644 --- a/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/introduction-to-service-meshes/circuit-breaking.md +++ b/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/introduction-to-service-meshes/circuit-breaking.md @@ -11,12 +11,14 @@ weight: 8 In this chapter we will configure circuit breaking using Istio. Circuit breaking allows developers to write applications that limit the impact of failures, latency spikes, and other undesirable effects of network peculiarities. This task will show how to configure circuit breaking for connections, requests, and outlier detection. -

Preparing for circuit breaking

+### **Preparing for circuit breaking**
-Before we can configure circuit breaking, please try to access the `product page` app from within `Meshery` to ensure all the calls are making it through **without** errors as we did in [Observability chapter](observability) (see screenshot). +Before we can configure circuit breaking, please try to access the `product page` app from within `Meshery` to ensure all the calls are making it through **without** errors as we did in [Observability chapter](observability) -

Configure circuit breaking

+![invalid-kubeconfig]({{< usestatic "mastering-service-mesh/meshery_initial_load_test.webp" >}}) + +### **Configure circuit breaking**
Now that we have the needed services in place, it is time to configure circuit breaking using @@ -27,9 +29,7 @@ Using Meshery, navigate to the Istio management page: 1. Enter `default` in the `Namespace` field. 2. Click the (+) icon on the `Apply Custom Configuration` card and paste the configuration below. -

- Manual step for can be found here -

+```yaml This will update the existing destination rule definition for product page service to break the circuit if there are more than one connection and more than one pending request. @@ -68,7 +68,7 @@ spec: mode: ISTIO_MUTUAL ``` -

Time to trip the circuit

+### **Time to trip the circuit**
In the circuit-breaker settings, we specified maxRequestsPerConnection: 1 and http1MaxPendingRequests: @@ -79,17 +79,17 @@ Let us now use Meshery to make several calls to `product page` app by changing t Once you have updated the fields, you now click on `Run Test`. -This will run the load test and show the results in a chart. ( see screenshot ). +This will run the load test and show the results in a chart. + +![invalid-kubeconfig]({{< usestatic "mastering-service-mesh/meshery_cb_load_test.webp" >}}) You should only see a percentage of the requests succeed and the rest trapped by the configured circuit breaker.
-

- {" "} - Manual Steps -

-

Configure circuit breaking

+### **Manual Steps** + +#### **Configure circuit breaking** ```sh kubectl apply -f - < -

Congratulations!

+### **Congratulations!** -
- You have successfully completed the course on{" "} - "Introduction to service meshes - Hands on" using{" "} - - Istio - - . -
+ You have successfully completed the course on **"Introduction to service meshes - Hands on"** using **Istio**. {{< /chapterstyle >}} diff --git a/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/introduction-to-service-meshes/deploy-an-application.md b/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/introduction-to-service-meshes/deploy-an-application.md index 93bbc722d..942b3caf2 100644 --- a/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/introduction-to-service-meshes/deploy-an-application.md +++ b/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/introduction-to-service-meshes/deploy-an-application.md @@ -11,7 +11,7 @@ weight: 2 To play with Istio and demonstrate some of it's capabilities, you will deploy the example BookInfo application, which is included the Istio package. -

What is the Bookinfo Application

+### **What is the Bookinfo Application**
This application is a polyglot composition of microservices are written in different languages and sample BookInfo application displays information about a book, similar to a @@ -20,7 +20,7 @@ the book, book details (ISBN, number of pages, and so on), and a few book review The end-to-end architecture of the application is shown in the figure. -{{< image src="/images/learning-path/istio/bookinfo-off-mesh.webp" width="100%" align="center" alt="BookInfo architecture deployed off the mesh" title="Figure: BookInfo deployed off the mesh" >}} +![book-info]({{< usestatic "mastering-service-mesh/bookinfo-off-mesh.webp" >}})
It’s worth noting that these services have no dependencies on Istio, but make an interesting @@ -29,7 +29,7 @@ for the reviews service. As shown in the figure below, proxies are sidecarred to each of the application containers. -{{< image src="/images/learning-path/istio/bookinfo-on-mesh.webp" width="100%" align="center" alt="BookInfo architecture deployed on the mesh" title="Figure: BookInfo deployed on the mesh" >}} +![book-info-on-mesh]({{< usestatic "mastering-service-mesh/bookinfo-on-mesh.webp" >}})
Sidecars proxy can be either manually or automatically injected into the pods. Automatic sidecar @@ -46,9 +46,7 @@ If your environment **does NOT** supports either of these two APIs, then you may As part of Istio deployment in [Previous chapter](./getting-started), you have deployed the sidecar injector.
-

- Deploying Sample App with Automatic sidecar injection -

+### **Deploying Sample App with Automatic sidecar injection**
Istio, deployed as part of this workshop, will also deploy the sidecar injector. Let us now @@ -119,12 +117,12 @@ kubectl describe svc productpage Next, you will expose the BookInfo application to be accessed external from the cluster.
-

Alternative: Manual installation

+#### **Alternative: Manual installation** Follow this if the above steps did not work for you

-

Label namespace for injection

+##### **Label namespace for injection** Label the default namespace with istio-injection=enabled @@ -146,7 +144,7 @@ kube-public Active 1h kube-system Active 1h ``` -

Deploy BookInfo

+##### **Deploy BookInfo**
Applying this yaml file included in the Istio package you collected in [Getting Started](./getting-started) will deploy the BookInfo app in you cluster. @@ -155,7 +153,7 @@ Applying this yaml file included in the Istio package you collected in [Getting kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml ``` -

Deploy Gateway and Virtual Service for BookInfo app

+##### **Deploy Gateway and Virtual Service for BookInfo app** ```sh kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml @@ -164,12 +162,9 @@ kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml

-

- - Manual Sidecar Injection -

+#### **Manual Sidecar Injection** -

Use this only when Automatic Sidecar injection doesn't work

+Use this only when Automatic Sidecar injection doesn't work To do a manual sidecar injection we will be using `istioctl` command: diff --git a/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/introduction-to-service-meshes/expose-services.md b/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/introduction-to-service-meshes/expose-services.md index 3814e46c9..82d148569 100644 --- a/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/introduction-to-service-meshes/expose-services.md +++ b/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/introduction-to-service-meshes/expose-services.md @@ -9,11 +9,7 @@ weight: 3 {{< chapterstyle >}} The components deployed on the service mesh by default are not exposed outside the cluster. An Ingress Gateway is deployed as a Kubernetes service of type LoadBalancer (or NodePort). To make Bookinfo accessible external to the cluster, you have to create an `Istio Gateway` for the Bookinfo application and also define an `Istio VirtualService` with the routes we need. - -
-
- -

Inspecting the Istio Ingress Gateway

+### **Inspecting the Istio Ingress Gateway**
The ingress gateway gets exposed as a normal Kubernetes service of type LoadBalancer (or NodePort): @@ -59,11 +55,10 @@ Now let us find the ingress pod and output the log: ```sh kubectl logs istio-ingressgateway-... -n istio-system ``` - -

View Istio Ingress Gateway for Bookinfo

+### **View Istio Ingress Gateway for Bookinfo**
-

View the Gateway and VirtualServices

+#### **View the Gateway and VirtualServices** Check the created `Istio Gateway` and `Istio VirtualService` to see the changes deployed: @@ -75,9 +70,7 @@ kubectl get virtualservices kubectl get virtualservices -o yaml ``` -

- Find the external port of the Istio Ingress Gateway by running: -

+#### **Find the external port of the Istio Ingress Gateway by running:** ```sh kubectl get service istio-ingressgateway -n istio-system -o wide @@ -89,7 +82,7 @@ To just get the first port of istio-ingressgateway service, we can run this: kubectl get service istio-ingressgateway -n istio-system --template='{{(index .spec.ports 1).nodePort}}' ``` -

Create a DNS entry:

+#### **Create a DNS entry:** Modify you local `/etc/hosts` file to add an entry for your sample application. @@ -143,8 +136,7 @@ spec: port: number: 9080 ``` - -

Apply default destination rules

+### **Apply default destination rules** Before we start playing with Istio's traffic management capabilities we need to define the available versions of the deployed services. They are called subsets, in destination rules. @@ -224,17 +216,16 @@ kubectl get destinationrules kubectl get destinationrules -o yaml ``` - -

Browse to BookInfo

+### **Browse to BookInfo** Browse to the website of the Bookinfo. To view the product page, you will have to append `/productpage` to the url. -

Reload Page

+#### **Reload Page** Now, reload the page multiple times and notice how it round robins between v1, v2 and v3 of the reviews service. -

Inspect the Istio proxy of the productpage pod

+### **Inspect the Istio proxy of the productpage pod** To better understand the istio proxy, let's inspect the details. Let us `exec` into the productpage pod to find the proxy details. To do so we need to first find the full pod name and then `exec` into the istio-proxy container: @@ -259,14 +250,13 @@ As a last step, lets exit the container: exit ``` -
-

Alternative: Manual installation

+#### **Alternative: Manual installation** Follow this if the above steps did not work for you

-

Default destination rules

+##### **Default destination rules** Run the following command to create default destination rules for the Bookinfo services: @@ -274,9 +264,7 @@ Run the following command to create default destination rules for the Bookinfo s kubectl apply -f samples/bookinfo/networking/destination-rule-all-mtls.yaml ``` -

- Configure the Bookinfo route with the Istio Ingress gateway -

+##### **Configure the Bookinfo route with the Istio Ingress gateway** We can create a virtualservice & gateway for bookinfo app in the ingress gateway by running the following: diff --git a/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/introduction-to-service-meshes/fault-injection.md b/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/introduction-to-service-meshes/fault-injection.md index 540ba29ed..98b0ab5aa 100644 --- a/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/introduction-to-service-meshes/fault-injection.md +++ b/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/introduction-to-service-meshes/fault-injection.md @@ -34,9 +34,7 @@ spec: subset: v2 ``` -

- Inject a route rule to create a fault using HTTP delay -

+### **Inject a route rule to create a fault using HTTP delay** 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. @@ -85,14 +83,12 @@ spec: 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 : -Error fetching product reviews! +**Error fetching product reviews!** Sorry, product reviews are currently unavailable for this book. If you logout or login as a different user, the page should load normally without any errors. -

- Inject a route rule to create a fault using HTTP abort -

+### **Inject a route rule to create a fault using HTTP abort** In this section, , we will introduce an HTTP abort to the ratings microservices for user `jason`. @@ -143,37 +139,36 @@ Now we login to `/productpage` as user `jason` and observe that the page loads w `Ratings service is currently unavailable`. -

Verify fault injection

+#### **Verify fault injection** Verify the fault injection by logging out (or logging in as a different user), the page should load normally without any errors.
-

Alternative: Manual installation

+ +#### **Alternative: Manual installation** Follow these steps if the above steps did not work

-

Route all traffic to version V1 of all services

+##### **Route all traffic to version V1 of all services** ```sh kubectl apply -f samples/bookinfo/networking/virtual-service-all-v1.yaml ``` -

- Route all traffic to version V2 of reviews for user Jason -

+##### **Route all traffic to version V2 of reviews for user Jason** ```sh kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-test-v2.yaml ``` -

Inject 7s delay for ratings service

+##### **Inject 7s delay for ratings service** ```sh kubectl apply -f samples/bookinfo/networking/virtual-service-ratings-test-delay.yaml ``` -

Inject HTTP abort for ratings service

+##### **Inject HTTP abort for ratings service** ```sh kubectl apply -f samples/bookinfo/networking/virtual-service-ratings-test-abort.yaml diff --git a/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/introduction-to-service-meshes/getting-started.md b/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/introduction-to-service-meshes/getting-started.md index 7896f1a1b..62ab0a710 100644 --- a/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/introduction-to-service-meshes/getting-started.md +++ b/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/introduction-to-service-meshes/getting-started.md @@ -9,11 +9,11 @@ weight: 1 {{< chapterstyle >}} -

Setup Istio

+### **Setup Istio** Now that we have a Kubernetes cluster and Meshery, we are ready to download and deploy Istio resources. -

Steps

+### **Steps** 1. [Install Istio](#1) 1. [Verify install](#2) @@ -24,9 +24,7 @@ Optional (manual install of Istio): 1. [Setup `istioctl`](#1.2) 1. [Install istio](#1.3) -

- Install Istio -

+#### **Install Istio** Using Meshery, select `Istio` from the `Lifecycle` menu. @@ -35,27 +33,20 @@ In the Istio management page: 1. Type `istio-system` into the namespace field. 2. Click the (+) icon on the `Install` card and click on `Istio Service Mesh` to install latest version of Istio. - {" "} + ![install-istio1]({{< usestatic "mastering-service-mesh/install-istio1.webp" >}}) - {{< image src="/images/learning-path/istio/install-istio1.webp" width="100%" align="center" alt="" >}} 3. Click the `Deploy` button on the confirmation modal. - {" "} + ![install-istio2]({{< usestatic "mastering-service-mesh/install-istio2.webp" >}}) - {" "} - - {{< image src="/images/learning-path/istio/install-istio2.webp" width="100%" align="center" alt="" >}} - -

Alternative:Manual installation

+#### **Alternative:Manual installation** Perform the below steps if the above steps doesn't work for you.

-

- Download Istio -

+##### **Download Istio** You will download and deploy the latest Istio resources on your Kubernetes cluster. @@ -67,9 +58,7 @@ On your local machine, execute: curl -L https://git.io/getLatestIstio | ISTIO_VERSION=1.7.3 sh - ``` -

- Setting up istioctl -

+##### **Setting up istioctl** On a \*nix system, you can setup `istioctl` by doing the following: @@ -96,9 +85,7 @@ Check if the cluster is ready for installation: istioctl verify-install ``` -

- Install Istio -

+##### **Install Istio** To install Istio with a `demo` profile, execute the below command. @@ -112,16 +99,14 @@ Alternatively, with Envoy logging enabled: istioctl install --set profile=demo --set meshConfig.accessLogFile=/dev/stdout ``` -

- Verify install -

+#### **Verify instal** In the Istio management page: 1. Click the (+) icon on the `Validate Service Mesh Configuration` card. 1. Select `Verify Installation` to verify the installation of Istio. -

Alternatively:

+##### **Alternatively:** Istio is deployed in a separate Kubernetes namespace `istio-system`. To check if Istio is deployed, and also, to see all the pieces that are deployed, execute the following: diff --git a/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/introduction-to-service-meshes/mutual-tls.md b/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/introduction-to-service-meshes/mutual-tls.md index 37c015c7b..842c67b1b 100644 --- a/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/introduction-to-service-meshes/mutual-tls.md +++ b/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/introduction-to-service-meshes/mutual-tls.md @@ -13,7 +13,7 @@ Istio provides transparent mutual TLS to services inside the service mesh where By default istio sets mTLS in `PERMISSIVE` mode which allows plain text traffic to be sent and accepted by a mesh. We first disallow plain text traffic using `PeerAuthentication` and setting mTLS mode to STRICT. -

Confirm mTLS is being enforced

+### **Confirm mTLS is being enforced** This can be easily done by executing a simple command:- @@ -21,7 +21,7 @@ This can be easily done by executing a simple command:- kubectl get peerauthentication --all-namespaces ``` -

Verify mTLS

+### **Verify mTLS** Citadel is Istio’s key management service. As a first step, confirm that Citadel is up and running: @@ -132,9 +132,7 @@ Now lets come out of the container before we go to the next section: exit ``` -

- Secure Production Identity Framework for Everyone (SPIFFE) -

+### **Secure Production Identity Framework for Everyone (SPIFFE)**
Istio uses [SPIFFE](https://spiffe.io/) to assert the identify of workloads on the cluster. SPIFFE consists of a notion of identity and a method of proving it. A SPIFFE diff --git a/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/introduction-to-service-meshes/observability.md b/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/introduction-to-service-meshes/observability.md index 21b7e1d06..5a5bf9fb9 100644 --- a/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/introduction-to-service-meshes/observability.md +++ b/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/introduction-to-service-meshes/observability.md @@ -9,7 +9,7 @@ weight: 4 {{< chapterstyle >}} -

Install Telemetry Add-ons

+### **Install Telemetry Add-ons** Using Meshery, install Istio telemetry add-ons. In the Istio management page: @@ -19,13 +19,12 @@ Using Meshery, install Istio telemetry add-ons. In the Istio management page: 1. [Grafana](https://grafana.com/) 1. [Jaeger](https://www.jaegertracing.io/) -{" "} -{{< image src="/images/learning-path/istio/istio-addons.webp" width="100%" align="center" alt="" >}} +![istio-addons]({{< usestatic "mastering-service-mesh/istio-addons.webp" >}}) You will use Prometheus and Grafana for collecting and viewing metrics and [Jaeger](https://www.jaegertracing.io/) collecting and viewing distributed traces. Expose each add-on external to the cluster. Each the service network typs are set to "LoadBalancer". -

Service Mesh Performance and Telemetry

+#### **Service Mesh Performance and Telemetry** Many of the labs require load to be placed on the sample apps. Let's generate HTTP traffic against the BookInfo application, so we can see interesting telemetry. @@ -43,14 +42,14 @@ The URL to run a load test against will be `http://Connect Grafana (optionally, Prometheus) to Meshery. +##### **Connect Grafana (optionally, Prometheus) to Meshery.** On the Settings page: 1. Navigate to the `Metrics` tab. 1. Enter Grafana's URL:port number and submit. -

Use Meshery to generate load and analyze performance.

+##### **Use Meshery to generate load and analyze performance.** On the Performance page: @@ -67,12 +66,13 @@ Click on `Run Test`. A performance test will run and statistical analysis perfor Next, you will begin controlling requests to BookInfo using traffic management features.
-

Alternative: Manual installation

+ +#### **Alternative: Manual installation** Follow these steps if the above steps did not work

-

Install Add-ons:

+##### **Install Add-ons:**
**Prometheus** @@ -96,7 +96,7 @@ kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.7/sampl ``` -

Exposing services

+##### **Exposing services** Istio add-on services are deployed by default as `ClusterIP` type services. We can expose the services outside the cluster by either changing the Kubernetes service type to `NodePort` or `LoadBalancer` or by port-forwarding or by configuring Kubernetes Ingress. @@ -106,7 +106,7 @@ To expose them using NodePort service type, we can edit the services and change **Option 2: Expose services with port-forwarding** Port-forwarding runs in the foreground. We have appeneded `&` to the end of the above 2 commands to run them in the background. If you donot want this behavior, please remove the `&` from the end. -

Prometheus

+##### **Prometheus** You will need to expose the Prometheus service on a port either of the two following methods: @@ -123,7 +123,7 @@ kubectl -n istio-system get svc prometheus ``` **Option 2: Expose Prometheus service with port-forwarding:** -\*\* + Expose Prometheus service with port-forwarding: ```sh @@ -134,12 +134,9 @@ kubectl -n istio-system port-forward \ Browse to `http://:` and in the `Expression` input box enter: `istio_request_bytes_count`. Click the Execute button. -
-{{< image src="/images/learning-path/istio/Prometheus.webp" width="100%" align="center" alt="" >}} +![prometheus]({{< usestatic "mastering-service-mesh/Prometheus.webp" >}}) -
-
-

Grafana

+##### **Grafana** You will need to expose the Grafana service on a port either of the two following methods: @@ -162,11 +159,11 @@ kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l app=gr -o jsonpath='{.items[0].metadata.name}') 3000:3000 & ``` -{{< image src="/images/learning-path/istio/Grafana_Istio_Dashboard.webp" width="100%" align="center" alt="" >}} +![Grafana]({{< usestatic "mastering-service-mesh/Grafana_Istio_Dashboard.webp" >}})

-

Distributed Tracing

+##### **Distributed Tracing** The sample Bookinfo application is configured to collect trace spans using Zipkin or Jaeger. Although Istio proxies are able to automatically send spans, it needs help from the application to tie together the entire trace. To do this applications need to propagate the appropriate HTTP headers so that when the proxies send span information to Zipkin or Jaeger, the spans can be correlated correctly into a single trace. @@ -180,16 +177,12 @@ To do this the application collects and propagates the following headers from th - `x-b3-flags` - `x-ot-span-context` -
- -{" "} - -{{< image src="/images/learning-path/istio/jaeger.webp" width="100%" align="center" >}} +![jaeger]({{< usestatic "mastering-service-mesh/jaeger.webp" >}})

-

Exposing services

+##### **Exposing services** Istio add-on services are deployed by default as `ClusterIP` type services. We can expose the services outside the cluster by either changing the Kubernetes service type to `NodePort` or `LoadBalancer` or by port-forwarding or by configuring Kubernetes Ingress. In this lab, we will briefly demonstrate the `NodePort` and port-forwarding ways of exposing services. @@ -221,7 +214,7 @@ kubectl -n istio-system port-forward \ 16686:16686 & ``` -

View Traces

+##### **View Traces** Let us find the port Jaeger is exposed on by running the following command: diff --git a/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/introduction-to-service-meshes/routing-and-canary.md b/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/introduction-to-service-meshes/routing-and-canary.md index 9e7f631ca..198e82ebc 100644 --- a/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/introduction-to-service-meshes/routing-and-canary.md +++ b/content/learning-paths/11111111-1111-1111-1111-111111111111/mastering-service-meshes-for-developers/introduction-to-service-meshes/routing-and-canary.md @@ -10,10 +10,7 @@ title: "Request Routing and Canary Testing" {{< chapterstyle >}} In this chapter, we are going to get our hands on some of the traffic management capabilities of Istio. -
-
-

Apply default destination rules

-
+### **Apply default destination rules** Before we start playing with Istio's traffic management capabilities, we need to define the available versions of the deployed services. In Istio parlance, versions are called subsets. Subsets are defined in destination rules. @@ -96,8 +93,7 @@ kubectl get destinationrules kubectl get destinationrules -o yaml ``` -

Configure the default route for all services to V1

-
+### **Configure the default route for all services to V1** As part of the bookinfo sample app, there are multiple versions of reviews service. When we load the `/productpage` in the browser multiple times we have seen the reviews service round robin between v1, v2 or v3. As the first exercise, let us first restrict traffic to just V1 of all the services. @@ -140,9 +136,8 @@ spec: Now when we reload the `/productpage` several times, we will ONLY be viewing the data from v1 of all the services, which means we will not see any ratings (any stars). -

Content-based routing

+### **Content-based routing** -
Let's replace our first rules with a new set. Enable the `ratings` service for a user `jason` by routing `productpage` traffic to `reviews` v2: @@ -187,10 +182,10 @@ spec: Now if we login as your `jason`, you will be able to see data from `reviews` v2. While if you NOT logged in or logged in as a different user, you will see data from `reviews` v1. -

Canary Testing - Traffic Shifting

+### **Canary Testing - Traffic Shifting** -
-

Canary testing w/50% load

+ +#### **Canary testing w/50% load** To start canary testing, let's begin by transferring 50% of the traffic from reviews:v1 to reviews:v3 with the following command: @@ -232,7 +227,7 @@ spec: Now, if we reload the `/productpage` in your browser several times, you should now see red-colored star ratings approximately 50% of the time. -

Shift 100% to v3

+#### **Shift 100% to v3** When version v3 of the reviews microservice is considered stable, we can route 100% of the traffic to reviews:v3: @@ -269,13 +264,11 @@ spec: Now, if we reload the `/productpage` in your browser several times, you should now see red-colored star ratings 100% of the time. -
-

Alternative: Manual installation

+ +#### **Alternative: Manual installation** Follow these steps if the above steps did not work -
-
-

Default destination rules

+##### **Default destination rules** Run the following command to create default destination rules for the Bookinfo services: @@ -283,34 +276,25 @@ Run the following command to create default destination rules for the Bookinfo s kubectl apply -f samples/bookinfo/networking/destination-rule-all-mtls.yaml ``` -

Route all traffic to version V1 of all services

+##### **Route all traffic to version V1 of all services** ```sh kubectl apply -f samples/bookinfo/networking/virtual-service-all-v1.yaml ``` -

- {" "} - Route all traffic to version V2 of reviews for user Jason -

+##### **Route all traffic to version V2 of reviews for user Jason** ```sh kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-test-v2.yaml ``` -

- {" "} - Route 50% of traffic to version V3 of reviews service -

+##### **Route 50% of traffic to version V3 of reviews service** ```sh kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-50-v3.yaml ``` -

- {" "} - Route 100% of traffic to version V3 of reviews service -

+##### **Route 100% of traffic to version V3 of reviews service** ```sh kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-v3.yaml diff --git a/static/11111111-1111-1111-1111-111111111111/mastering-service-mesh/Grafana_Istio_Dashboard.webp b/static/11111111-1111-1111-1111-111111111111/mastering-service-mesh/Grafana_Istio_Dashboard.webp new file mode 100644 index 000000000..43e6a0642 Binary files /dev/null and b/static/11111111-1111-1111-1111-111111111111/mastering-service-mesh/Grafana_Istio_Dashboard.webp differ diff --git a/static/11111111-1111-1111-1111-111111111111/mastering-service-mesh/Prometheus.webp b/static/11111111-1111-1111-1111-111111111111/mastering-service-mesh/Prometheus.webp new file mode 100644 index 000000000..0aaa2deff Binary files /dev/null and b/static/11111111-1111-1111-1111-111111111111/mastering-service-mesh/Prometheus.webp differ diff --git a/static/11111111-1111-1111-1111-111111111111/mastering-service-mesh/bookinfo-off-mesh.webp b/static/11111111-1111-1111-1111-111111111111/mastering-service-mesh/bookinfo-off-mesh.webp new file mode 100644 index 000000000..9ef0fe1a4 Binary files /dev/null and b/static/11111111-1111-1111-1111-111111111111/mastering-service-mesh/bookinfo-off-mesh.webp differ diff --git a/static/11111111-1111-1111-1111-111111111111/mastering-service-mesh/bookinfo-on-mesh.webp b/static/11111111-1111-1111-1111-111111111111/mastering-service-mesh/bookinfo-on-mesh.webp new file mode 100644 index 000000000..9658fab64 Binary files /dev/null and b/static/11111111-1111-1111-1111-111111111111/mastering-service-mesh/bookinfo-on-mesh.webp differ diff --git a/static/11111111-1111-1111-1111-111111111111/mastering-service-mesh/install-istio1.webp b/static/11111111-1111-1111-1111-111111111111/mastering-service-mesh/install-istio1.webp new file mode 100644 index 000000000..5aac53591 Binary files /dev/null and b/static/11111111-1111-1111-1111-111111111111/mastering-service-mesh/install-istio1.webp differ diff --git a/static/11111111-1111-1111-1111-111111111111/mastering-service-mesh/install-istio2.webp b/static/11111111-1111-1111-1111-111111111111/mastering-service-mesh/install-istio2.webp new file mode 100644 index 000000000..24af769d1 Binary files /dev/null and b/static/11111111-1111-1111-1111-111111111111/mastering-service-mesh/install-istio2.webp differ diff --git a/static/11111111-1111-1111-1111-111111111111/mastering-service-mesh/istio-addons.webp b/static/11111111-1111-1111-1111-111111111111/mastering-service-mesh/istio-addons.webp new file mode 100644 index 000000000..56ba83238 Binary files /dev/null and b/static/11111111-1111-1111-1111-111111111111/mastering-service-mesh/istio-addons.webp differ diff --git a/static/11111111-1111-1111-1111-111111111111/mastering-service-mesh/jaeger.webp b/static/11111111-1111-1111-1111-111111111111/mastering-service-mesh/jaeger.webp new file mode 100644 index 000000000..b40ef0a10 Binary files /dev/null and b/static/11111111-1111-1111-1111-111111111111/mastering-service-mesh/jaeger.webp differ diff --git a/static/11111111-1111-1111-1111-111111111111/mastering-service-mesh/meshery_cb_load_test.webp b/static/11111111-1111-1111-1111-111111111111/mastering-service-mesh/meshery_cb_load_test.webp new file mode 100644 index 000000000..74045cfc4 Binary files /dev/null and b/static/11111111-1111-1111-1111-111111111111/mastering-service-mesh/meshery_cb_load_test.webp differ diff --git a/static/11111111-1111-1111-1111-111111111111/mastering-service-mesh/meshery_initial_load_test.webp b/static/11111111-1111-1111-1111-111111111111/mastering-service-mesh/meshery_initial_load_test.webp new file mode 100644 index 000000000..201b97a62 Binary files /dev/null and b/static/11111111-1111-1111-1111-111111111111/mastering-service-mesh/meshery_initial_load_test.webp differ