1. listio有两种代理模式,REDIRECT和TPROXY。如果想配置,可以参考:
Sidecar 的注入与透明流量劫持,里面也详细讲解了使用时的性能问题等方面
2. REDIRECT其实对http请求来说,是足够的。因为lstio会在header头X-Forwarded-For设置src的ip地址。
3. 需知道。listio其实有两种部署使用情况,一种时当作sidecar。另外一种是直接当作loadbalance单独部署的。
如果从外部直连sidecar的使用来考虑,其实使用iptables结合mark的功能就足够了。
但是如果当作单独loadbalance(不是作为side-car部署),或者其实是从loadbalance过来的,其实ip地址已经被lb给改掉了。
因为side-car部署的时候,因为tproxy没有更改srcip,然后在listio发送给本机的dst程序时,因为使用的是ip_transparent,可以指定srcip。指定srcip还是original_src_ip。因此则种情况下无需使用到Proxy Protocol
此时需要代码能支持Proxy Protocol才可能在tcp的lb上获取到src的ip地址。
因此,这也是listio的TPROXY模式支持Proxy Protocol的原因。而且这样的话,其实业务代码也需要支持Proxy Protocol,才能获取到原始ip地址
4. Istio 中实现客户端源 IP 的保持 - 腾讯云原生 - 博客园
5. https://juejin.cn/post/7395189356671549480
5.1 结合:Istio的流量劫持和Linux下透明代理实现 | C0reFast记事本来看
4和5解释了底层实现原因和为什么
6. 负载均衡负载均衡-获取真实源IP地址获取ip的办法
7. lstio 可以从Istio / Demystifying Istio's Sidecar Injection Model看到,使用init方式初始化lstio的时候,是可以配置透明代理的模式是redirect还是tproxy的。和1相对应起来
8.但是lstio现在推荐使用lstio cni进行安装。而不是用init初始化方式安装。此时配置redirect还是tproxy的方法是:
https://istio.io/latest/docs/setup/additional-setup/cni/
这里面写的IstioOperator对应的spec下的内容不全。
从https://istio.io/latest/docs/setup/additional-setup/cni/可知IstioOperator下只有几个element。
但是其实不是的。从Istio / IstioOperator Options可以知道IstioOperator类型的spec下可以有meshConfig这个element。
meshConfig这个element下有的元素要到Istio / Global Mesh Options找。这里面有interceptionMode。类型可以是REDIRECT/TPROXY。
也就是在meshConfig.defaultConfig.interceptionModd中写好。用cni进行安装
9.如果是http。其实设置http_proxy/https_proxy环境变量,就可以做到linux下的http代理
10.使用Nginx进行SNI分流并完美和网站共存 - Xiaomage's Blog
后端nginx使用set_real_ip_from获取用户真实IP_set real ip from-CSDN博客
可以学习到nginx可以通过配置set_real_ip_from和real_ip_header。通过proxy协议获取来源的ip地址