详情页标题前

腾讯云容器服务在 TKE 中获取客户端真实源 IP同尘科技

详情页1

说明本文适用于腾讯云容器服务(Tencent Kubernetes Engine ,TKE),以下简称 TKE。

应用场景

当需明确服务请求来源以满足业务需求时,则需后端服务能够准确获取请求客户端的真实源 IP。例如以下场景:具有对服务请求的来源进行审计的需求,例如异地登录告警。 具有针对安全攻击或安全事件溯源的需求,例如 APT 攻击及 DDoS 攻击等。 业务场景具有数据分析的需求,例如业务请求区域统计。 其他需获取客户端地址的需求。

实现方法

在 TKE 中默认的外部负载均衡器为 腾讯云负载均衡 作为服务流量的访问首入口,腾讯云负载均衡器会将请求流量负载转发到 Kubernetes 工作节点的 Kubernetes Service(默认)。此负载均衡过程会保留客户端真实源 IP(透传转发),但在 Kubernetes Service 转发场景下,无论使用 iptables 或 ipvs 的负载均衡转发模式,转发时都会对数据包做 SNAT,即不会保留客户端真实源 IP。在 TKE 使用场景下,本文提供以下四种方式获取客户端真实源 IP,请参考本文按需选择适用方式。

通过 Service 资源的配置选项保留客户端源 IP

该方式优缺点分析如下:优点:只需修改 Kubernetes Service 资源配置即可。 缺点:会存在潜在的 Pods(Endpoints)流量负载不均衡风险。如需启用保留客户端 IP 功能,可在 Service 资源中配置字段 Service.spec.externalTrafficPolicy。该字段表示服务是否希望将外部流量路由到节点本地或集群范围的 Pods。有两个选项值:Cluster(默认)和 Local 方式。如下图所示:

腾讯云容器服务在 TKE 中获取客户端真实源 IP同尘科技

Cluster:表示隐藏客户端源 IP,LoadBalancerNodePort 类型服务流量可能会被转发到其他节点的 Pods。 Local:表示保留客户端源 IP 并避免 LoadBalancerNodePort 类型的服务流量转发到其他节点的 Pods,详情请参考 Kubernetes 设置外部负载均衡器说明。相关 YAML 配置示例如下:

apiVersion: v1kind: Servicemetadata:  name: example-Servicespec:  selector:    app: example-Service  ports:  - port: 8765    targetPort: 9376  externalTrafficPolicy: Local  type: LoadBalancer

通过 TKE 原生 CLB 直通 Pod 转发模式获取

该方式优缺点分析如下:优点:为 TKE 原生支持的功能特性,只需在控制台参考对应文档配置即可。 缺点:集群需开启 VPC-CNI 网络模式,详情请参见 VPC-CNI 模式说明。使用 TKE 原生支持的 CLB 直通 Pod 的转发功能(CLB 透传转发,并绕过 Kubernetes Service 流量转发),后端 Pods 收到的请求的源 IP 即为客户端真实源 IP,此方式适用于四层及七层服务的转发场景。转发原理如下图:

腾讯云容器服务在 TKE 中获取客户端真实源 IP同尘科技


详细介绍和配置请参见 在 TKE 上使用负载均衡直通 Pod。

通过 HTTP Header 获取

该方式优缺点分析如下:优点:在七层(HTTP/HTTPS)流量转发场景下推荐选择该方式,可通过 Web 服务代理的配置或后端应用代码直接获取 HTTP Header 中的字段,即可拿到客户端真实源 IP,非常简单高效。 缺点:仅适用于七层(HTTP/HTTPS)流量转发场景,不适用于四层转发场景。在七层(HTTP/HTTPS)服务转发场景下,可以通过获取 HTTP Header 中 X-Forwarded-ForX-Real-IP 字段的值来获取客户端真实源 IP。TKE 中有两种场景使用方式,原理介绍图如下所示:

腾讯云容器服务在 TKE 中获取客户端真实源 IP同尘科技



场景一:使用 TKE Ingress 获取真实源 IP

腾讯云负载均衡器(CLB 七层) 默认会将客户端真实源 IP 放至 HTTP Header 的 X-Forwarded-ForX-Real-IP 字段。当服务流量在经过 Service 四层转发后会保留上述字段,后端通过 Web 服务器代理配置或应用代码方式获取到客户端真实源 IP,详情请参见 负载均衡如何获取客户端真实 IP。通过容器服务控制台 获取源 IP 步骤如下:1. 为工作负载创建一个主机端口访问方式的 Service 资源,本文以 nginx 为例。如下图所示:

腾讯云容器服务在 TKE 中获取客户端真实源 IP同尘科技

2. 为该 Service 创建一个对应的 Ingress 访问入口,本文以 test 为例。如下图所示:

腾讯云容器服务在 TKE 中获取客户端真实源 IP同尘科技

3. 待配置生效后,在后端通过获取 HTTP Header 中的 X-Forwarded-ForX-Real-IP 字段值得到客户端真实源 IP。后端抓包测试结果示例如下图所示:

腾讯云容器服务在 TKE 中获取客户端真实源 IP同尘科技



场景二:使用 Nginx Ingress 获取真实源 IP

Nginx Ingress 服务部署需要 Nginx Ingress 能直接感知客户端真实源 IP,可以采用保留客户端源 IP 的配置方式,详情请参见 Kubernetes 设置外部负载均衡器说明。或通过 CLB 直通 Pod 的方式,详情请参见 在 TKE 上使用负载均衡直通 Pod。当 Nginx Ingress 在转发请求时会通过 X-Forwarded-ForX-Real-IP 字段来记录客户端源 IP,后端可以通过此字段获得客户端真实源 IP。配置步骤如下:1. Nginx Ingress 可以通过 TKE 应用商店、自定义 YAML 配置或使用官方(helm 安装)方式安装,原理和部署方法请参见 在 TKE 上部署 Nginx Ingress 中的部署方案1或方案3。若选择方案1部署,则需要修改 Nginx Ingress Controller Service 的 externalTrafficPolicy 字段值为 Local 。安装完成后,会在容器服务控制台 自动为 Nginx Ingress Controller 服务创建一个 CLB(四层)访问入口,如下图所示:

腾讯云容器服务在 TKE 中获取客户端真实源 IP同尘科技

2. 为需转发的后端服务创建一个 Ingress 资源并配置转发规则。YAML 示例如下:

apiVersion: networking.k8s.io/v1beta1kind: Ingressmetadata:  annotations:    kubernetes.io/ingress.class: nginx  # ingressClass类为"nginx"  name: example  namespace: defaultspec:  rules:  # 配置服务转发规则  - http:     paths:       - backend:           serviceName: nginx             servicePort: 80         path: /

3. 待配置生效后,在后端获取 HTTP Header 中的 X-Forwarded-ForX-Real-IP 字段值得到客户端真实源 IP。后端抓包测试结果示例如下图所示:

腾讯云容器服务在 TKE 中获取客户端真实源 IP同尘科技



通过 TOA 内核模块加载获取真实源 IP

该方式优缺点分析如下:优点:对于 TCP 传输方式,在内核层面且仅对 TCP 连接的首包进行改造,几乎没有性能损耗。 缺点:需要在集群工作节点上加载 TOA 内核模块,且需在服务端通过函数调用获取携带的源 IP 及端口信息,配置使用较复杂。 对于 UDP 传输方式,会对每个数据包改造添加 option 数据(源 IP 和源端口),带来网络传输通道性能损耗。TOA 内核模块原理和加载方式请参见 获取访问用户真实 IP 文档。

相关文档

腾讯云负载均衡器获取客户端真实 IP 介绍:如何获取客户端真实 IP腾讯云负载均衡介绍:负载均衡 CLB在 TKE 上部署 Nginx IngressTKE 网络模式介绍:GlobalRouter 附加 VPC-CNI 模式说明在 TKE 上使用负载均衡直通 PodTOA 模块使用介绍:获取访问用户真实 IPKubernetes 设置外部负载均衡器说明:创建外部负载均衡器 Kubernetes
容器服务官网1折活动,限时活动,即将结束,速速收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利。同意关联立享优惠

转转请注明出处:https://www.yunxiaoer.com/148482.html

(0)
上一篇 2023年12月9日 下午12:56
下一篇 2023年12月9日
详情页2

相关推荐

  • 腾讯云对象存储COS Ranger 权限体系解决方案

    背景 Hadoop Ranger 权限体系是大数据场景下的权限解决方案。用户使用存算分离后,将数据托管在对象存储(Cloud Object Storage,COS)上。COS 使用的是腾讯云访问管理(Cloud Access Management,CAM)权限体系,无论是用户身份,权限策略等,都与本地 Hadoop Ranger 体系不同。为维持客户的使用习…

    2023年12月9日
  • 阿里云RDS数据库通过应用程序访问数据库-云淘科技

    本文介绍如何通过Java、Python或C的应用程序访问RDS数据库。 参数说明 示例代码中的参数说明如下。 参数 说明 Host RDS实例的内网地址或外网地址。 若您的客户端部署在ECS实例上,且ECS实例与要访问的RDS实例的地域、网络类型相同,请使用内网地址。例如ECS实例和RDS实例都是华东1的专有网络实例,使用内网地址连接能提供安全高效的访问。 …

    阿里云数据库 2023年12月9日
  • 腾讯云内容分发网络CDN缓存预热

    功能介绍 腾讯云 CDN 提供资源预热功能,可将指定资源主动从源站加载至 CDN 加速节点并缓存。当用户首次请求资源时,可直接从 CDN 加速节点获取缓存的资源,无需再次回源。注意节点预热时,若其缓存的同名资源尚未过期,则不会进行资源加载。建议在同名文件更新时,先进行全网刷新再提交预热。节点预热时,会回源拉取所需内容,因此提交大批量预热任务后,会造成源站带宽…

    2023年12月9日
  • 腾讯云对象存储任务回调

    功能说明 数据万象支持自定义设置回调 URL,在任务完成后,系统向该 URL 发送 HTTP POST 请求,请求体中包含通知内容。您可通过配置的回调地址及时了解任务处理的进展和状态,以便进行其他业务操作。 回调内容 任务完成后,系统会向您设置的回调地址发送回调内容,包含完整节点数据的内容展示如下: TaskFinish Success 2022-11-21…

    腾讯云 2023年12月9日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 腾讯云专属可用区(CDZ)产品优势云淘

    标准化快速交付 采用与腾讯云自有数据中心相同的采购及交付标准。具备快速交付、高性价比及软硬件高可靠性等特点。 用户独享云上资源 在专属可用区内,所有资源由用户独享,用户可以按需使用资源,满足与其他用户资源隔离的诉求。 支持指定机房位置 支持在用户机房建设专属可用区,可充分利用用户现有的机房运维能力,保障业务平稳运行。 完全一致的云体验 专属可用区提供与公有云…

    腾讯云 2023年12月9日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。