Мой k8s liveness probe не устанавливает хост.

Я пытаюсь развернуть приложение Django с настроенными зондами запуска и жизнеспособности. Поскольку это приложение Django, мне нужно, чтобы заголовок Host на зондах соответствовал чему-то разрешенному в моем ALLOWED_HOSTS. Поскольку мои зонды оба httpGet проверяют, самым простым решением кажется использование поля httpHeaders, как предложено в документации kubernetes .

Похоже, это работает для startupProbe, однако это не работает для livenessProbe.

Санитизированная версия моих зондов:

livenessProbe:
  httpGet:
    httpHeaders:
      - name: Host
        value: k8s-probes
    path: /health/liveness
    port: http
    scheme: HTTP
startupProbe:
  httpGet:
    httpHeaders:
      - name: Host
        value: k8s-probes
    path: /health/
    port: http
    scheme: HTTP

Когда капсула запускается, я вижу 200 ответов на начальные тесты запуска, затем, когда запускается liveness probe, я получаю 400 ответов с ошибкой, что IP адрес капсулы не находится в ALLOWED_HOSTS, что указывает на то, что k8s не устанавливает заголовок Host, который я определил для liveness probe.

Хотя это старый вопрос, самое простое решение, которое я нашел в Интернете, - это добавить gethostbyname(gethostname()) в ALLOWED_HOSTS. Для этого нужно только добавить from socket import gethostname, gethostbyname в файл settings.py

В отношении безопасности могут быть некоторые оговорки, и этот пост от команды mozilla marketing engineering & Ops teams посвящен проблеме, если вы ищете более надежное решение.

Вернуться на верх