Helm Nginx Ingress: Как отключить серверные токены? - PullRequest
0 голосов
/ 19 июня 2020

Там параметр для отключения NGINX заголовка сервера, но я новичок в Kubernetes и Helm, поэтому я не знаю, как его установить.

I Я пытался отключить токены сервера следующим образом:

helm upgrade --reuse-values nginx-ingress stable/nginx-ingress -ndefault --set controller.config.server-tokens='"false"'

Что действительно отражается, когда я читаю значения диаграммы:

❯ helm get values nginx-ingress -ndefault

USER-SUPPLIED VALUES:
controller:
  config:
    server-tokens: '"false"'
  publishService:
    enabled: true

И в YAML:

❯ kubectl get -n default configmap  ingress-controller-leader-nginx -oyaml
apiVersion: v1
data:
  server-tokens: "false"
kind: ConfigMap
metadata:
  ...

Но, похоже, это не применяется к внутреннему nginx.conf:

❯ kubectl exec -ndefault nginx-ingress-controller-b545558d8-829dz -- cat /etc/nginx/nginx.conf | grep tokens
        server_tokens on;

И мой веб-сервер все еще отправляет заголовок server:.

Надо ли перезагружать сервис для отображения ConfigMap или как? Как мне это сделать?

Ответы [ 2 ]

2 голосов
/ 19 июня 2020

Я думаю, это должна быть заглавная F в False. Не обязательно. Просто раньше этого не было. Не знаю почему. This и this оба работают.

❯ kubectl get configmap -ndefault nginx-ingress-controller -oyaml
apiVersion: v1
data:
  server-tokens: "False"
kind: ConfigMap
metadata:
  annotations:
    meta.helm.sh/release-name: nginx-ingress
    meta.helm.sh/release-namespace: default
  creationTimestamp: "2020-06-19T06:37:21Z"
  labels:
    app: nginx-ingress
    app.kubernetes.io/managed-by: Helm
    chart: nginx-ingress-1.37.0
    component: controller
    heritage: Helm
    release: nginx-ingress
  name: nginx-ingress-controller
  namespace: default
  resourceVersion: "7130237"
  selfLink: /api/v1/namespaces/default/configmaps/nginx-ingress-controller
  uid: 633efe3a-73cf-4c40-8e40-581937e367e2

Вы можете сделать это вручную, отредактировав конфигурационную карту через kubectl edit configmap и затем удалив модуль контроллера, или вы можете установите его с помощью значений helm:

helm get values nginx-ingress -ndefault -oyaml > tmp/nginx-ingress-values.yaml

Измените на:

controller:
  config:
    server-tokens: "False"
  publishService:
    enabled: true

И примените его:

helm upgrade nginx-ingress stable/nginx-ingress -f tmp/nginx-ingress-values.yaml -ndefault

Удалите модуль контроллера на всякий случай.

Grep it:

kubectl exec -ndefault nginx-ingress-controller-b545558d8-gmz64  -- cat /etc/nginx/nginx.conf | grep tokens

Подтвердите ваши заголовки в Chrome инструментах разработчика:


Возможно, это было бы проще сработало:

helm upgrade --reuse-values nginx-ingress stable/nginx-ingress -ndefault --set-string controller.config.server-tokens=false

Но моя конфигурация сейчас работает, поэтому я не буду ее пробовать.

1 голос
/ 19 июня 2020

Из docs из nginx контроллера входа

Целью этого контроллера входа является сборка файла конфигурации (nginx .conf). Следствием этого требования является необходимость перезагрузки NGINX после любого изменения в файле конфигурации

Таким образом, у вас есть два варианта

  1. Поскольку nginx pods развертываются с использованием deployment, вы можете просто удалить модули, и кубернеты воссоздают модули с обновленной конфигурацией.

  2. Из документации helm 3 здесь

Часто ConfigMaps или Secrets вводятся в виде файлов конфигурации в контейнеры или происходят другие изменения внешних зависимостей, для которых требуются подвижные модули. В зависимости от приложения может потребоваться перезагрузка, если они будут обновлены с последующим обновлением Helm, но если SP c сам развертывания не изменился, приложение продолжает работать со старой конфигурацией, что приводит к несогласованному развертыванию.

Функцию sha256sum можно использовать для обеспечения обновления раздела аннотации развертывания при изменении другого файла:

kind: Deployment
spec:
  template:
    metadata:
      annotations:
        checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
[...]
...