当前位置: 首页 > 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.lryc.cn/news/574395.html

相关文章:

  • 【第二章:机器学习与神经网络概述】03.类算法理论与实践-(1)逻辑回归(Logistic Regression)
  • Threejs实现 3D 看房效果
  • 基于java SSM的房屋租赁系统设计和实现
  • 操作系统 第九章 部分
  • 线程池 JMM 内存模型
  • MySQL 8.x配置MGR高可用+ProxySQL读写分离(二):ProxySQL配置MySQL代理及读写分离
  • Web中的会话控制
  • 【25】木材表面缺陷数据集(有v5/v8模型)/YOLO木材表面缺陷检测
  • python3字典
  • Docker 永久换源步骤
  • leetcode:98. 验证二叉搜索树
  • 大厂Java面试喜剧:谢飞机的奇幻之旅
  • 工业级无人机电调设计典范:南昌长空 ROCK 320A-H 技术参数详解
  • 使用Windows自带的WSL安装Ubuntu Linux系统
  • 60天python训练计划----day56
  • Java SE - 图书管理系统模拟实现
  • 【计算复杂度】普通卷积 VS 深度可分离卷积
  • react 的过渡动画
  • Redis基本介绍
  • 通过审计日志分析和摘要利用大型语言模型进行网络攻击检测
  • /var/lib/docker/overlay2目录过大怎么办
  • 项目上线(若依前后分离版)
  • MATLAB GUI界面设计 第三章——仪器组件
  • 【无刷电机FOC进阶基础准备】【04 clark变换、park变换、等幅值变换】
  • MultipartFile、File 和 Mat
  • 从0开始学习R语言--Day30--函数型分析
  • SQL Server2022版详细安装教程(Windows)
  • 63-差分电流检测电路
  • 【Verilog】Verilator的TestBench该用C++还是SystemC
  • docker方式启动Jenkins