我正在使用节点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,也必须在服务器服务中有一个内部未知的例外,这可能导致其无法正常工作。谢谢大家