代码之家  ›  专栏  ›  技术社区  ›  Andrei Dascalu

如何正确设置带有nginx入口的自定义头文件?

  •  2
  • Andrei Dascalu  · 技术社区  · 6 年前

    我有以下配置:

    发病初期:

    apiVersion: extensions/v1beta1
    kind: DaemonSet
    metadata:
      name: nginx-ingress
      namespace: nginx-ingress
    spec:
      selector:
        matchLabels:
          app: nginx-ingress
      template:
        metadata:
          labels:
            app: nginx-ingress
        spec:
          serviceAccountName: nginx-ingress
          containers:
          - image: nginx/nginx-ingress:1.4.2-alpine
            imagePullPolicy: Always
            name: nginx-ingress
            ports:
            - name: http
              containerPort: 80
              hostPort: 80
            - name: https
              containerPort: 443
              hostPort: 443
            env:
            - name: POD_NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            args:
              - -nginx-configmaps=$(POD_NAMESPACE)/nginx-config
              - -default-server-tls-secret=$(POD_NAMESPACE)/default-server-secret 
    

    主要配置:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: nginx-config
      namespace: nginx-ingress
    data:
      proxy-set-headers: "nginx-ingress/custom-headers"
      proxy-connect-timeout: "11s"
      proxy-read-timeout: "12s"
      client-max-body-size: "5m"
      gzip-level: "7"
      use-gzip: "true"
      use-geoip2: "true"
    

    自定义标题:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: custom-headers
      namespace: nginx-ingress
    data:
      X-Forwarded-Host-Test: "US"
      X-Using-Nginx-Controller: "true"
      X-Country-Name: "UK" 
    

    我遇到以下情况:

    • 如果我更改了“代理连接超时”、“代理读取超时”或“客户端最大主体大小”中的一个,我可以看到在控制器pods中生成的配置中出现的更改。
    • 如果我更改了“gzip级别”(甚至尝试了“use gzip”)或“use-geoip2”中的一个,则在生成的配置中看不到任何更改(例如:“gzip on;”总是被注释掉,并且没有其他关于zip的提述,则gzip级别不会出现在任何地方)。
    • “Ingress nginx/Custom headers”中的自定义头完全没有添加(计划使用它们传递geoip2中的值)

    否则,一切都很好,控制器日志显示我唯一的后端(一个转储头的ExpressJS应用程序)是正确的服务器,我得到了预期的响应等等。

    我已经尽可能多地从Github上的示例中复制了内容,只做了最少的更改,但没有任何结果(包括在查看自定义头的示例时)。

    任何想法或建议都会受到极大的赞赏。

    谢谢!

    2 回复  |  直到 6 年前
        1
  •  1
  •   Rico    6 年前

    看起来你在用 kubernetes-ingress 从nginx本身而不是 ingress-nginx 社区nginx入口控制器。

    如果你看到 supported ConfigMap keys 对于Kubernetes Ingress来说 gzip 支持选项。如果你看到 ConfigMap options 对于入口nginx,您将看到所有可以配置的gzip密钥。

    尝试切换到 community nginx入口控制器。

        2
  •  1
  •   Andrei Dascalu    6 年前

    子孙后代: nginx社区控制器=>quay.io/kubernetes入口控制器/nginx入口控制器:0.21.0

    nginx kubernetes controller=>nginx/nginx入口:边缘(如文档中所示)

    community的自定义头configmap=>代理集头:“nginx入口/自定义头”

    kubernetes的自定义头configmap=>添加头:“nginx入口/自定义头”

    推荐文章