适用范围:腾讯云容器服务(Tencent Kubernetes Engine ,TKE), 以下简称 TKE。
为什么需要获取客户端真实源 IP?
当需要能感知到服务请求来源去满足一些业务需求时,就需要后端服务能准确获取到请求客户端的真实源 IP, 比如以下场景:
- 对服务请求的来源有做审计的需求,如异地登陆告警。
- 针对安全攻击或安全事件溯源需求,如 APT 攻击、DDoS 攻击等。
- 业务场景数据分析需求,如业务请求区域统计。
- 其他需要获取客户端地址的需求。
在 TKE 使用场景下如何获取客户端真实源 IP?
在TKE中默认的外部负载均衡器是 腾讯云负载均衡器,作为服务流量的访问首入口,腾讯云负载均衡器会将请求流量负载转发到 Kubernetes 工作节点的 Kubernets Service(默认),此负载均衡过程会保留客户端真实源 IP(透传转发),但在 Kubernetes Service 转发场景下,无论是使用 iptbales 还是 ipvs 的负载均衡转发模式,转发时都会对数据包做 SNAT,即不会保留客户端真实源 IP,为了能够准确的获取到客户端的真实源 IP,在 TKE 使用场景下,主要有四种方法获取客户端真实源 IP,下面将逐个展开介绍下。
一、通过 Service 资源的配置选项保留客户端源 IP
要启用保留客户端 IP 功能,可在 Service 资源中配置字段 Service.spec.externalTrafficPolicy
,此字段表示服务是否希望将外部流量路由到节点本地或集群范围的端点。有两个选项值:Cluster
(默认)和 Local
方式,如下图所示:
Cluster
表示隐藏了客户端源 IP, LoadBalancer
和 NodePort
类型服务流量可能会被转发到其他节点的 Pods; Local
表示保留客户端源 IP 并避免 LoadBalancer
和 NodePort
类型的服务流量转发到其他节点的 Pods,详情请参考