grpc в k8s не может разрешить имя DNS службы - PullRequest
0 голосов
/ 06 мая 2019

Я использую узел js, пытаясь запустить grpc в кластере kubernetes env.Локально без kubernetes работает нормально. Серверная сторона слушает: '0.0.0.0:80' и клиент пытается подключиться через: http://recommended -upgrades-qa-int .в куберенце я получаю следующую ошибку:

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>

на стороне сервера:

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

на стороне клиента:

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 файлы:

сторона сервера

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

сторона клиента

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

Ответы [ 2 ]

1 голос
/ 07 мая 2019

кажется, мы поняли это. Во-первых, URL-адрес должен содержать порт 80, и в службе сервера возникла внутренняя необработанная исключительная ситуация, которая могла привести к тому, что он не работал. Спасибо всем

1 голос
/ 06 мая 2019

Из документов :

«Обычные» (не без заголовка) Службам присваивается запись DNS A для имени в форме my-svc.my-namespace.svc.cluster.local. Это разрешает IP-адрес кластера службы.

Ваша проблема здесь, вероятно, в пении <service name>, пока ваш сервис находится в другом пространстве имен. Попробуйте использовать:

<service name>.<service namespace>.svc.cluster.local
...