Вы можете написать специальную программу Kubernetes, которая называется controller . Это обычная программа, работающая в обычном модуле, которая использует Kubernetes API для просмотра некоторого набора объектов и изменения некоторого другого набора объектов.
Основной l oop из контроллер, который делает то, что вы описываете, может быть довольно простым:
- Наблюдайте все объекты Ingress (в пространстве имен, соответствующие некоторым меткам, ...)
- Сохраняйте некоторое состояние текущего объединенного набора Ingresses в обычных переменных в вашем контроллере. (Если контроллер выходит и перезапускается, наблюдение начнется с воспроизведения всех текущих объектов в новом процессе контроллера.)
- Создайте файл, который вы хотите вывести в объект ConfigMap.
Тогда другие модули могут монтировать ConfigMap, как и любой другой ConfigMap, просто он принадлежит вашему контроллеру, а не обслуживается вручную.
Этот процесс не очень подходит для контейнера "sidecar"; он запускает в основном полностью независимый процесс, который не тесно связан с конкретным модулем c. Это также позволяет избежать попыток вручную модифицировать контейнерные файловые системы, что дает вам отказоустойчивость несколькими способами: при запуске нового модуля он автоматически получает существующее содержимое ConfigMap; если ваш контроллер каким-то образом выходит из строя, модули могут продолжать использовать старое содержимое ConfigMap до его перезапуска.