Этот проект предоставляет инструменты для создания изолированных пользовательских окружений в кластере Kubernetes. Каждый пользователь получает:
- Свой собственный namespace с его именем
- Сервисный аккаунт для доступа к ресурсам в namespace
- Ограниченные права в пределах своего namespace
- Сетевую изоляцию с контролируемым доступом
- Настроенный kubeconfig для аутентификации
Для создания изолированного пользователя используйте скрипт create-user.sh
:
# Сделать скрипт исполняемым
chmod +x create-user.sh
# Создать изолированного пользователя <имя_пользователя>
./create-user.sh <имя_пользователя>
Скрипт автоматически:
- Генерирует все необходимые манифесты Kubernetes из шаблонов
- Создает namespace с именем пользователя
- Настраивает сервисный аккаунт и роли доступа
- Применяет политику сетевой изоляции
- Генерирует kubeconfig файл для доступа пользователя
- Сохраняет все созданные файлы в директории
./generated/<имя_пользователя>/
После выполнения у вас будет готовый файл kubeconfig, который можно передать пользователю:
./generated/<имя_пользователя>/<имя_пользователя>-kubeconfig.yaml
Для удаления изолированного пользователя и всех его ресурсов используйте скрипт delete-user.sh
:
# Сделать скрипт исполняемым
chmod +x delete-user.sh
# Удалить изолированного пользователя <имя_пользователя>
./delete-user.sh <имя_пользователя>
Скрипт удаляет:
- Namespace пользователя (что автоматически удаляет все созданные внутри него ресурсы)
- Все связанные с пользователем ресурсы в кластере
Сгенерированные файлы в директории ./generated/<имя_пользователя>/
при этом сохраняются.
После получения файла kubeconfig от администратора вы можете работать с кластером следующим образом:
# Указать путь к вашему kubeconfig файлу
export KUBECONFIG=/путь/к/вашему/<имя_пользователя>-kubeconfig.yaml
# Проверить доступ и ресурсы
kubectl get pods
kubectl get svc
Либо можно использовать опцию --kubeconfig
для каждой команды:
kubectl --kubeconfig=/путь/к/вашему/<имя_пользователя>-kubeconfig.yaml get pods
Для проверки доступа можно развернуть тестовое приложение:
# Путь к примеру deployment будет зависеть от того, где вы сохранили файл
kubectl apply -f /путь/к/example-deployment.yaml
Пример содержит:
- Deployment с NGINX
- Service для доступа к NGINX
- IngressRoute для маршрутизации через Traefik
Созданная NetworkPolicy обеспечивает:
- Входящий трафик: Разрешен только от Traefik прокси
- Исходящий трафик: Разрешен:
- К DNS-серверам (для разрешения имен)
- К Traefik прокси
- В интернет (но не внутрь кластера)
В рамках своего namespace пользователь может управлять следующими ресурсами:
- Базовые ресурсы: pods, services, configmaps, secrets, persistentvolumeclaims
- Ресурсы приложений: deployments, replicasets, statefulsets
- Сетевыми ресурсами: ingresses
- Ресурсами Traefik: ingressroutes, middlewares
isolated-user/
├── create-user.sh # Скрипт создания пользователя
├── delete-user.sh # Скрипт удаления пользователя
├── example-deployment.yaml # Пример deployment для проверки
└── templates/ # Шаблоны ресурсов Kubernetes
├── namespace.yaml.template
├── network-policy.yaml.template
├── rbac.yaml.template
└── serviceaccount.yaml.template
- Работающий Kubernetes кластер
- Настроенный Traefik Ingress Controller с меткой namespace
name=traefik
- Права администратора кластера для создания namespace и ролей