Microservices on Kubernetes with Docker Desktop

Dev Thakkar
2 min readMar 21, 2024

Scenario: Publish 4 microservices on Kubernetes with Docker Desktop

Tech stack: .NET Core, Visual Studio, Kubernetes on Docker Desktop (on Windows)

GitHub: Ecommerce — Kubernetes Run

(1) Docker desktop includes standalone Kubernetes server and client.

(2) Services and data flow example are similar to explanation in Microservices on Docker Desktop.

  • CustomerService
  • OrderService
  • ProductService
  • SearchService

(3) Kubernetes YAML files

  • searchservice-deploy.yml
## Includes endpoints for customerservice, orderservice and productservice
## searchservice docker image is loaded from Local registry
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: searchservice
spec:
replicas: 1
template:
metadata:
labels:
app: searchservice
spec:
containers:
- name: searchservice
image: localhost:5000/searchservice:latest
imagePullPolicy: Always
ports:
- containerPort: 30003
env:
- name: ASPNETCORE_URLS
value: http://*:30003
- name: CustomersUrl
value: http://customerservice
- name: ProductsUrl
value: http://productservice
- name: OrdersUrl
value: http://orderservice
selector:
matchLabels:
app: searchservice
---
apiVersion: v1
kind: Service
metadata:
name: searchservice
spec:
type: LoadBalancer
ports:
- port: 30003
selector:
app: searchservice
  • customerservice-deploy.yml
## customerservice docker image is loaded from Local registry

---
apiVersion: apps/v1
kind: Deployment
metadata:
name: customerservice #default dns name
spec:
replicas: 1
template:
metadata:
labels:
app: customerservice
spec:
containers:
- name: customerservice
image: localhost:5000/customerservice:latest
imagePullPolicy: Always
ports:
- containerPort: 80
env:
- name: ASPNETCORE_URLS
value: http://*:80
selector:
matchLabels:
app: customerservice
---
apiVersion: v1
kind: Service
metadata:
name: customerservice
spec:
ports:
- port: 80
type: LoadBalancer
selector:
app: customerservice
  • orderservice-deploy.yml
## orderservice docker image is loaded from Local registry

---
apiVersion: apps/v1
kind: Deployment
metadata:
name: orderservice #default dns name
spec:
replicas: 1
template:
metadata:
labels:
app: orderservice
spec:
containers:
- name: orderservice
image: localhost:5000/orderservice:latest
imagePullPolicy: Always
ports:
- containerPort: 80
env:
- name: ASPNETCORE_URLS
value: http://*:80
selector:
matchLabels:
app: orderservice
---
apiVersion: v1
kind: Service
metadata:
name: orderservice
spec:
ports:
- port: 80
type: ClusterIP
selector:
app: orderservice
  • productservice-deploy.yml
## productservice docker image is loaded from Local registry

---
apiVersion: apps/v1
kind: Deployment
metadata:
name: productservice #default dns name
spec:
replicas: 1
template:
metadata:
labels:
app: productservice
spec:
containers:
- name: productservice
image: localhost:5000/productservice:latest
imagePullPolicy: Always
ports:
- containerPort: 80
env:
- name: ASPNETCORE_URLS
value: http://*:80
selector:
matchLabels:
app: productservice
---
apiVersion: v1
kind: Service
metadata:
name: productservice
spec:
ports:
- port: 80
type: ClusterIP
selector:

(3) Local registry setup

  • Creating local registry in Docker Desktop provides a store for docker images.
  • Kubernetes YAML files are setup to load docker images from the local registry.
## create registry

docker run -d -p 5000:5000 --restart=always --name registry registry:2


## build and push docker images to registry

docker build -t productservice .
docker tag productservice localhost:5000/productservice
docker push localhost:5000/productservice

docker build -t customerservice .
docker tag customerservice localhost:5000/customerservice
docker push localhost:5000/customerservice

docker build -t orderservice .
docker tag orderservice localhost:5000/orderservice
docker push localhost:5000/orderservice

docker build -t searchservice .
docker tag searchservice localhost:5000/searchservice
docker push localhost:5000/searchservice

(4) Deploy services to Kubernetes on Docker Desktop (after registry is setup)

kubectl apply -f customerservice-deploy.yml

kubectl apply -f productservice-deploy.yml

kubectl apply -f orderservice-deploy.yml

kubectl apply -f searchservice-deploy.yml

(5) Call SearchService

Post HTTP: http://localhost/api/search

Body:
{
"customerId": 1
}

--

--