【问题标题】:Can we NOT set nginx.ingress.kubernetes.io/client-body-timeout: '120' using ingress annotations?我们可以不使用入口注释设置 nginx.ingress.kubernetes.io/client-body-timeout: '120' 吗?
【发布时间】:2020-05-26 10:15:28
【问题描述】:

该注解的默认值为60秒;我希望将其值更改为 120 秒。我将此作为注释添加到入口资源文件中,但它似乎不起作用。

由于我的请求体很大,我只在 60 秒后立即从入口 http 服务器获得 408;

如果入口文件本身不允许此注解,我还能在哪里定义它?

以下页面未提及此注释;是不是因为它不打算作为注释添加?

https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations

入口资源sn-p:

kind: Ingress
metadata:
  name: app-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /my-app
    nginx.ingress.kubernetes.io/client-header-buffer-size: "1M"
    nginx.ingress.kubernetes.io/client-header-timeout: "60"
    nginx.ingress.kubernetes.io/client-body-buffer-size: "1M"
    nginx.ingress.kubernetes.io/client-body-timeout: "120"
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/configuration-snippet: |
        proxy_set_header custom-header $1;
spec:
  rules:
  - http:
      paths:
      - path: /(UK)/my-app/(.*)$
        backend:
          serviceName: test
          servicePort: 80

【问题讨论】:

  • 如果不是来自官方文档,你是从哪里得到这个注释的?
  • 您提到的选项应该在nginx configmap(全局配置)中设置。检查kubectl get deployments.apps -n kube-system nginx-ingress-controller -oyaml | grep -- --configmap 以获取有关如何调用配置图的提示。在您的情况下,kubectl 命令可能看起来有点不同。
  • 请不要混用Nginx提供的nginx入口控制器和Kubernetes提供的其他控制器。这是两个不同的东西。
  • 一个 nginx 控制器由 kubernetes 社区维护,另一个由 nginx(nginx 产品背后的公司)维护。这是Nginx ingress controller和kubernetes nginx controller的github repo
  • 我发现kubernetes社区提供的Nginx控制器没有提供你感兴趣的注解here is a link to github repo with annotations code。这意味着你剩下的要么是全局设置这个选项,要么是打开功能请求在github上等待有人实现它。

标签: nginx kubernetes kubernetes-ingress


【解决方案1】:

总结一下我们在 cmets 中的对话:

有两个 Nginx 入口控制器; 一个 nginx 控制器由 Kubernetes 社区维护,另一个由 nginx(nginx 产品背后的公司)维护。这是Nginx ingress controller 和kubernetes nginx controller 的github repo。


kubernetes 提供的 Nginx 控制器不允许使用注解设置client-body-timeout。这是link to github repo with annotations code。这意味着你剩下的要么是

  • 全局设置此参数,或
  • 在 github 上打开功能请求,等待有人实现。

client-body-timeout参数只能通过全局配置设置(在documentation中指定)。

【讨论】:

    【解决方案2】:

    添加到 HelloWorlds 答案中,如果有人希望使用 Kubernetes 版本的 Ingress 全局提供此注释,则可以遵循以下步骤:

    1. 检查正在运行的命名空间入口 pod。大多数情况下,命名空间名称将类似于 -ingress-some-string-.

      $ kubectl 获取 ns

      假设命名空间是:'ingress-nginx'

    2. 现在已知命名空间,检查该命名空间内的 pod。

      $ kubectl get pods -n ingress-nginx

      假设你得到一个类似的 pod:'ingress-nginx-controller-abcdefg'

    3. 使用以下命令检查此 pod 的配置映射:

      $ kubectl get pod ingress-nginx-controller-abcdefg -n ingress-nginx -o yaml | grep 配置图

      你会得到类似的输出:--configmap=${POD_NAMESPACE}/nginx-configuration

    4. 现在,您必须创建一个具有上述名称的配置映射,其中包含 Kubernetes Ingress 所需和支持的配置。

      $ cat global-configmap.yaml


      api版本:v1

      种类:ConfigMap

      元:

       name: nginx-configuration
      
       namespace: ingress-nginx
      

      数据:

       client-body-timeout: "120"   # default value is 60 seconds
      
    5. 现在,应用这个配置映射 yaml。

      $ kubectl apply -f global-configmap.yaml

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-12
      • 2016-10-17
      • 2012-12-31
      • 1970-01-01
      相关资源
      最近更新 更多