在容器服务中获取客户端真实源 IP

本文详细介绍了在腾讯云容器服务TKE中获取客户端真实源IP的四种方法:通过Service资源配置、TKE原生CLB直通Pod、HTTP Header以及TOA内核模块。这些方法各有优缺点,适用于不同的业务需求和网络环境,以帮助满足审计、安全和数据分析等场景。
摘要由CSDN通过智能技术生成

适用范围:腾讯云容器服务(Tencent Kubernetes Engine ,TKE), 以下简称 TKE。

为什么需要获取客户端真实源 IP?

当需要能感知到服务请求来源去满足一些业务需求时,就需要后端服务能准确获取到请求客户端的真实源 IP, 比如以下场景:

  1. 对服务请求的来源有做审计的需求,如异地登陆告警。
  2. 针对安全攻击或安全事件溯源需求,如 APT 攻击、DDoS 攻击等。
  3. 业务场景数据分析需求,如业务请求区域统计。
  4. 其他需要获取客户端地址的需求。

在 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 方式,如下图所示:

img

Cluster 表示隐藏了客户端源 IP, LoadBalancerNodePort 类型服务流量可能会被转发到其他节点的 Pods; Local 表示保留客户端源 IP 并避免 LoadBalancerNodePort 类型的服务流量转发到其他节点的 Pods,详情请参考

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker容器运行Node服务时,容器内部的IP地址与主机上的IP地址是不同的。默认情况下,Docker会为每个容器分配一个唯一的IP地址,而这个IP地址通常是在`172.17.0.0/16`网段内。因此,在Node服务获取IP地址时,会返回容器内部的IP地址,而不是主机上的IP地址。 如果你在Docker容器运行Node服务,并且希望在服务获取主机的IP地址,可以使用以下方法: 1. 在运行Docker容器时,使用`--network="host"`参数将容器与主机共享网络。例如,使用以下命令运行Docker容器: ``` docker run --network="host" your-image-name ``` 2. 在Node服务,使用`require('os').networkInterfaces()`获取主机上的网络接口信息,然后从找到与容器共享网络的接口,获取该接口的IP地址即可。例如,使用以下代码获取容器共享网络的接口的IP地址: ```js const os = require('os'); const interfaces = os.networkInterfaces(); const interfaceName = Object.keys(interfaces).find(iface => { return interfaces[iface].some(addr => { return addr.address.startsWith('172.17.'); }); }); const ip = interfaces[interfaceName][0].address; ``` 这样就可以获取到主机的IP地址,而不是容器内部的IP地址了。需要注意的是,使用`--network="host"`参数会使容器与主机共享网络命名空间,因此容器运行的服务将能够访问主机上的所有端口,但也可能存在一些安全风险,需要谨慎使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值