Вчера мы писали про лучшие практики по защите контейнеров на разных этапах жизненного цикла. Одной из таких практик, применимой для runtime, является контроль drift prevention.
Есть один занимательный способ, как это можно реализовать при помощи… Admission Controller и инструмента kube-exec-controller!
Идея ребят из Box простая и достаточно элегантная:
🍭 У нас есть Validating Webhook, который срабатывает для
[pods/exec, pods/attach]. Он их «пропускает», но событие мы регистрируем🍭 Чтобы понять, к какому именно pod было «обращение» средствами kube-exec-controller вешается метка (label), в которой содержится информация о времени exec, об инициаторе
🍭 Дальше – интересней! Все pods, обладающие такой «черной меткой» начнут eviction process. Авторы подумали о том, что иногда exec бывает удобен и нужен, например, при debug. По этой причине они добавили Pod Time-To-Life (TTL), который больше для Dev-окружений и крайне мал для Prod-окружений
Чтобы с этим инструментом было проще работать ребята сделали kubectl plugin, получивший имя kubectl pi (сокращенно от pod interaction), который может показывать «меченых» и управлять временем TTL.
Если интересно – то можно почитать статью в официальном блоге Kubernetes, где детализируется этот концепт и есть наглядные схемы ☺️