# Microservices demo This project contains a 10-tier microservices application. The application is a web-based e-commerce app called “Hipster Shop” where users can browse items, add them to the cart, and purchase them. ### Running locally 1. Install: - kubectl (can be installed via `gcloud components install kubectl`) - Docker for Desktop (Mac/Windows): **Download the Edge release**; not the stable. Edge release provides Kubernetes support as [noted here](https://docs.docker.com/docker-for-mac/kubernetes/). - [skaffold](https://github.com/GoogleContainerTools/skaffold/#installation) 1. Launch Docker for Desktop. Go to Preferences and choose “Enable Kubernetes”. 1. Run `kubectl get nodes` to verify you're connected to Kubernetes on Docker. 1. Run `skaffold run` (first time will be slow). This will build and deploy the application. If you need to rebuild the images automatically as you refactor the code, run `skaffold dev` command. 1. Run `kubectl get pods` to verify the Pods are ready and running. The application frontend should be available at http://localhost:80 on your machine. ### Setup on GKE 1. Install tools specified in the previous section (Docker, kubectl, skaffold) 1. Create a Google Kubernetes Engine cluster and make sure `kubectl` is pointing to the cluster. 1. Enable Google Container Registry (GCR) on your GCP project: gcloud services enable containerregistry.googleapis.com 1. Configure docker to authenticate to GCR: gcloud auth configure-docker -q 1. Edit `skaffold.yaml`, prepend your GCR registry host (`gcr.io/YOUR_PROJECT/`) to all `imageName:` fields (or update the existing project name). 1. Edit the Deployment manifests at `kubernetes-manifests` directory and update the `image` fields to match the changes you made in the previous step. 1. Run `skaffold run`. This builds the container images, pushes them to GCR, and deploys the application to Kubernetes. 1. Find the IP address of your application: kubectl get service frontend-external then visit the application on your browser to confirm installation. ### Istio Deployment 1. Create a GKE cluster. 2. Install Istio **without mutual TLS** enablement. 3. Install the automatic sidecar injection (annotate the `default` namespace with the label): kubectl label namespace default istio-injection=enabled 4. Deploy the application. 5. Apply the manifests in [`./istio-manifests`](./istio-manifests) directory. kubectl apply -f ./istio-manifests