Вчера срочно обновлял ingress-nginx до 1.12.1 (версия чарта 4.12.1) после новости о критической уязвимости CVE-2025-1974 и наступил на грабли - релиз обновился, но все существующие ingress'ы потеряли привязку к IP адресу балансировщика.
Полез смотреть events в кластере, но там ничего криминального не нашлось. В логах ingress-nginx контроллера присутствовали ошибки вида
E0325 12:26:36.275715 7 store.go:938] annotation group ConfigurationSnippet contains risky annotation based on ingress configuration
но сходу у меня не сложилась связь этих ошибок с отсутствием привязки к IP адресу. А вот когда попробовал пересоздать один из ingress'ов всё стало на свои места
Error: INSTALLATION FAILED: admission webhook "validate.nginx.ingress.kubernetes.io" denied the request: annotation group ConfigurationSnippet contains risky annotation based on ingress configuration
Во всех ингресах присутствовала аннотация nginx.ingress.kubernetes.io/configuration-snippet
через которую делается тонкий тюнинг приложений и нет простого способа отказаться от использования этой опции.
Поиск по issues в ingress-nginx вывел на конфигурационную опцию controller.allowSnippetAnnotations
, но её включение не дало результата. Далее наткнулся на #12648 в котором рекомендовали включить annotations-risk-level: "Critical"
(полное описание всех опций есть тут) и после этого изменения ингресы получили привязку к IP адресу.
Для единообразия заменил controller.allowSnippetAnnotations
на allow-snippet-annotations: "true"
и теперь нужная секция конфигурации чарта выглядит так:
controller: config: # https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/ allow-snippet-annotations: "true" # required to use nginx.ingress.kubernetes.io/configuration-snippet annotations annotations-risk-level: "Critical" # required to use nginx.ingress.kubernetes.io/configuration-snippet annotations
Нужно понимать что помимо ConfigurationSnippet (configuration-snippet) такое изменение разрешает и другие виды конфигурации (почитать про риски аннотаций можно тут):
- ExternalAuth (auth-snippet)
- ModSecurity (modsecurity-snippet)
- ServerSnippet (server-snippet)
- StreamSnippet (stream-snippet)
Комментариев нет:
Отправить комментарий