当前位置: 首页 > news >正文

K8S下http请求在ingress和nginx间无限循环的问题

现象

应用发布uat后,某个接口的请求一直报 400 Bad Request Request Header Or Cookie Too Large

排查过程

1 根据错误提示,按照网上的教程,在nginx的配置里增加对应的配置

    large_client_header_buffers 4 1M;client_header_buffer_size 10M;

2 重启nginx,再次请求,依然是这个报错,但是nginx的日志明显变长了
3 观察nginx的日志,发现最后一个变量$http_x_forwarded_for特别的不正常,十分的长。观察到请求在两个服务器之间不断的循环,一直到header的长度被撑爆。这两个服务器,一个是这台nginx本身,另一个是ingress controller。

4 查看对应的nginx的配置。proxy_pass转发到的是域名,这个域名是解析到了ingress controller 的ip上的

    location ~ ^/workflow-alogrithm/ {proxy_set_header Host $http_host;client_max_body_size 20M;proxy_set_header  X-Real-IP $http_x_forwarded_for;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass https://***-uat.***.com;}

5 由于配置了 proxy_set_header Host $http_host;,请求ingress的时候请求头Host携带的是这台nginx挂的域名,ingress转发的时候又会根据这个Host转发到我的这台nginx上,于是形成了一个无限循环。一直到X-Forwarded-For 变量的长度撑爆了请求头。PS, nginx是根据Host请求头来把请求路由到对应的server块的,参考nginx官方文档 https://nginx.org/en/docs/http/request_processing.html
6 proxy_set_header Host $http_host;去掉这个配置,重启。问题修复

K8S网络请求拓扑

在这里插入图片描述
ingress controller负责k8s外部流量到k8s内部流量的转发。ingress会根据host判断请求应该走哪个server(选择nginx作为ingress controller的情况下)。k8s内部服务之间的流量转发,推荐用service,别用dns解析到ingress的域名,避免导致无限循环,少一次网络转发,性能也更好。

http://www.lqws.cn/news/499321.html

相关文章:

  • 创建AWS Bedrock知识库及填坑指南
  • Python如何在解析 YAML 文件时保留每个条目的原始行号信息
  • Camera Sensor接口协议全解析(四)LVDS与SubLVDS接口及协议深度解析
  • Spring容器启动的关键一步:prepareBeanFactory详解
  • 如何制定团队制度?
  • OpenCV——霍夫变换
  • 首席运营官职责与工作内容概述
  • 秋招Day14 - MySQL - 事务
  • Redis哨兵模式深度解析与实战部署
  • 网页动画与交互性:开发者基础指南
  • 基于springboot+uniapp的“川味游”app的设计与实现7000字论文
  • 如何快速判断Excel文档是否被修改过?Excel多版本比对解决方案
  • 操作系统 第九章 部分
  • 线程池 JMM 内存模型
  • PySide环境配置及工具使用
  • 【题解-Acwing】1022. 宠物小精灵之收服
  • 技术逐梦之旅:从C语言到Vue的成长之路
  • LeetCode中K个链表的链接的解法
  • 108页精品PPT | 大型某著名企业能源行业数字化转型汇报方案能源化工数字化转型
  • AI-Sphere-Butler之如何将豆包桌面版对接到AI全能管家~新玩法(一)
  • Redis基本介绍
  • 词编码模型怎么进行训练的,输出输入是什么,标签是什么
  • leetcode:98. 验证二叉搜索树
  • oracle 表空间与实例妙用,解决业务存储与权限处理难题
  • 企业主动风险管理破局供应链“黑天鹅”,善用期货
  • C# Task 模式实现 Demo(含运行、暂停、结束状态)
  • Redis精简总结|一主二从哨兵模式(工作机制)|集群模式|缓存的穿透雪崩击穿
  • 以计数器程序为例,简析JVM内存模型中各部分的工作方式
  • 72-Oralce Temporay tablespace(单实例和多租户下的管理)
  • 互联网大数据求职面试:从Zookeeper到Flink的技术探讨