Deckhouse Platform (DP) поддерживает размещение нескольких файлов kubeconfig на master-узлах (поддержка реализуется модулем control-plane-manager). Понимание их назначения важно для безопасного администрирования кластера.

Файлы kubeconfig на master-узлах

На master-узлах размещаются следующие файлы kubeconfig:

Файл Идентификация Назначение
/etc/kubernetes/admin.conf kubernetes-admin (группа kubeadm:cluster-admins) Машинный kubeconfig для внутренних операций kubeadm (join, обновление). При включённом модуле user-authz RBAC использует user-authz:cluster-admin и дополнительную ClusterRole. При выключенном user-authz группа привязана к встроенной роли cluster-admin
/etc/kubernetes/super-admin.conf kubernetes-super-admin (группа system:masters) Аварийный доступ (break-glass). Обходит RBAC полностью. Ограничьте доступ к файлу сценариями восстановления
/etc/kubernetes/controller-manager.conf system:kube-controller-manager Используется kube-controller-manager
/etc/kubernetes/scheduler.conf system:kube-scheduler Используется kube-scheduler

Административный доступ на основе RBAC

Начиная с Kubernetes 1.29, kubeadm генерирует admin.conf с группой kubeadm:cluster-admins вместо system:masters. Это обеспечивает управляемый через RBAC административный доступ, который может быть отозван путём удаления ClusterRoleBinding kubeadm:cluster-admins (или нескольких привязок).

Если модуль user-authz выключен, DP привязывает группу kubeadm:cluster-admins к встроенной роли cluster-admin с wildcard-правами (как в обычном кластере kubeadm без дополнительной настройки RBAC).

Если модуль user-authz включён, группа привязывается к user-authz:cluster-admin, а вторая ClusterRoleBinding добавляет роль d8:control-plane-manager:admin-kubeconfig-supplement (правила сверх высокоуровневой роли, например, для сертификатов и компонентов control plane). Вместе они заменяют одну wildcard-роль cluster-admin для этой идентичности. Для полного неограниченного доступа используйте super-admin.conf.

Рекомендуемый административный доступ

Если модуль user-authn включён, используйте персонализированный kubeconfig на основе OIDC, получаемый через kubeconfig-генератор. Это обеспечивает индивидуальную ответственность и журнал аудита.

Если user-authn отключён, вы можете явно использовать административный kubeconfig на master-узле:

d8 k --kubeconfig=/etc/kubernetes/admin.conf <команда>

Символическая ссылка root kubeconfig

По умолчанию модуль control-plane-manager создаёт символическую ссылку /root/.kube/config → /etc/kubernetes/admin.conf на master-узлах, что позволяет root-пользователю запускать d8 k без указания --kubeconfig.

Если модуль user-authz включён, это поведение можно отключить, задав rootKubeconfigSymlink: false в конфигурации модуля control-plane-manager:

apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: control-plane-manager
spec:
  version: 2
  enabled: true
  settings:
    rootKubeconfigSymlink: false

Если модуль user-authz выключен, control-plane-manager не использует параметр rootKubeconfigSymlink и сохраняет поведение по умолчанию (символическая ссылка создаётся).

При отключении символической ссылки (при включённом user-authz) ссылка удаляется, если она указывала на admin.conf. Используйте персонализированные учётные данные или явно указывайте --kubeconfig.

Усиление безопасности

Модуль control-plane-manager автоматически ограничивает права доступа к файлам admin.conf и super-admin.conf до 0600 (чтение/запись только для владельца) при каждом цикле согласования. Это предотвращает несанкционированный доступ к этим конфиденциальным учётным данным.

Аварийный доступ (break-glass) к кластеру

В экстренных ситуациях (например, при ошибках в конфигурации RBAC, отказе вебхуков) используйте super-admin.conf:

d8 k --kubeconfig=/etc/kubernetes/super-admin.conf <команда>

Эти учётные данные обходят все проверки RBAC. Используйте их только в крайнем случае и ограничьте круг лиц с доступом к файлу super-admin.conf.

Дополнительные ресурсы