【问题标题】:Is it possible to directly connect a grpc client through L4 LB with GKE without ESP?是否可以在没有 ESP 的情况下通过 L4 LB 与 GKE 直接连接 grpc 客户端?
【发布时间】:2020-08-20 08:40:41
【问题描述】:

我尝试用 GKE 做的是:

GRPC 客户端 -> L4 LB -> GRPC 服务器(在 pod 内)

我尝试在客户端收到“连接被拒绝”。

它适用于 ESPv1(可扩展服务代理 - 使用 nginx 的谷歌端点组件)。

我想知道是否有人成功地这样做了,或者您是否解释了为什么没有 ESP 就无法工作。

如果需要,我可以发布我的配置。


更新

已提出使用 nginx 的解决方案。 ESP 也包括一个 nginx,所以我想知道是否可以避免使用 nginx 或任何代理/反向代理,如果没有,为什么?

nginx 做了什么来使 grpc 连接正常工作?

【问题讨论】:

  • 您是否尝试在您的 GRPC 服务器上使用tcpdump 对其进行调查?它可能会告诉你很多关于连接被拒绝的原因。
  • @mario 是的,我做了,但我要仔细检查。我猜如果有流量,应该来自L4 LB吧?
  • 是的,我想是的。

标签: google-kubernetes-engine grpc


【解决方案1】:

它应该(!?)在没有代理的情况下工作。我相信我已经做到了,但我找不到我写的与你分享的博客文章。我不记得为什么 L4 LB 不起作用的明显原因(由于 HTTP/2,L7 是一个不同的故事)。

对使用 NGINX 没有任何要求;最新版本的 ESP(与 Google 的许多其他代理一样)现在使用 Envoy。

您可以直接连接到服务的 pod 之一吗?您可以尝试 kubectl port-forward 到 pod,然后直接从客户端使用该端点:端口。

您可能希望使用grpcurl 来避免使用您的客户端进行测试。

当然,使用 L4 负载平衡器不会为您提供 gRPC 负载平衡。

【讨论】:

  • 其实我尝试了远程呈现,它类似于端口转发。它就是这样工作的。目前,我从外部在端口 443 上获得了 connection_refused。我还注意到 L4 实际上通过连接到一个随机 pod 给了我负载平衡。之后,连接仍然在该 pod 上,这很好
  • 我也使用使用 nginx 的 Espv1。
  • :443 建议使用 TLS,这可能有问题。 ESP 终止了 TLS 连接,但 L4 没有(据我所知)。你问你是否可以放弃 ESP,我认为你可以。我现在要尝试测试一下。
  • 实际上我将 TLS 终端移动到了 pod 内的 GRPC 服务器。它适用于远程呈现,但不适用于 GKE。这不是 mTLS,只是 TLS,带有域证书。
  • 嗯...我创建了一个不安全的服务,它通过 L4 运行。如果我能抽出更多时间,我会尝试保护服务。
猜你喜欢
  • 2020-10-25
  • 1970-01-01
  • 2011-12-22
  • 1970-01-01
  • 2013-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多