繁体   English   中英

nginx.conf 忽略了 nginx-ingress 配置映射片段

nginx-ingress config map snippets being ignored by the nginx.conf

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一个 kubernetes 集群,在那里我使用helm nginx-ingress chart部署了一个 nginx 入口控制器。

我需要向在 nginx-controller-pod 中生成的 nginx.conf 文件添加一些自定义配置,并且我看到一个问题,如果我添加一个单行选项,例如proxy-buffer-size: "512k"我可以看到这反映在 nginx.conf 文件中,一切都按预期工作。

但是,如果我尝试添加一个片段来完成同样的事情:

location-snippet: |
  proxy_buffer_size "512k";

这好像被 nginx.conf 文件忽略了,并且proxy_buffer_size设置保持它的默认值。

我需要能够添加http-snippetserver-snippetlocation-snippet覆盖,但是无论我尝试将它们添加到 ConfigMap 还是作为 Ingress.yaml 文件中的注释,它们总是被忽略。

我的入口 yaml 文件:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    ingress.kubernetes.io/ssl-redirect: "true" 
    ingress.kubernetes.io/secure-backends: "true"    
    ingress.kubernetes.io/force-ssl-redirect: "true"

    ingress.kubernetes.io/location-snippet: |
       proxy_buffer_size 512k;     --This does not update the nginx.conf
spec:
  tls:
  - hosts:
    - my.app.co.uk
    secretName: tls-secret

  rules:
  - host: my.app.co.uk
    http:
      paths:
      - path: /
        backend:
          serviceName: myappweb-service
          servicePort: 80

我的 nginx 配置图:

apiVersion: v1
kind: ConfigMap
metadata:
  labels:
    app: nginx-ingress
    chart: nginx-ingress-0.28.3
    component: controller
    heritage: Tiller
    release: nginx-ingress
  name: nginx-ingress-controller
  namespace: default
data:
  proxy-buffer-size: "512k" -- this works and updates the nginx.conf

  location-snippet: |
    proxy_buffers 4 512k; -- this does not update the nginx.conf

  server-snippet: |       -- this does not update the nginx.conf
    location /messagehub {
      proxy_set_header Upgrade $http_upgrade;
      proxy_http_version 1.1;
      proxy_set_header X-Forwarded-Host $http_host;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-Forwarded-For $remote_addr;
      proxy_set_header Host $host;
      proxy_set_header Connection "upgrade";
      proxy_cache_bypass $http_upgrade;
   }
3 个回复

如果您想修改 Kubernetes Ingress ,注释选项如下:

  • nginx.ingress.kubernetes.io/configuration-snippet用于 nginx 位置块片段
  • nginx.ingress.kubernetes.io/server-snippet用于 nginx 配置服务块中的片段

看起来您正在使用nginx.org/location-snippets:对于这种情况。

在 nginx 配置示例中还有一个 YAML 无效语法,根据这个示例,您也应该像在server-snippets一样使用复数。 在撰写本文时, 文档中有一个错字。 打开这张票跟进。

它应该是这样的:

  server-snippets: |
    location /messagehub {
      proxy_set_header Upgrade $http_upgrade;
      proxy_http_version 1.1;
      proxy_set_header X-Forwarded-Host $http_host;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-Forwarded-For $remote_addr;
      proxy_set_header Host $host;
      proxy_set_header Connection "upgrade";
      proxy_cache_bypass $http_upgrade;
      }

而不是这个:

  server-snippet: |
    location /messagehub {
      proxy_set_header Upgrade $http_upgrade;
      proxy_http_version 1.1;
      proxy_set_header X-Forwarded-Host $http_host;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-Forwarded-For $remote_addr;
      proxy_set_header Host $host;
      proxy_set_header Connection "upgrade";
      proxy_cache_bypass $http_upgrade;
    }

注意最后一个花括号的缩进。

事实证明,我的问题是由于我正在应用的代码片段的内容。 每次运行kubectl apply -f myconfigmap.yaml ,都会针对您尝试应用到 nginx.conf 的更改运行验证。 当此验证失败时,它会以静默方式失败,并且终端中没有任何提醒您这一点。

实际上,您仍然会收到configmap/nginx-ingress-controller configured消息。

例如,当我将其添加到配置映射时,它会按预期更新 nginx.conf:

http-snippet: |
  sendfile on;

但是,当我添加它时,没有任何改变:

http-snippet: |
  sendfile on;
  tcp_nopush on;

原因是这没有通过验证,但找到它的唯一方法是查看 nginx 入口控制器 pod 的日志。 在这种情况下,我看到:

Error: exit status 1
2018/10/16 07:45:49 [emerg] 470#470: "tcp_nopush" directive is duplicate in 
/tmp/nginx-cfg468835321:245
nginx: [emerg] "tcp_nopush" directive is duplicate in /tmp/nginx-cfg468835321:245
nginx: configuration file /tmp/nginx-cfg468835321 test failed

所以我复制了一个已经存在的指令。

我花了一天的时间,直到ingress-nginx (来自 Kubernetes)有*-snippet ,但对于nginx-ingress (来自 NGINX), *-snippetss

看这里:

2 如何将Nginx配置转换为Nginx-ingress?

我的nginx具有以下配置: 我想将我的Nginx配置转换为kubernetes ingress-nginx(入口资源)。 有没有一种使用kubernetes Ingress资源来实现此配置的方法? 在阅读ingress-nginx文档时,我还没有找到如何将proxy_pass或多个 ...

4 为Azure Kubernetes配置Nginx-ingress

我一直在尝试寻找有关如何为Kubernetes最佳配置入口服务的信息,因为我们看到了Pod的大量重启(在性能测试期间),这些Pod最终导致崩溃循环。 我找不到有关如何设置worker_process以及该值应与我们正在运行的核心和入口容器数量进行比较的任何信息。 当我拥有4个vCore ...

5 为E2E测试配置Nginx-ingress

我在AWS中有一个集成的Kubernetes集群,我想对该集群进行端到端测试。 我目前使用部署和服务。 提议的方法是使用Ingress并将其配置为使用cookie注入,以确保访问实现以下逻辑的网页: 当请求中识别出特殊标题时->允许代理进入网页(用于自动测试) ...

8 nginx.conf 中的 log_format 被忽略

这里是 NGINX 初学者。 我的日志目前看起来像: 92.21.236.47 - - [08/Jan/2017:00:48:10 +0000] "GET / HTTP/1.1" 200 148 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50 ...

2017-01-08 01:03:18 2 13103   nginx
9 如何使用 dockerised drupal 网站配置 nginx.conf?

这是我第一次使用 nginx,我正在使用它从生产子域访问我的 dockerised drupal 应用程序。 所以在此之前,我目前正在使用 docker-compose 创建我的 sql、app 和 webservice 容器,这是我的 docker-compose 文件: 我不认为容器是问题 ...

10 我应该配置什么 nginx.conf 文件?

我正在尝试在 NginX 服务器上运行performance_tune我的 Tuleap 11.8 服务。 我知道要调整哪些参数。 但是有很多.conf文件: 我很困惑我应该配置哪个文件? 它是否与其他文件冲突? ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM