Testing the project locally in Minikube — Refactor Udagram App into Microservices and Deploy

Alvaro Andres Pinzon Cortes
6 min readDec 3, 2021

--

Prerequisites

Video tutorial

Step by step guide

Part 1: test backend microservices

Follow the getting started instructions in the project description

Please test the bucket and make sure that it works correctly. You can upload an image manually and if you can access the image’s link then the bucket works correctly

Please test the DB and make sure that it works correctly. Try to connect to it from your local machine.

Suppose that this is the DB information

User: appdbuser
DB: postgres
Password: adminadmin

DB URL: andresdb.cwvy79eg4hgs.us-east-1.rds.amazonaws.com

Then, run the following docker container to connect to the postgres db in your local machine (make sure to use your own DB information and credentials❗️)

docker run -it --rm postgres psql -h andresdb.cwvy79eg4hgs.us-east-1.rds.amazonaws.com -d postgres -U appdbuser

Create a cluster in your local machine using Minikube:

minikube start

Create the ConfigMap and the Secrets that will contain the environment variables and credentials. Also, create the backend-user deployment and service

kubectl apply -f env-configmap.yaml
kubectl apply -f aws-secret.yaml
kubectl apply -f env-secret.yaml
kubectl apply -f backend-user-deployment.yaml
kubectl apply -f backend-feed-deployment.yaml

Create the backend-feed deployment and service

kubectl apply -f backend-user-service.yaml
kubectl apply -f backend-feed-service.yaml

List the pods to check that their status is Running. This means that everything worked correctly

Create the reverse proxy deployment and service

kubectl apply -f revereseproxy-deployment.yaml
kubectl apply -f reverseproxy-service.yaml

List the pods to check that their status is Running. This means that everything worked correctly

Now we are going to connect with one of the containers in the back-user pod to test and make sure that it is working ok. The expected response is underlined

Please replace backend-user-bd8f5d75b-ftk2h with the name of your pod that you can see with kubectl get pods

kubectl exec --stdin --tty backend-user-bd8f5d75b-ftk2h  -- /bin/bash//YOU CAN USE THIS COMMAND
curl localhost:8080
//OR THIS COMMAND
curl backend-user:8080

Now we are going to connect with one of the containers in the back-feed pod to test and make sure that it is working ok. The expected response is underlined

Please replace backend-feed-bd8f5d75b-ftk2h with the name of your pod that you can see with kubectl get pods

kubectl exec --stdin --tty backend-feed-bd8f5d75b-ftk2h  -- /bin/bash//YOU CAN USE THIS COMMAND
curl localhost:8080
//OR THIS COMMAND
curl backend-feed:8080

Now we need to expose the reverseproxy using minikube to be able to interact with it in your local machine. You need to use the correct name of the service in the minikube service command

Now that the service is exposed we can interact with it from our browser. Use the URL that the minikube service displayed and add the /api/v0/feed. The expected response is the following:

Part 2: test backend microservices + frontend microservice

Now that we have tested the reverse proxy and make sure that it works we are going to deploy all the backend service micro services and the front and micro service.

I had to delete the kubernetes cluster because I created this part of the tutorial on a different day, and now I have to recreate everything. That’s why you’re going to see that some of the steps are going to duplicate.

I'm going assume that you have already created deployments and services for the cluster microservices in minikube. We’ll now use the minikube service functionality to communicate with the reverse proxy service from our local Computer.

In the front and micro service you need to update the apiHost because that one is going to be used by the front end to make requests to the backend.

Build the docker image for the frontend microservice (make sure that you use your own dockerhub repository name):

docker build -t dockerhubuser/frontend .

Push the docker image for the frontend microservice (make sure that you use your own dockerhub repository name):

docker push dockerhubuser/frontend

You can trigger a rolling update by updating the docker image and then with the command `kubectl set image` use the new image as shown in this example. For more information on how to configure and execute a rolling update strategy in kubernetes, please click on the link.

We’ll now use the minikube service functionality to communicate with the frontend microservice from our local machine.

Now we need to update the feed and user back and micro services to allow the origin of the request from the frontend. Otherwise we're going to experience a CORS error.

Update the CORS configuration in the feed backend microservice. Add the underlined line of code with the URL of the frontend:

Build the docker image for the backend-feed microservice (make sure that you use your own dockerhub repository name):

docker build -t dockerhubuser/backend-feed .

Push the docker image for the backend-feed microservice (make sure that you use your own dockerhub repository name):

docker push dockerhubuser/backend-feed

You can trigger a rolling update by updating the docker image and then with the command `kubectl set image` use the new image as shown in this example

Update the CORS configuration in the user backend microservice. Add the underlined line of code with the URL of the frontend:

Build the docker image for the backend-user microservice (make sure that you use your own dockerhub repository name):

docker build -t dockerhubuser/backend-user .

Push the docker image for the backend-user microservice (make sure that you use your own dockerhub repository name):

docker push dockerhubuser/backend-user

You can trigger a rolling update by updating the docker image and then with the command `kubectl set image` use the new image as shown in this example. For more information on how to configure and execute a rolling update strategy in kubernetes, please click on the link.

Now you can access the front end in the broswer and all the functionality is working.

When you finish testing end the minikube cluster

minikube delete

--

--

No responses yet