Безопасность (RBAC, SA) и хранилища данных (Volumes)

From wiki.baghirzade.pro
Jump to navigation Jump to search

1. Повторение: Аутентификация и Контексты

Для подключения к API-серверу извне (вне кластера) необходима аутентификация.

  • Механизм: Используются сертификаты (CA, CRT) и файлы конфигурации (kubeconfig).
  • Контексты (Contexts): Это связка User + Cluster + Namespace. В одном kubeconfig может быть много контекстов для разных кластеров (Dev, Prod, QA).
  • Совет по работе с кластерами: Чтобы не запутаться, в каком кластере вы находитесь (особенно если у мастеров одинаковые hostname), рекомендуется создавать разных пользователей в ОС (например, user-prod, user-dev) и класть соответствующие конфиги в их домашние папки.

2. Service Account (SA) и доступ внутри кластера

Если обычные User/Group нужны для людей (внешний доступ), то Service Account нужен для приложений (подов) внутри кластера.

  • Зачем это нужно? Многим инструментам (Vault, Prometheus, Provisioners) нужно "смотреть" на кластер изнутри: листить поды, читать секреты или конфигмапы.
  • Токены: В новых версиях Kubernetes токены для SA больше не создаются автоматически. Их нужно создавать вручную как объект типа Secret с аннотацией kubernetes.io/service-account.name.
  • Пример использования:
    1. Создаем Service Account.
    2. Создаем Role (например, разрешение на get, list подов).
    3. Создаем RoleBinding, привязывая Role к SA.
    4. В манифесте пода указываем serviceAccountName: <имя_са>.
  • Как это работает технически: Kubernetes монтирует токен и сертификат внутрь пода по пути /var/run/secrets/kubernetes.io/serviceaccount. Приложение (или команда curl) использует этот токен для запросов к API-серверу.

3. Хранилища данных (Volumes): Начало

В Kubernetes поды эфемерны: если под удалится, данные внутри него пропадут. Для сохранения данных используются вольюмы.

A. emptyDir (Общая папка между контейнерами)

  • Суть: Временная папка, которая создается при запуске пода и удаляется при его удалении.
  • Кейс: Обмен данными между основным контейнером и Sidecar-контейнером.
  • Пример с логами: Основной контейнер пишет логи в файл, а Sidecar-контейнер (например, Fluentd) читает их из этой же папки emptyDir и отправляет в центральное хранилище.

B. hostPath (Монтирование из ноды)

  • Суть: Монтирует папку напрямую с физической (или виртуальной) ноды, на которой запущен под.
  • Проблема: Если под переедет на другую ноду, он не увидит данных со старой ноды.
  • Кейс: Системные поды, которым нужен доступ к ресурсам хоста (например, доступ к /var/log ноды через DaemonSet).

4. Persistent Volumes (PV) и Claims (PVC)

Это профессиональный способ работы с дисками, разделяющий обязанности администратора и разработчика.

  • PVC (Persistent Volume Claim): "Запрос" разработчика. В нем указывается: "Мне нужно 500 МБ места и доступ ReadWriteOnce".
  • PV (Persistent Volume): "Ресурс" администратора. Реальный диск (NFS, AWS EBS, Ceph), который "отвечает" на запрос.
  • Связывание (Binding): Kubernetes ищет подходящий PV для PVC. Если PVC просит 500 МБ, а есть PV на 1 ГБ и 10 ГБ, он выберет ближайший (1 ГБ).

Режимы доступа (Access Modes):

  1. ReadWriteOnce (RWO): Монтируется только к одной ноде (типично для блочных дисков типа AWS EBS).
  2. ReadOnlyMany (ROX): Многие ноды могут читать.
  3. ReadWriteMany (RWX): Многие ноды могут и читать, и писать (типично для сетевых файловых систем, например, NFS).

5. Практические нюансы: NFS и монтирование

  • Зависимости: Чтобы под мог использовать NFS-хранилище, на каждой воркер-ноде должен быть установлен пакет nfs-common (для Ubuntu/Debian) или аналогичный. Без него kubelet не сможет выполнить команду mount.
  • Storage Class (SC): Чтобы не создавать PV вручную (Static Provisioning), используется Dynamic Provisioning. Мы создаем Storage Class, и когда появляется PVC, система сама идет в хранилище (например, в облако или Ceph), создает там диск и делает PV автоматически.

Термины урока для запоминания:

  • Sidecar Container: Дополнительный контейнер в поде для вспомогательных задач (сбор логов, прокси).
  • DaemonSet: Гарантирует, что на каждой ноде (или выбранных) запущен ровно один экземпляр пода (идеально для агентов логов).
  • Reclaim Policy: Что делать с данными на PV после удаления PVC (Retain — оставить, Delete — удалить).