Мой 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 посвящен проблеме, если вы ищете более надежное решение.