Проект вместо namespace: как сделать мультитенантность в Kubernetes-платформе
Namespace группирует объекты и на этом заканчивается. Потребление ресурсов по умолчанию не ограничено, сетевая связность работает из любой точки кластера, доступ к ресурсам узла не урезан, а сбора логов, аудита и сканирования уязвимостей нет вообще. Поэтому в Deckhouse Platform единица мультитенантности — это проект: namespace вместе с квотами, сетевой изоляцией, Pod Security Standards, политиками и доступом, собранными по одному шаблону, который администратор пишет один раз, а не повторяет руками в каждой команде.
В докладе я разберу устройство этой машинерии целиком. Поговорим о том, как описывается проект, что и кем рендерится в его namespace, где живут квоты, как тенант получает доступ к кластерным ресурсам вроде StorageClass и ClusterIssuer и что удерживает границу между проектами, когда шаблон писал не тот, кто его применяет.
Отдельно расскажу про честную цену решения. Это и выпиленный в пользу нативного ResourceQuota движок квот на объекты, и шаблон в виде Helm-строки — одновременно путь для инъекции постороннего объекта в манифест и право, эквивалентное cluster-admin. Поделюсь ситуацией из опыта с собственными вебхуками, заклинившими очередь платформы.
Слушатели унесут с доклада переносимые решения: как выдавать права на растущий набор namespace, где в мультитенантности реально проходят границы привилегий, какие грабли ждут при переименовании ролей в живых кластерах и в какой момент честнее отдать команде отдельный кластер, а не проект.