Yang-Onion / coolstore-microservices

Coolstore is a containerised polyglot microservices application consisting of services based on .NET Core, NodeJS and more running on Service Mesh

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Cool Store Application on Service Mesh

Price Build Status

This project is inspired from coolstore project by jbossdemocentral & Red Hat Demo Central

CoolStore is a containerised polyglot microservices application consisting of services based on .NET Core, NodeJS and more running on Service Mesh.

It demonstrates how to wire up small microservices into a larger application using microservice architectural principals.

Table of contents

Prerequisites

  • Windows 10
  • Windows Subsystem Linux (WSL - Ubuntu OS)
  • Docker for Windows (Kubernetes enabled)
  • kubectl
  • helm
  • istioctl

Services

There are several individual microservices and infrastructure components that make up this app:

  1. Catalog Service
  • NodeJS service and MongoDB, serves products and prices for retail products
  • http://localhost:5002
  1. Cart Service
  • .NET Core service which manages shopping cart for each customer
  • http://localhost:5003
  1. Inventory Service
  • .NET Core service and SQL Server, serves inventory and availability data for retail products
  • http://localhost:5004
  1. Pricing Service
  • .NET Core service which is a business rules application for product pricing
  • http://localhost:5005
  1. Review Service
  • .NET Core service and SQL Server running for writing and displaying reviews for products
  • http://localhost:5006
  1. Rating Service
  • NodeJS service running for rating products
  • http://localhost:5007
  1. Coolstore Gateway
  • ingress-nginx service running that serving as an API gateway to the backend services
  • http://localhost:5000
  1. IDP
  • Identity Provider using IdentityServer4 to authentication with OAuth 2.0 and OpenID Connect for the whole stack
  • http://localhost:5001
  1. Web UI (PWA)
  • A frontend based on vuejs and Node.js
  • http://localhost:8080

Architecture Screenshot

Up and Running

  1. Make sure we have docker for windows edge running with kubernetes option enabled. We need to install kubectl, helm and istioctl on the build machine as well.

  2. From current console, type bash to enter Linux Subsystem (Ubuntu)

  3. Download istio istio-1.0.0-snapshot.2, and unzip it into somewhere

> cd <istio-1.0.0-snapshot.2 path>
> kubectl create -f install/kubernetes/helm/helm-service-account.yaml
> helm init --service-account tiller --upgrade
> helm install install/kubernetes/helm/istio --name istio --namespace istio-system --timeout 1000
  1. Then cd into your root of project
> ./cs-build.sh
> ./cs-inject-istio.sh
  1. Install web chart
> helm install -n web deploys/charts/web
  1. Add hosts file with following content
127.0.0.1   api.coolstore.local
127.0.0.1   id.coolstore.local
127.0.0.1   coolstore.local

Waiting for the container provision completed

> curl -I http://coolstore.local # website
> curl -I http://api.coolstore.local # api gateway
> curl -I http://id.coolstore.local # identity provider
  1. Clean up coolstore application as
> kubectl delete -f deployment/istio/dev-all-in-one.yaml
> helm delete web --purge
> helm delete istio --purge

Notes:

If you want to run just only Kubernetes + nginx-ingress go to deploys/charts/coolstore/values.yaml and add

nginx:
   enabled: true

Then run the helm command as

helm install --name cs-nginx stable/nginx-ingress

If you run it on Docker for Windows, then you cannot run sidecar auto injection so that we need to export coolstore chart to manifest file like

helm template deploys/charts/coolstore -f deploys/charts/coolstore/values.dev.yaml --namespace cs-system > deploys/istio/dev-all-in-one.yaml
istioctl kube-inject -f deploys/istio/dev-all-in-one.yaml | kubectl apply -f -

Open API

OpenAPI Screenshot

CI/CD

Lift and Shift

Contributing

  1. Fork it!
  2. Create your feature branch: git checkout -b my-new-feature
  3. Commit your changes: git commit -am 'Add some feature'
  4. Push to the branch: git push origin my-new-feature
  5. Submit a pull request :p

Contributors

Thang Chung Thinh Nguyen
thangchung thinhnguyen

Licence

Code released under the MIT license.

About

Coolstore is a containerised polyglot microservices application consisting of services based on .NET Core, NodeJS and more running on Service Mesh

License:MIT License


Languages

Language:C# 75.2%Language:JavaScript 13.3%Language:Vue 5.7%Language:Shell 2.3%Language:Dockerfile 1.5%Language:CSS 1.0%Language:Smarty 0.6%Language:HTML 0.4%Language:PowerShell 0.0%