Как правильно настроить пользовательские заголовки с помощью входа nginx? - PullRequest
0 голосов
/ 08 января 2019

У меня есть следующая конфигурация:

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 

основная конфигурация:

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" 

Я сталкиваюсь со следующими ситуациями:

  • Если я изменю один из параметров «proxy-connect-timeout», «proxy-read-timeout» или «client-max-body-size», я вижу изменения, появляющиеся в сгенерированных конфигурациях в модулях контроллера
  • Если я изменю один из параметров «gzip-level» (даже попробовал «use-gzip») или «use-geoip2», я не вижу изменений в сгенерированных конфигах (например: «gzip on;» всегда закомментируется и другого упоминания о zip нет, уровень gzip нигде не отображается)
  • Пользовательские заголовки из «ingress-nginx / custom-headers» вообще не добавляются (планировал использовать их для передачи значений из geoip2)

В остальном все хорошо, журналы контроллера показывают, что мой единственный бэкэнд (приложение expressJs, которое сбрасывает заголовки) - это сервер правильно, я получаю ожидаемые ответы и т. Д.

Я скопировал как можно больше из примеров на github, внеся минимум изменений, но безрезультатно (в том числе при просмотре примеров для пользовательских заголовков).

Любые идеи или указатели будут с благодарностью.

Спасибо!

Ответы [ 3 ]

0 голосов
/ 08 января 2019

для потомков: Контроллер сообщества nginx => quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.21.0

контроллер nginx kubernetes => вход nginx / nginx: край (как показано в документах)

Карта пользовательских заголовков для сообщества => proxy-set-headers: "nginx-ingress / custom-headers"

карта пользовательских заголовков для kubernetes => add-headers: "nginx-ingress / custom-headers"

0 голосов
/ 08 апреля 2019

Использовать аннотации правила входа.

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:

Я использовал nginx server 1.15.9

0 голосов
/ 08 января 2019

Похоже, вы используете kubernetes-ingress от самого NGINX вместо ingress-nginx , который является контроллером входа nginx сообщества.

Если вы видите поддерживаемые ключи ConfigMap для kubernetes-ingress, ни один из параметров gzip не поддерживается. Если вы увидите Параметры ConfigMap для ingress-nginx, вы увидите все ключи gzip, которые можно настроить.

Попробуйте переключиться на сообщество входной контроллер nginx.

...