How to call spring api from frontend in kubernetes

1.6k views Asked by At

I am trying to create a Kubernetes application in which, I have created one pod and service for backend(spring boot microservice) & frontend pod and a loadbalancer service.

I wanted to know how would I call the backend API from frontend pod in Kubernetes?

Here are the running services:

NAME         TYPE           CLUSTER-IP      EXTERNAL-IP       PORT(S)          AGE       SELECTOR
angular      LoadBalancer   10.100.15.215   a17f17fd2e25011e886100a0e002191e-1613530232.us-east-1.elb.amazonaws.com   4200:30126/TCP   12s       app=angular
kubernetes   ClusterIP      10.100.0.1      <none>                                                                    443/TCP          35m       <none>
login        ClusterIP      10.100.99.52    <none>                                                                    5555/TCP         13m       app=login,tier=backend

I am calling the following API from frontend and it is showing name not resolved error:

http://login/login

I have also tried to call the API with cluster IP but that failed.

2

There are 2 answers

3
Rico On BEST ANSWER

Looks like your backend service is running on port 5555, so you would have to call your backend service like this:

http://login:5555/login

This assuming the pods for your frontend are on the same Kubernetes namespace. If they are on a different namespace you would call something like this:

http://login.<namespace>.svc.cluster.local:5555/login

Also as described here.

Note that this will work only within the cluster, if you are hitting your Angular frontend from a web browser outside of the cluster, this will not work, because the web browser would have no idea of where your backend is in the cluster. So either you will have to expose your backend using another LoadBalancer type of service or you may consider using a Kubernetes Ingress with an ingress controller.

0
Bal Chua On

Does your angular application directly access the login service? If thats the case, its normal that you will not be able to get thru because login service is using ClusterIP. Which means, the IP is within the cluster only. You can use LoadBalancer type like you did for your "angular" application.