Eswlnk Blog Eswlnk Blog
  • 资源
    • 精彩视频
    • 破解专区
      • WHMCS
      • WordPress主题
      • WordPress插件
    • 其他分享
    • 极惠VPS
    • PDF资源
  • 关于我
    • 论文阅读
    • 关于本站
    • 通知
    • 左邻右舍
    • 玩物志趣
    • 日志
    • 专题
  • 热议话题
    • 游戏资讯
  • 红黑
    • 渗透分析
    • 攻防对抗
    • 代码发布
  • 自主研发
    • 知识库
    • 插件
      • ToolBox
      • HotSpot AI 热点创作
    • 区块
    • 快乐屋
    • 卡密
  • 乱步
    • 文章榜单
    • 热门标签
  • 问答中心反馈
  • 注册
  • 登录
首页 › 代码发布 › 「代码发布」k8s 网络转发问题记录

「代码发布」k8s 网络转发问题记录

Eswlnk的头像
Eswlnk
2022-08-16 16:16:25
「代码发布」k8s 网络转发问题记录-Eswlnk Blog
智能摘要 AI
文章讨论了在Kubernetes集群中,使用NodePort类型的Service时,公网请求的源IP地址丢失的问题。分析发现,这是由于K8s自带负载均衡转发导致的。文中提到`externalTrafficPolicy`参数,其值可设为`Local`或`Cluster`。当设置为`Local`时,请求仅转发至拥有目标Pod的节点,从而保留源IP;而设置为`Cluster`时,请求可能在不同节点间转发,导致源IP丢失。总结指出,使用`Local`模式可有效保留客户端的真实IP地址,避免信息丢失。

问题概述

环境:内网服务器k8s上部署了服务端、openresty前端,通过公网服务器转发到内网的nginx对应端口。

问题:公网ip进行发送请求,后端拿取请求头源IP地址丢失。

思考:考虑是k8s 自带负载均衡进行了转发到不同的Node。

对于NodePort 类型的 service 而言,有一个参数是 externalTrafficPolicy=Local

附: 官方文档

即 service.spec.externalTrafficPolicy=Local

刚好最近机缘巧合之下对这个参数了解了一下,于是把我的个人理解写在这里,分享给大家

前言

对于Service, 如果指定类型为 NodePort, 那么这个端口会在集群的所有 Node 上打开,即使这个Node 上面没有这个pod
(很好理解,和守护进程集不一样,对于Deployment 来说,很少会在每个节点上都启动pod,所以必定有一些节点上没有这个pod)

引出一个问题,当某个节点上没有pod的时候,又去访问ta的这个NodePort,能访问到吗?

答案是可以的。

流程1:(使用cluster)

          client
              \ ^
               \ \
                v \
   node 1 <--- node 2
    | ^   SNAT
    | |   --->
    v |
 endpoint

externalTrafficPolicy使用Cluster 网络流程:

Client 发送TCP 包到node2:nodeport

node2 将Client 源IP 地址进行替换为node2 的IP 地址

node2 将请求目的地ip替换为podIP

tcp包被路由到node1,然后到达endpoint

pod实际响应被路由到node2

node2把pod的响应在转发给客户端

在中间相当于在node2中进行了网络转换,源ip信息被遗失掉了。

流程2:(使用Local)

在k8s 中,提供了保留源IP 信息的功能,即设置externalTrafficPolicy=Local

为Local时的网络流程

        client
        ^ /   \
       / /     \
      / v       X
   node 1     node 2
    ^ |
    | |
    | v
 endpoint

client sends packet to node2:nodePort, which doesn’t have any endpoints
客户端发送tcp包到 node2:nodePort, 但是 node2 并没有 这个pod

packet is dropped
tcp包被丢弃client sends packet to node1:nodePort, which does have endpoints
客户端发送数据包到 node1:nodePort, node1有pod

node1 routes packet to endpoint with the correct source IP
node1 把包路由到对应的pod,那么pod 就可以拿到正确的客户端源IP地址

总结

即使用Local模式,在请求过来的时候,如果node没有对应pod,则会将tcp的包丢弃掉。

而Cluster模式则会进行内部路由,内部转发请求到对应node 的pod 上。

ESWINK , 版权所有丨如未注明 , 均为原创

原文标题:「代码发布」k8s 网络转发问题记录

「代码发布」k8s 网络转发问题记录-Eswlnk Blog
本站默认网盘访问密码:1166
本站默认网盘访问密码:1166
k8spod
1
0
Eswlnk的头像
Eswlnk
一个有点倒霉的研究牲站长
赞赏
「代码发布」Wegt执行错误指令不存在的解决办法
上一篇
「代码发布」MapStruct 拷贝类属性
下一篇

评论 (0)

请登录以参与评论
现在登录
    发表评论

猜你喜欢

  • 「日志记录」逆向必应翻译网页版API实现免费调用
  • 「代码分享」第三方平台VIP视频解析API接口
  • 「至臻原创」某系统网站登录功能监测
  • 「开发日志」在Vue3中如何为路由Query参数标注类型
  • 「其他分享」分享一个在Tun模式下可用的脚本
Eswlnk的头像

Eswlnk

一个有点倒霉的研究牲站长
1108
文章
319
评论
679
获赞

随便看看

wordpress网站优化之美化文章页列表框
2021-06-10 0:52:37
torch.autograd.Function 用法及注意事项
2022-08-02 23:40:40
「运维分享」Linux性能测试一键脚本,助力服务器优化!
2023-09-07 10:55:45

文章目录

专题展示

WordPress53

工程实践37

热门标签

360 AI API CDN java linux Nginx PDF PHP python SEO Windows WordPress 云服务器 云服务器知识 代码 免费 安全 安卓 工具 开发日志 微信 微软 手机 插件 攻防 攻防对抗 教程 日志 渗透分析 源码 漏洞 电脑 破解 系统 编程 网站优化 网络 网络安全 脚本 苹果 谷歌 软件 运维 逆向
  • 首页
  • 知识库
  • 地图
Copyright © 2023-2025 Eswlnk Blog. Designed by XiaoWu.
本站CDN由 壹盾安全 提供高防CDN安全防护服务
蜀ICP备20002650号-10
页面生成用时 0.652 秒   |  SQL查询 33 次
本站勉强运行:
友情链接: Eswlnk Blog 网站渗透 倦意博客 特资啦!个人资源分享站 祭夜博客 iBAAO壹宝头条
  • WordPress142
  • 网络安全64
  • 漏洞52
  • 软件52
  • 安全48
现在登录
  • 资源
    • 精彩视频
    • 破解专区
      • WHMCS
      • WordPress主题
      • WordPress插件
    • 其他分享
    • 极惠VPS
    • PDF资源
  • 关于我
    • 论文阅读
    • 关于本站
    • 通知
    • 左邻右舍
    • 玩物志趣
    • 日志
    • 专题
  • 热议话题
    • 游戏资讯
  • 红黑
    • 渗透分析
    • 攻防对抗
    • 代码发布
  • 自主研发
    • 知识库
    • 插件
      • ToolBox
      • HotSpot AI 热点创作
    • 区块
    • 快乐屋
    • 卡密
  • 乱步
    • 文章榜单
    • 热门标签
  • 问答中心反馈