Вопрос или проблема
Я изучаю Kubernetes уже неделю, чтобы применить его к побочному проекту. Но только что я столкнулся с проблемой, которая, похоже, связана с моим аккаунтом Ubuntu.
вставьте описание изображения здесь
Если я выполняю команду kubectl create -f
со своим стандартным аккаунтом GCP Web SSH, всё работает без проблем.
вставьте описание изображения здесь
Однако, если я выполняю ту же команду с аккаунтом root, она выдает ошибку, и появляется следующее сообщение об ошибке.
Ошибка от сервера (Доступ запрещен): ошибка при создании "http-go-pod-v2.yaml": pods "http-go" запрещены: у pod отсутствует аннотация "kubernetes.io/config.mirror", узел "master-1" может создавать только зеркальные поды
Я выяснил, что проблем нет, если я использую стандартный аккаунт, но я хочу решить эту проблему с самого начала с детализацией.
Почему аккаунт root не может запускаться?
Ответ или решение
Ошибка выполнения команды kubectl create -f
с учетной записью root в Kubernetes может быть связана с несколькими ключевыми аспектами, обращая внимание на права доступа и архитектуру Kubernetes. Давайте подробно рассмотрим причины, почему команда, выполненная от имени пользователя root, может завершиться ошибкой, в отличие от выполнения от стандартной учетной записи.
Проблема с правами доступа
-
RBAC (Role-Based Access Control):
Kubernetes использует систему контроля доступа на основе ролей (RBAC), чтобы управлять правами пользователей и сервисов. Учетная запись, использованная для выполнения команд kubectl, должна иметь соответствующие разрешения для создания ресурсов в кластере. Обычно при работе с учетной записью по умолчанию пользователю могут быть предоставлены необходимые права через роли или кластерные роли, тогда как учетная запись root может не иметь таких прав. -
Контекст и конфигурация kubectl:
Важно также отметить, что kubectl использует kubeconfig для хранения информации о конфигурации и контексте кластера. Если root пользователь использует другое kubeconfig (например, прописанное по умолчанию ~/.kube/config), это может приводить к несоответствующим правам доступа.
Проблема с аннотациями пода
Ошибка, которую вы видите:
Error from server (Forbidden): error when creating "http-go-pod-v2.yaml": pods "http-go" is forbidden: pod does not have "kubernetes.io/config.mirror" annotation, node "master-1" can only create mirror pods
указывает на то, что при выполнении команды от имени root Kubernetes ожидает, что созданный под будет иметь специфическую аннотацию. Это связано с тем, что master-узел (или узел, на который вы пытаетесь создать под) настроен на разрешение только "зеркальных" подов. Этот сценарий часто возникает при неправильной конфигурации или политике безопасности на уровне узла.
- Зеркальные поды:
Зеркальные поды – это поды, которые управляются kubelet и используются для обеспечения работы в сетевой связке. Они автоматически создаются на основе развертывания, но могут не поддерживать операции, выполненные от имени root без соответствующих аннотаций.
Рекомендации по решению проблемы
-
Проверьте права доступа: Убедитесь, что root-учетная запись имеет права на создание подов. Для этого используйте команды kubectl для просмотра текущих ролей и разрешений.
-
Используйте соответствующую учетную запись: Если ваша стандартная учетная запись работает без проблем, может быть разумно продолжить использовать её для ваших операций в Kubernetes.
-
Обновите YAML файл: Если вы хотите управлять ресурсами от имени root, вам необходимо добавить необходимую аннотацию
kubernetes.io/config.mirror
в ваш YAML файл или изменить конфигурацию вашего кластера, чтобы разрешить создание подов без этой аннотации.
Для комплексного понимания работы с Kubernetes важно хорошо разбираться в системах контроля доступа и управлении ресурсами. Курсы или дополнительная литература по Kubernetes могут значительно помочь в уяснении этих аспектов и избежании подобных проблем в будущем.