istio下游的服务无法获取client来源IP

在Kubernetes中,使用Istio时发现下游服务无法获取客户端的真实IP,表现为日志显示NodeIP而非客户端IP。问题出现在NodePort类型的流量过程中,客户端IP在经过节点时被替换。解决方案是通过设置Istio ingress gateway服务的spec.externalTrafficPolicy为Local,以保持源IP地址不变。参照Kubernetes官方文档进行配置可解决此问题。
摘要由CSDN通过智能技术生成

问题描述

查看Tomcat或Nginx日志时候,发现日志来源IP均为Node节点IP,无法得到真实请求IP

访问流程如下

Type=NodePort:

          client
             \ ^
              \ \
               v \
   node 1 <--- node 2
    | ^   SNAT
    | |   --->
    v |
 endpoint
  1. 客户端发送 tcp 包 到 node2:nodePort
  2. node2 把客户端源ip地址替换为node2 的ip地址
  3. node2 把请求的目的地ip替换为 pod ip
  4. tcp包被路由到 node1, 接着达到 endpoint(如service)
  5. pod的响应被路由到 node2
  6. node2把pod的响应发送给客户端

        期间客户端的源IP地址丢失(2步)

Type=LoadBalancer

                      client
                        |
                      lb VIP
                     / ^
                    v /
health check --->   node 1   node 2 <--- health check
        200  <---   ^ |             ---> 500
                    | V
                 e
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值