Why can't access my gRPC REST service that is running in Minikube?

3/4/2019

I've been learning Kubernetes recently and just came across this small issue. For some sanity checks, here is the functionality of my grpc app running locally:

> docker run -p 8080:8080 -it olamai/simulation:0.0.1
  < omitted logs >
> curl localhost:8080/v1/todo/all
{"api":"v1","toDos":[{}]}

So it works! All I want to do now is deploy it in Minikube and expose the port so I can make calls to it. My end goal is to deploy it to a GKE or Azure cluster and make calls to it from there (again, just to learn and get the hang of everything.)
Here is the yaml I'm using to deploy to minikube

And this is what I run to deploy it on minikube

> kubectl create -f deployment.yaml

I then run this to get the url

> minikube service sim-service --url
http://192.168.99.100:30588

But this is what happens when I make a call to it

> curl http://192.168.99.100:30588/v1/todo/all
curl: (7) Failed to connect to 192.168.99.100 port 30588: Connection refused

What am I doing wrong here?

EDIT: I figured it out, and you should be able to see the update in the linked file. I had pull policy set to Never so it was out of date

I have a new question now... I'm now able to just create the deployment in minikube (no NodePort) and still make calls to the api... shouldn't the deployment need a NodePort service to expose ports?

-- Diericx
grpc
kubernetes
minikube

1 Answer

3/4/2019

I checked your yaml file and it works just fine. But only I realized that you put 2 types for your services, LoadBalancer and also NodePort which is not needed. As if you check from this documentation definition of LoadBalancer, you will see

LoadBalancer: Exposes the service externally using a cloud provider’s load balancer. NodePort and ClusterIP services, to which the external load balancer will route, are automatically created.

As an answer for your next question, you probably put type: LoadBalancer to your deployment yaml file, that's why you are able to see NodePort anyway. If you put type: ClusterIP to your yaml, then service will be exposed only within cluster, and you won't able to reach to your service outside of cluster.

From same documentation:

ClusterIP: Exposes the service on a cluster-internal IP. Choosing this value makes the service only reachable from within the cluster. This is the default ServiceType

-- coolinuxoid
Source: StackOverflow