从根本上解决连接问题"/>
如何从根本上解决连接问题
我有一个问题,想深入挖掘以了解根本原因:
service-A 在一个 k8s pod (node.js) 中运行,该 pod 使用 gPRC 客户端连接 service-B(C++、gRpc 服务器),并使用服务名称进行连接。这两个服务都是使用 k8s 规范中的 NodePort 类型定义的。
[问题]
一切正常,但有时当服务 B 重新启动(崩溃)时,连接不再工作,直到我手动重新启动服务 A,它才再次工作。是的,有时候,有时候,当service-B重新启动时,连接仍然可以工作。
显然,这个问题不会让我睡觉,因为我们无法保证 service-B 不会重新启动/崩溃。
我有一些想法,但无法判断哪个更有可能是问题所在。
- 是否是因为gRpc客户端没有重新解析DNS名称(服务名称)?
- 是因为与旧pod的连接还没有关闭吗?
- 我是否错过了任何处理此类情况的 gRPC 客户端选项?
- 我是否误用了服务类型 - 我应该使用无头服务而不是 NodePort?
由于有很多部分,我仍然没有很好的图片来正确调试这个问题,非常感谢您的意见。
参考:
- gRpc 客户端
const serviceAddr = 'nebula:9190';
const cred = nebula.grpc.credentials.createInsecure();
const options = {
nebula: 'node',
'grpc.max_receive_message_length': MESSAGE_LENGTH,
'grpc.max_send_message_length': MESSAGE_LENGTH,
'grpc.min_reconnect_backoff_ms': MIN_RECONNECT_BACKOFF_MS,
'grpc.max_reconnect_backoff_ms': MAX_RECONNECT_BACKOFF_MS,
};
const makeClient = () => new nebula.V1Client(serviceAddr, cred, options);
- K8s规格
apiVersion: v1
kind: Service
metadata:
name: nebula
spec:
type: NodePort
selector:
app: nebula-server
ports:
- port: 9190
name: server
targetPort: 9190
回答如下:
更多推荐
如何从根本上解决连接问题
发布评论