所以我有这样的设置:
AWS NLB(向前)-> Istio-> Nginx窗格
现在,我正在尝试在Istio层实施速率限制。我点击了this链接。但是,我仍然可以请求比配置更多的API。查看更多内容,我在Nginx中记录了X-Forwarded-For标头,它为空。
因此,当我使用NLB时如何在Istio中获得客户端IP? NLB转发客户端IP,但是如何?在标题中?
编辑:
Istio版本:1.2.5
istio-ingressgateway被配置为NodePort类型。
根据有关网络负载平衡器的AWS documentation:
网络负载平衡器在开放系统互连(OSI)模型的第四层起作用。它每秒可以处理数百万个请求。负载均衡器收到连接请求后,它将从目标组中选择一个目标作为默认规则。它尝试在侦听器配置中指定的端口上打开到所选目标的TCP连接。
...
创建目标组时,请指定其目标类型,该类型决定是通过实例ID还是IP地址注册目标。如果按实例ID注册目标,则客户端的源IP地址将保留并提供给您的应用程序。如果通过IP地址注册目标,则源IP地址是负载均衡器节点的专用IP地址。
使用NLB时,有两种保留客户端IP地址的方法:
1 .: NLB将客户端IP地址保留在源地址中通过实例ID注册目标时。
因此,客户端IP地址仅在特定的NLB配置中可用。您可以在aws documentation中阅读有关目标组的更多信息。
2 .:代理协议标头。
可以用来发送其他数据,例如标头中的源IP地址。即使您通过IP地址指定目标。
您可以按照aws documentation的指南和示例来配置代理协议。
要使用控制台启用代理协议
在https://console.aws.amazon.com/ec2/打开Amazon EC2控制台。
在导航窗格的LOAD BALANCING下,选择Target Groups。
选择目标组。
选择描述,编辑属性。
选择启用代理协议v2,然后选择保存。