阿里云ACK的kubernetes集群业务访问提示 414 Request-URI Too Large

一.故障现象

公司的业务系统访问提示报414 Request-URI Too Large

阿里云ACK的kubernetes集群业务访问提示 414 Request-URI Too Large_第1张图片

二.故障原因排查

出现问题的服务是通过阿里云的ACK的kubernnetes集群ingress控制器转发的,使用的镜像是aliyun-ingress-controller:v0.30.0.1,ingress-controller底层是nginx,通过抓包分析定位414返回码为ingress-controller返回。

通过网上查找Nginx 414 Request-URI Too Large报错解决方法,思路如下:

1.原因:当请求头过大时,超过large_client_header_buffer时,nginx可能返回"Request URI too large" (414)或者"Bad-request"(400)错误,请求投中最长的一行也要小于large_client_header_buffer,当不是Request line的最长行大于一个buffer(128k)时,会返回"Bad-request"(400)错误

2.解决方法:在nginx.conf的http段中加入以下参数:

client_header_buffer_size 512k;
large_client_header_buffers 4 512k;
client_max_body_size 100m;

三.最终解决办法

尝试配置client_header_buffer_size,large_client_header_buffers,client_max_body_size 100m;到nginx-ingress-controller的configmap,configmap的名称是nginx-configuration,命名空间在kube-system(根据安装的ingress控制器所在的命名空间不同而不同)

client_header_buffer_size 和large_client_header_buffers必须配置到nginx-ingress-controller的configmap里面,进而注入到nginx.conf里面的http配置段覆盖默认值

默认值如下:

 client_header_buffer_size       1k;
 client_header_timeout           60s;
 large_client_header_buffers     4 8k;
 client_body_buffer_size         8k;
 client_body_timeout             60s;

client_header_buffer_size 和large_client_header_buffers配置到nginx-ingress-controller的configmap里面时,下划线必须改成中划线,即为client-header-buffer-size、large-client-header-buffers。

在阿里云图形化界面配置如下

阿里云ACK的kubernetes集群业务访问提示 414 Request-URI Too Large_第2张图片

 

 也可以通过命令行编辑nginx-configuration添加

kubectl edit cm nginx-configuration -n kube-system 

你可能感兴趣的:(k8s,阿里云,kubernetes,nginx)