【问题标题】:Connect to gRPC server running on different pod连接到在不同 pod 上运行的 gRPC 服务器
【发布时间】:2020-02-02 17:51:21
【问题描述】:

我有一个 gRPC 客户端和服务器在我的本地运行,我可以通过 localhost 通过 HTTP2 通过它们进行通信。 但是当应用程序使用 Kubernetes 和 Docker 部署在开发环境中时,我无法从客户端应用程序调用 gRPC 服务器。

我使用此代码连接到客户端:

ManagedChannel managedChannel = ManagedChannelBuilder.forAddress(host, port).usePlaintext().build();

在开发中: 这是我来自服务器应用程序的 application.yml。

grpc:
  port: 6565
  enabled: true

我的 gRPC 服务器在端口 6565 上运行,所以我也在客户端 application.yml 上更改了以下内容

taxgRPC:
  host: bpstax-ws.g-dev4.svc.rnq.k8s.copart.com
  port: 6565  

当我的客户端调用服务器时,服务器没有收到任何传入请求,客户端失败并给出以下异常:

Caused by: io.grpc.netty.shaded.io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information: bpstax-ws.g-dev4.svc.rnq.k8s.copart.com/10.148.2.194:6565

当我登录到特定的开发 pod 时,我可以看到正在侦听 gRPC 服务器的端口。

[dedas@rndcks401 ~]$ kubectl exec -ti bpstax-g-dev4-v029-74mj2 -n g-dev4 -- bash
bash-4.1$ netstat -tlnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
tcp        0      0 0.0.0.0:6565                0.0.0.0:*                   LISTEN      1/java
tcp        0      0 0.0.0.0:38957               0.0.0.0:*                   LISTEN      1/java
tcp        0      0 0.0.0.0:8080                0.0.0.0:*                   LISTEN      1/java
tcp        0      0 0.0.0.0:8081                0.0.0.0:*                   LISTEN      1/java

我需要一些有关如何连接到此 gRPC 服务器的帮助。 如果需要任何说明/代码,请告诉我。

【问题讨论】:

  • 你找到这个问题的答案了吗??

标签: java spring-boot docker grpc grpc-java


【解决方案1】:

我猜你必须为你的 gRPC 客户端提供一个正确的主机。在您的 k8s 环境中,发现服务器 pod 的 IP 地址的最佳方式是 headless service

示例定义:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: server
  name: server-headless
  namespace: <YOUR_NAMESPACE>
spec:
  clusterIP: None
  ports:
  - name: tcp
    port: 6565
    protocol: TCP
    targetPort: 6565
  selector:
    app: <SERVER_POD_LABEL>
  type: ClusterIP

为您的服务器应用程序提供无头服务,您可以将服务的 FQDN 用作主机。这样您就可以确保服务的 FQDN 始终解析为正确的 pod 的 ip/s。

【讨论】:

  • 我已添加端口 6565 并使其无头。那么现在我的服务器主机名应该是什么?应该是k8s的服务名吗?
  • 当我执行kubectl describe pods 时,端口 6565 显示在 TCP 下,但是当我为 6565 执行 telnet 时,它没有响应。我在这里错过了什么?
  • telnet bpstax-ws.g-dev4.svc.rnq.k8s.copart.com 6565
猜你喜欢
  • 2021-11-12
  • 2019-09-09
  • 1970-01-01
  • 2019-07-12
  • 2021-07-16
  • 2017-10-10
  • 2013-01-06
  • 1970-01-01
相关资源
最近更新 更多