Skip to content

RootShell-coder/k8s-isolated-users

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Изоляция пользователя в Kubernetes

Описание

Этот проект предоставляет инструменты для создания изолированных пользовательских окружений в кластере Kubernetes. Каждый пользователь получает:

  • Свой собственный namespace с его именем
  • Сервисный аккаунт для доступа к ресурсам в namespace
  • Ограниченные права в пределах своего namespace
  • Сетевую изоляцию с контролируемым доступом
  • Настроенный kubeconfig для аутентификации

Порядок действий для администратора

Создание изолированного пользователя

Для создания изолированного пользователя используйте скрипт create-user.sh:

# Сделать скрипт исполняемым
chmod +x create-user.sh

# Создать изолированного пользователя <имя_пользователя>
./create-user.sh <имя_пользователя>

Скрипт автоматически:

  1. Генерирует все необходимые манифесты Kubernetes из шаблонов
  2. Создает namespace с именем пользователя
  3. Настраивает сервисный аккаунт и роли доступа
  4. Применяет политику сетевой изоляции
  5. Генерирует kubeconfig файл для доступа пользователя
  6. Сохраняет все созданные файлы в директории ./generated/<имя_пользователя>/

После выполнения у вас будет готовый файл kubeconfig, который можно передать пользователю:

./generated/<имя_пользователя>/<имя_пользователя>-kubeconfig.yaml

Удаление изолированного пользователя

Для удаления изолированного пользователя и всех его ресурсов используйте скрипт delete-user.sh:

# Сделать скрипт исполняемым
chmod +x delete-user.sh

# Удалить изолированного пользователя <имя_пользователя>
./delete-user.sh <имя_пользователя>

Скрипт удаляет:

  1. Namespace пользователя (что автоматически удаляет все созданные внутри него ресурсы)
  2. Все связанные с пользователем ресурсы в кластере

Сгенерированные файлы в директории ./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

Особенности изолированного пространства

Сетевая изоляция (Network Policy)

Созданная NetworkPolicy обеспечивает:

  • Входящий трафик: Разрешен только от Traefik прокси
  • Исходящий трафик: Разрешен:
    • К DNS-серверам (для разрешения имен)
    • К Traefik прокси
    • В интернет (но не внутрь кластера)

Разрешенные ресурсы Kubernetes

В рамках своего 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 и ролей

About

User Isolation in Kubernetes script

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages