增加K8S入口的URL长度限制

时间:2019-11-27 18:23:15

标签: http kubernetes kubernetes-ingress nginx-ingress

我在kubernetes上的服务中有一个GET请求URL,该请求URL的长度约为9k,似乎请求被卡在Kubernetes的入口中。当我尝试从Docker内部或群集中的其他Docker调用URL时,它可以正常工作。但是,当我查询域名时,会得到以下响应标题:

enter image description here

3 个答案:

答案 0 :(得分:1)

我认为您必须修改的参数是客户端主体缓冲区大小

  

设置缓冲区大小,以读取每个位置的客户端请求正文。如果   请求主体大于缓冲区,整个主体或仅是其主体   部分被写入一个临时文件。默认情况下,缓冲区大小相等   到两个内存页面。在x86,其他32位平台上,这是8K,并且   x86-64。在其他64位平台上,通常为16K。这个注解   应用于入口规则中提供的每个位置

nginx.ingress.kubernetes.io/client-body-buffer-size: "1000" # 1000 bytes
nginx.ingress.kubernetes.io/client-body-buffer-size: 1k # 1 kilobyte
nginx.ingress.kubernetes.io/client-body-buffer-size: 1K # 1 kilobyte
nginx.ingress.kubernetes.io/client-body-buffer-size: 1m # 1 megabyte

因此,您必须在nginx入口配置中添加一个annotation

答案 1 :(得分:0)

就我而言,我必须在入口服务器代码段注释中设置http2_max_header_sizehttp2_max_field_size。例如:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/server-snippet: |
        http2_max_header_size 16k;
        http2_max_field_size 16k;

我在Google Chrome浏览器中得到了ERR_CONNECTION_CLOSED和ERR_FAILED,并使用curl进行了“空响应”,但是如果直接从群集网络进行访问,后端将可以正常工作。

在入口控制器ConfigMap中分配client-header-buffer-sizelarge-client-header-buffers似乎也不适合我,但是我意识到,如果使用HTTP 1.1(curl --http1.1),curl可以做到这一点< / p>

答案 2 :(得分:0)

  1. 在 nginx 入口控制器 pod 描述中找到 configmap 名称
kubectl -n utility describe pods/test-nginx-ingress-controller-584dd58494-d8fqr |grep configmap
      --configmap=test-namespace/test-nginx-ingress-controller

注意:就我而言,命名空间是“test-namespace”,配置映射名称是“test-nginx-ingress-controller”

  1. 创建一个configmap yaml
cat  << EOF > test-nginx-ingress-controller-configmap.yaml

kind: ConfigMap
apiVersion: v1
metadata:
  name: test-nginx-ingress-controller
  namespace: test-namespace
data:
  large-client-header-buffers: "4 16k"
EOF

注意:请按照步骤 1

namespace 和 configmap name >
  1. 部署 configmap yaml
kubectl apply -f test-nginx-ingress-controller-configmap.yaml

然后您将看到更改在几分钟后更新到 nginx 控制器 pod

i.g.
kubectl -n test-namespace exec -it test-nginx-ingress-controller-584dd58494-d8fqr -- cat /etc/nginx/nginx.conf|grep large
    large_client_header_buffers     4 16k;

感谢 NeverEndingQueueHow to use ConfigMap configuration with Helm NginX Ingress controller - Kubernetes

的分享