Використання простору імен користувача з Podʼом
Kubernetes v1.30 [beta]
(стандартно увімкнено: false)Ця сторінка показує, як налаштувати простір імен користувача для Podʼів. Це дозволяє ізолювати користувача, що працює всередині контейнера, від того, який працює на хості.
Процес, що працює як root у контейнері, може працювати як інший (не root) користувач на хості; іншими словами, процес має повні привілеї для операцій всередині простору імен користувача, але не має привілеїв для операцій за межами простору імен.
Ви можете використовувати цю функцію, щоб зменшити шкоду, яку скомпрометований контейнер може завдати хосту або іншим Podʼам на тому ж вузлі. Є кілька уразливостей безпеки, оцінених як ВИСОКІ або КРИТИЧНІ, які не були використовні при активному використанні просторів імен користувача. Очікується, що простори імен користувача захистять від деяких майбутніх уразливостей також.
Без використання просторів імен користувача контейнер, що працює як root, у випадку втечі з контейнера має привілеї root на вузлі. І якщо деякі можливості були надані контейнеру, то ці можливості також дійсні на хості. Цього не відбувається, коли використовуються простори імен користувача.
Перш ніж ви розпочнете
Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою minikube або використовувати одну з цих пісочниць:
Версія вашого Kubernetes сервера має бути не старішою ніж v1.25. Для перевірки версії введітьkubectl version
.- ОС вузла повинна бути Linux
- Ви повинні мати можливість виконувати команди на хості
- Ви повинні мати можливість виконувати команди у Podʼах
- Вам потрібно увімкнути функціональну можливість
UserNamespacesSupport
Примітка:
Feature gate для увімкнення просторів імен користувача раніше називавсяUserNamespacesStatelessPodsSupport
, коли підтримувалися лише Podʼи без збереження стану. Тільки Kubernetes v1.25 по v1.27 визнають UserNamespacesStatelessPodsSupport
.Кластер, який ви використовуєте, обовʼязково повинен містити принаймні один вузол, який відповідає вимогам щодо використання просторів імен користувача з Podʼами.
Якщо у вас є суміш вузлів і лише деякі з них надають підтримку просторів імен користувача для Podʼів, вам також потрібно забезпечити те, що Podʼи з просторами імен користувача будуть заплановані на відповідні вузли.
Запуск Podʼа, що використовує простір імен користувача
Простір імен користувача для Podʼа вимкається, встановленням поля hostUsers
в .spec
на false
. Наприклад:
apiVersion: v1
kind: Pod
metadata:
name: userns
spec:
hostUsers: false
containers:
- name: shell
command: ["sleep", "infinity"]
image: debian
Створіть Pod у вашому кластері:
kubectl apply -f https://k8s.io/examples/pods/user-namespaces-stateless.yaml
Приєднайтеся до контейнера і виконайте
readlink /proc/self/ns/user
:kubectl attach -it userns bash
Виконайте цю команду:
read
link /proc/self/ns/user
Вивід схожий на:
user:[4026531837]
Також виконайте:
cat /proc/self/uid_map
Вивід схожий на:
0 833617920 65536
Потім відкрийте оболонку на хості та виконайте ті ж самі команди.
Команда readlink
показує простір імен користувача, в якому працює процес. Він повинен бути різним, коли ви виконуєте його на хості і всередині контейнера.
Останнє число у файлі uid_map
всередині контейнера повинно бути 65536, на хості це число повинно бути більшим.
Якщо ви запускаєте kubelet всередині простору імен користувача, вам потрібно порівняти вивід команди в Pod з виводом, отриманим на хості:
readlink /proc/$pid/ns/user
замінивши $pid
на PID kubelet.
Елементи на цій сторінці відносяться до сторонніх продуктів чи проєктів, які надають функціонал, необхідний для Kubernetes. Автори проєкту Kubernetes не несуть відповідальності за ці проєкти. Ознайомтесь з настановами на вебсайті CNCF для отримання докладної інформації.
Ознайомтесь з посібником з контенту перед тим, як пропонувати додавання посилання на стороні компоненти.