K8中的GRPC无法解决服务DNS名称



我正在使用节点JS,试图在kubernetes cluster env中运行GRPC。没有Kubernetes的Localy工作正常。服务器方正在收听:'0.0.0.0:80'和客户端试图通过以下方式连接:http://fuseedend-upgrades-qa-int。在Kuberenets中,我会收到以下错误:

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

来自文档:

"正常"(不是无头(服务分配了DNS的DNS记录my-svc.my-namespace.svc.cluster.local。这将解决到服务的集群IP。

您的问题可能是唱<service name>,而您的服务在另一个名称空间中。尝试使用:

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

似乎我们已经弄清楚了。首先,URL必须包含端口80,也必须在服务器服务中有一个内部未知的例外,这可能导致其无法正常工作。谢谢大家

最新更新