amazon-web-services - AWS NLB 是否在终止 TLS 时传递 SNI 值?(通过 SNI 路由)
问题描述
AWS 网络负载均衡器支持 TLS 终止。这意味着可以在 AWS Certificate Manager 中创建证书并将其安装到 NLB,然后使用 TLS 加密的 TCP 连接将在 NLB 处解密,然后重新加密或传递给未加密的侦听器。详细信息在这里:https ://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-tls-listener.html 。
使用 AWS Certificate Manager 的好处是证书将由 AWS 自动管理和轮换。无需将面向公众的证书放在私有实例上。
我想根据 SNI 将 TCP 连接路由到 NLB,即可以根据客户端请求的服务器名称将到相同端口和 IP 的连接路由到不同的目标。虽然我可以看到使用 SNI支持给定侦听器的多个 TLS 证书来确定要提供哪个证书,但我看不到如何基于 SNI 配置侦听器。
因此,我将 HAProxy 放在 NLB 后面,并希望使用 SNI 路由到不同的后端。我在 NLB 与客户端终止 TLS,使用 HAProxy 上的自签名证书重新加密 NLB 和 HAProxy 之间的流量,然后使用未加密的 TCP 路由到后端。
(client) --TLS/TCP--> (NLB on port 443) --TLS/TCP--> (AWS target group on port 5000, running HAProxy) --TCP--> backends on different IPs/ports
AWS NLB 是否将 SNI 详细信息传递给目标组?
如果我直接连接到 HAProxy(不是通过 NLB),那么我可以使用 SNI 路由到选择的后端,但是如果我通过 NLB 连接,我无法让 SNI 路由工作。
解决方案
根据这个 SO answer和istio docs,如果您在负载均衡器上终止 TLS,它不会将 SNI 传送到目标组。我遇到了完全相同的问题,我最终通过将主机设置为'*'
入口Gateway
然后在不同的 s 上指定主机来解决它(如此处VirtualService
推荐)。
我认为这个解决方案也可以工作,但没有尝试过。您必须在 istio Gateway
secret 上设置证书并在 NLB 上进行 TLS 传递,但是您不能使用AWS ACM SSL certificates
上一个链接中指出的。
推荐阅读
- visual-studio-code - 如何更改vscode的代码注释设置
- android - 在 android 中向 wowza 直播视频广播添加短信
- php - Google people API V1 扩展属性
- python - 使用 pyarrow 在 Amazon S3 上打开 parquet 文件时出错
- python - Google Drive API - 如何正确处理多线程和文件夹创建?
- kotlin - 如何在 Kotlin 中内联扩展函数的接收器参数?
- c# - 如何在起订量中使用设置方法?
- macos - 如何在 OSX 中批量重命名文件夹?
- intellij-idea - 我如何在 intellij 中使用流口水
- python - 学位、亲近和等级声望