问题描述
AWS ALB 根据此 Link
新增了对 gRPC 负载平衡的支持所有说明都表明在客户端和服务器之间使用 ssl 连接。现在,如果客户端是浏览器,这可能是必需的,但在内部 ALB 和内部服务通信的情况下,我不希望有安全连接。
这可能吗/有没有人有更多关于如何在没有 ssl 的情况下进行负载平衡的信息?
我的理解: 选择您的域名,生成证书。为此在 Route 53(相同域名)中添加别名并使用客户端和服务器中的证书在内部 ELB 中进行服务内通信。
这是唯一可能的方法吗?我还必须管理此证书。
解决方法
砰! ALB 支持 GRPC 请求的 TLS 终止需要什么配置?我更愿意避免防火墙/ALB 背后的加密开销。
Bloom RPC 产生此异常:
{ "error": "14 UNAVAILABLE: 无法连接到所有地址" }
GRPC 因此异常而失败:
2020-12-29 03:03:33.345 INFO 3719 --- [-worker-ELG-6-1] i.g.n.NettyServerTransport.connections:传输失败 12 月 29 日 03:03:33 ip-172-31-22-196 网络:io.netty.handler.codec.http2.Http2Exception:HTTP/2 客户端前言字符串丢失或损坏。接收字节的十六进制转储:16030100ac010000a80303496e418aff3efff4c9244b9ae2
,尝试了很多东西后,这是我的结论。
- 您不能向 AWS ALB 发出不安全的 gRPC 请求。
- 您可以从 AWS ALB 向目标组发出不安全的 gRPC 请求。
所需步骤:
服务器端: 不需要 SSL。您可以在不安全的通道上启动服务器。
客户端:
ssl 是必需的。
new ClientClass(<Route 53 endpoint which maps to AWS ALB Endpoint>,credentials.createSsl());
确保 AWS ALB 上的证书与 aws alb 的 Route 53 别名端点匹配。
结论: 客户端通过 ALB 颁发给客户端的证书向 ALB 发出请求。 ALB 向 TG 发出不安全的请求(转发到在不安全通道上侦听的服务器) ) 您还可以将 ALB 到 TG 请求设为安全,这将更改服务器端 SSL