grpc in k8s cannot resolve service dns name

5/6/2019

i am using node js trying to run grpc in kubernetes cluster env. localy without kubernetes its working fine.the server side is listening to : '0.0.0.0:80' and client tries to connect via: http://recommended-upgrades-qa-int. in the kuberenets i get the following error:

ERROR failed to get via grpc the getRecommended Error: 14 UNAVAILABLE: Connect Failed endpoint:http://<K8S_SERVICE_NAME>
ERROR: Recommendations fetch error: Error: 14 UNAVAILABLE: Connect Failed severity=error, message=failed to get via grpc the getRecommended Error: 14 UNAVAILABLE: Connect Failed endpoint:http://<K8S_SERVICE_NAME>

server side:

const connectionHost = this.listenHost + ':' + this.listenPort;
server.bind(connectionHost, grpc.ServerCredentials.createInsecure());
logger.info(`Server running at ${connectionHost}`);
server.start();

client side:

RecommendedService = grpc.load(__dirname + '/../../node_modules/@zerto/lib-service-clients/Output/sources/recommendedClient.proto').RecommendedService;
        } catch (error){
            console.log(error);
        }

        this.client = RecommendedService && new RecommendedService(grpcAddress, grpc.credentials.createInsecure());

manefist files:

server side

apiVersion: apps/v1
kind: Deployment
metadata:
  name: server-side-deployment
  namespace: default
spec:
  selector:
    matchLabels:
      app: server-side-deployment
  replicas: 1
  template:
    metadata:
      labels:
        app: server-side-deployment
    spec:
      containers:
      - name: server-side-deployment
        image: (DOCKER_IMAGE_PATH)
        imagePullPolicy: Always
        ports:
        - containerPort: 80

---
apiVersion: v1
kind: Service
metadata:
  name: recommended-upgrades-qa-int
  namespace: default
spec:
  selector:
      app: server-side-deployment
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
      name: http

client side

apiVersion: apps/v1
kind: Deployment
metadata:
  name: client-side-deployment
  namespace: default
spec:
  selector:
    matchLabels:
      app: client-side-deployment
  replicas: 1
  template:
    metadata:
      labels:
        app: client-side-deployment
    spec:
      containers:
      - name: client-side-deployment
        image: (DOCKER_IMAGE_PATH)
        imagePullPolicy: Always
        env:
          - name: RECOMANDED_SERVICE
            value: http://recommended-upgrades-qa-int
        ports:
        - containerPort: 80
-- Guy Barsade
grpc
kubernetes
node.js

2 Answers

5/7/2019

it seems we figure it out. first the url must contain port 80 also there was an inner uncaught exception in the server service which may caused it not to work. Thank you all

-- Guy Barsade
Source: StackOverflow

5/6/2019

From the docs:

“Normal” (not headless) Services are assigned a DNS A record for a name of the form my-svc.my-namespace.svc.cluster.local. This resolves to the cluster IP of the Service.

Your issue here is probably sing <service name> while your service is in another namespace. Try using:

<service name>.<service namespace>.svc.cluster.local
-- cookiedough
Source: StackOverflow