web-dev-qa-db-fra.com

Comment puis-je configurer correctement les en-têtes personnalisés avec l'entrée nginx?

J'ai la configuration suivante:

daemonset:

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 

configuration principale:

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"

en-têtes personnalisés:

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" 

Je rencontre les situations suivantes:

  • Si je change l'un des "proxy-connect-timeout", "proxy-read-timeout" ou "client-max-body-size", je peux voir les changements apparaître dans les configurations générées dans les pods du contrôleur
  • Si je change l'un de "gzip-level" (même essayé "use-gzip") ou "use-geoip2", je ne vois aucun changement dans les configurations générées (par exemple: "gzip on;" est toujours commenté et il n'y a pas d'autre mention de Zip, le niveau gzip n'apparaît nulle part)
  • Les en-têtes personnalisés de "ingress-nginx/custom-headers" ne sont pas du tout ajoutés (envisageait de les utiliser pour transmettre des valeurs à partir de geoip2)

Sinon, tout va bien, les journaux du contrôleur montrent que mon seul backend (une application expressJs qui vide les en-têtes) est le serveur correctement, j'obtiens les réponses attendues, etc.

J'ai copié autant que possible à partir des exemples sur github, en faisant un minimum de changements mais aucun résultat (y compris en regardant les exemples d'en-têtes personnalisés).

Toutes les idées ou pointeurs seraient grandement appréciés.

Merci!

3
Andrei Dascalu

Il semble que vous utilisiez kubernetes-ingress de NGINX lui-même au lieu de ingress-nginx qui est le contrôleur d'entrée de communauté nginx.

Si vous voyez les clés ConfigMap prises en charge pour kubernetes-ingress, aucune des options gzip n'est prise en charge. Si vous voyez options ConfigMap pour ingress-nginx, vous verrez toutes les clés gzip qui peuvent être configurées.

Essayez de passer au contrôleur d'entrée communauté nginx.

2
Rico

Utilisez des annotations de règles d'entrée.

Example:
 apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/configuration-snippet: |
      more_set_headers "server: hide";
      more_set_headers "X-Content-Type-Options: nosniff";
      more_set_headers "X-Frame-Options: DENY";
      more_set_headers "X-Xss-Protection: 1";
  name: myingress
  namespace: default
spec:
  tls:
  - hosts:

J'ai utilisé le serveur nginx 1.15.9

8
Petr Šejn

Pour la postérité: nginx community controller => quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.21.0

nginx kubernetes controller => nginx/nginx-ingress: Edge (comme indiqué dans la documentation)

configmap des en-têtes personnalisés pour la communauté => en-têtes de jeu de proxy: "nginx-ingress/custom-headers"

configmap des en-têtes personnalisés pour kubernetes => add-headers: "nginx-ingress/custom-headers"

1
Andrei Dascalu