在通常的 AWS NLB 配置实践中,我们会先配置 ELB 目标组,注册好实例或 IP 后,再创建 NLB。
但我们发现越来越多用户反馈,在使用 NLB 时,按照最佳实践配置安全组:NLB 的安全组对公网开放,后端服务的安全组对内网开放。但还是访问后端服务不通。
在排查完安全组规则、路由表、侦听器端口、健康检查后,我们发现了问题的根源:ELB 目标组的 “保留客户端 IP 地址” 属性(参考下图)
关于此属性,查询 AWS Docs 后得到如下描述:
此时 NLB 和后端服务器的安全组配置就会引起用户的 Confuse,因为在此功能启用的时候,后端服务器会直接看到公网访问的原始 IP。如果此时后端服务器安全组还按照传统思路,只对 NLB 或 VPC 内网网段放开的话,会出现后端服务访问不通的情况。
并且由于以下这段设定,我们必须手动,在目标组创建完后将此属性禁用:
默认情况下,对于使用 UDP 和 TCP_UDP 协议的实例和 IP 类型目标组,客户端 IP 保留处于启用状态(且不能禁用)
如下架构图向我们展示了在 “保留客户端 IP 地址” 属性的不同状态下,如何配置 NLB 和后端服务器的安全组: