OpenShift route - Unable to connect to remote host: No route to host

10/3/2017

I have deployed a grpc service running on OpenShift Origin. And this backed by a OpenShift service. And the service is exposed with an OpenShift route. I am trying to make this pod available via a service and route that maps the container port (50051) to outside world on port 8080.

The image that the service is trying to expose has, in its Dockerfile:

EXPOSE 50051

The route has the following:

  • Service Port: 8080/TCP
  • Target Port: 50051

In the DeploymentConfig I specify the port with:

ports:
 - containerPort: 50051
   protocol: TCP

However, when I try to access the application via the route and port, I get (from Java)

java.net.NoRouteToHostException: No route to host

And when I try to telnet the service IP:

telnet 172.30.197.247 8080

I am able to connect.

However, when I try to connect via the route it doesnt work:

telnet my.route.com 8080

Trying ... telnet: connect to address : Connection refused

When I use:

curl -kv my-svc.myproject.svc.cluster.local:8080

I can connect.

So it seems the service is working but the route is not.

I have been going through the troubleshooting guide on https://docs.openshift.org/3.6/admin_guide/sdn_troubleshooting.html#debugging-the-router

-- Magick
kubernetes
openshift
openshift-origin

2 Answers

10/4/2017

There are multiple things to check :

  • Is you route point to your service ? Here is a example :

    apiVersion: v1 kind: Route spec: host: my.route.com to: kind: Service name: yourservice weight: 100

    If it's not the case, the route and the service are not connected.

  • You can check the router configuration. Connect to your router with oc rsh and check if you find your route name in the /var/lib/haproxy/conf/haproxy.config (the backend name format should be backend be_http_NAMESPACE_ROUTENAME). The server part below the backend part should contains the ip of your pod (you can obtain your pod ip with oc get pods -o wide command).

    If it's not the case, the route is not registered in the router config. You can try to restart the router end recheck the haproxy.config file.

  • Can you connect to the pod ip from the router container ?

-- Nicolas Pepinster
Source: StackOverflow

10/12/2017

The router setups in OpenShift focus on HTTP/HTTPS(SNI)/TLS(SNI). However it appears that you can use an externalIP to expose non-web application ports from the cluster. Because gRPC is an over the wire protocol, you might need to go this path.

-- gregswift
Source: StackOverflow