{"id":19466879,"url":"https://github.com/digio/istio-demo","last_synced_at":"2025-04-25T11:30:40.341Z","repository":{"id":36059309,"uuid":"147157480","full_name":"digio/istio-demo","owner":"digio","description":"demonstrating canary deployments with istio","archived":true,"fork":false,"pushed_at":"2022-12-07T17:29:48.000Z","size":54606,"stargazers_count":11,"open_issues_count":21,"forks_count":5,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-03-14T02:23:46.672Z","etag":null,"topics":["isitio","kubernetes","microservices-architecture","react","service-mesh","spectaclejs"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/digio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-09-03T05:50:45.000Z","updated_at":"2024-11-17T11:46:00.000Z","dependencies_parsed_at":"2023-01-16T12:45:50.447Z","dependency_job_id":null,"html_url":"https://github.com/digio/istio-demo","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/digio%2Fistio-demo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/digio%2Fistio-demo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/digio%2Fistio-demo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/digio%2Fistio-demo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/digio","download_url":"https://codeload.github.com/digio/istio-demo/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250808047,"owners_count":21490612,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["isitio","kubernetes","microservices-architecture","react","service-mesh","spectaclejs"],"created_at":"2024-11-10T18:31:19.415Z","updated_at":"2025-04-25T11:30:39.523Z","avatar_url":"https://github.com/digio.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Istio Demonstration\n\nA basic example of implementing ingress into an Istio service mesh, with a demonstration of canary based policy which utilises labels on a multi-versioned microservice, which has been deployed within the Istio service mesh.\n\n## Contents\n\n- [Istio Demonstration](#istio-demonstration)\n  - [Contents](#contents)\n  - [Reference](#reference)\n  - [Prerequisites](#prerequisites)\n  - [Getting Started](#getting-started)\n    - [install dependencies](#install-dependencies)\n    - [Resolution](#resolution)\n    - [Install Demo](#install-demo)\n    - [Install Istio](#install-istio)\n    - [Deploy Example Microservice](#deploy-example-microservice)\n    - [Observability](#observability)\n    - [Generate Traffic](#generate-traffic)\n\n## Reference\n\n[1] https://istio.io/docs/reference/config/istio.networking.v1alpha3/\n\n[2] https://istio.io/blog/2018/v1alpha3-routing/\n\n## Prerequisites\n\n- I've developed and tested this using Docker for Mac, with the Kubernetes local cluster enabled.  It is available [here](https://store.docker.com/editions/community/docker-ce-desktop-mac).  These instructions/tooling should also work with Minikube, however I have not tested yet.\n\n- nginx/haproxy to enable a single origin to prevent CORS complaints when web-app accesses the backend. associated steps are implemented in the `Makefile` contained in this repo, instructions below.\n\n- [NVM](https://github.com/creationix/nvm) installed and configured in the shell.\n\n## Getting Started\n\nTo start the presentation alone run the following:\n\n```bash\nnvm install\nnvm use\nnpm install\nnpm run start\n```\n\n### install dependencies\n\n```bash\nmake install\n```\n\n### Resolution\n\nAdd the following to your /etc/hosts to faciliate domain resolution which will be\nused for requesting content from the service mesh, running on your local machine within docker-for-desktop.\n\n```text\n...\n127.0.0.1   webapp.demo api.demo grafana.demo kiali.demo tracing.demo\n...\n```\n\n### Install Demo\n\nThe end-to-end install can be started by running:\n\n```bash\nmake install.demo\n```\n\n### Install Istio\n\nIn order to install Istio we run the below command. What this will do is deploy the Istio control plane via Helm, there are a range of flags added to add in the additional observability tooling as part of the deployment\n\n```bash\nmake istio.intall\n```\n\n### Deploy Example Microservice\n\nWith the namespace labelled, the below deployment will have side-cars added and consequently be augmented into the mesh.\n\nThese are deployed in the `development` namespace. This namespace has been labeled with `istio-injection=enabled`, consequently the `admissionMutatingWebhook` will modify the deployment resource to include an istio side-car in the deployment.\n\n```bash\nmake deploy.demo\n```\n\nThis will apply the related Istio CRD's to faciliate ingress into the mesh to the required microservices. You can see these polices in [policy/istio](/policy/istio) within this repo.\n\nOpen a browser and hit [http://localhost:3000](http://localhost:3000), and we are ready to roll.\n\n### Observability\n\nThe observability tooling such as Jaeger, Grafana, Prometheus, and Kiali will be deployed as part of the `make istio-install` command. However, in order to enable ingress to these services we need to deploy some `Ingress` policies to enable this connectivity.\n\nThis can be achieved with the following make command:\n\n```bash\nmake istio.observability\n```\nIf you've added the required `/etc/hosts` configuration. These services will be available at the the following `${HOSTNAME}:${NODE_PORT}`. Example:\n\n- [http://grafana.demo](http://grafana.demo)\n- [http://tracing.demo](http://tracing.demo)\n- [http://kiali.demo](http://kiali.demo)\n- [http://webapp.demo](http://webapp.demo)\n\n### Generate Traffic\n\nIn order to stimulate the given backend microservices and the Istio service mesh, we can generte some `Siege` traffic via the following command:\n\n```bash\nmake traffic\n```\n\nThis will generate many requests to the `http://api.demo` host, and we should see this traffic coming in via the myriad of observability tooling made available in the previous step.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdigio%2Fistio-demo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdigio%2Fistio-demo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdigio%2Fistio-demo/lists"}