代码之家  ›  专栏  ›  技术社区  ›  Declan McNulty

nginx.conf将忽略nginx入口配置映射片段

  •  9
  • Declan McNulty  · 技术社区  · 6 年前

    我有一个kubernetes集群,在这里我使用 helm nginx-ingress chart .

    我需要向nginx controller pod中生成的nginx.conf文件添加一些自定义配置,并且我发现了一个问题,如果我添加一行选项,例如 proxy-buffer-size: "512k" 我可以在nginx.conf文件中看到这一点,一切正常。

    但是,如果我尝试添加一个代码段来完成相同的任务:

    location-snippet: |
      proxy_buffer_size "512k";
    

    proxy_buffer_size 设置保持为默认值。

    我需要能够添加 http-snippet , server-snippet location-snippet

    我的入口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;
       }
    
    2 回复  |  直到 6 年前
        1
  •  9
  •   Rico    6 年前

    如果你想修改你的Kubernetes Ingress 注释选项如下:

    • nginx.ingress.kubernetes.io/configuration-snippet
    • nginx.ingress.kubernetes.io/server-snippet 对于nginx config服务块中的代码段

    看起来你在用 nginx.org/location-snippets:

    nginx配置示例中还有一个YAML无效语法,而且您应该使用复数,如中所示 server-snippets example . 这本书里有个拼写错误 docs 在写这篇文章的时候。开的 this ticket

    应该是这样的:

      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;
        }
    

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

        2
  •  8
  •   Declan McNulty    6 年前

    结果发现,我的问题是由于我正在应用的代码片段的内容。每次你跑的时候 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
    

        3
  •  0
  •   Evgeniy    4 年前