03 01 configure‑kubectl - kropachev/1c-devops-jr GitHub Wiki
Настройка kubectl
kubectl - это клиент для управления Kubernetes (кластером). После установки K3s kubectl уже установлен, но при выполнении команд от обычного пользователя возникает ошибка:
Unable to read /etc/rancher/k3s/k3s.yaml ... permission denied
K3s создает kubeconfig (файл с параметрами доступа к кластеру Kubernetes) /etc/rancher/k3s/k3s.yaml.
По умолчанию K3s записывает этот файл с правами 0600, то есть доступ к нему имеет только пользователь root из соображений безопасности.
В документации K3s описаны параметры write-kubeconfig-mode и write-kubeconfig-group, которые управляют правами и группой-владельцем файла kubeconfig. Мы используем write-kubeconfig-group вместе с режимом 0640, чтобы дать доступ только ограниченному кругу пользователей (через группу), не делая kubeconfig читаемым для всех пользователей на хосте.
Мы используем именно этот вариант по нескольким причинам:
- соответствует принципу наименьших привилегий
- подходит для CI и сервисных пользователей
- является официально поддерживаемым механизмом конфигурации K3s
Ссылка на документацию - https://docs.k3s.io/reference/server-config#write-kubeconfig-group.
Настраиваем доступ к kubeconfig через группу
K3s поддерживает декларативную конфигурацию через файл /etc/rancher/k3s/config.yaml.
Все параметры в этом файле эквивалентны параметрам командной строки k3s server и являются поддерживаемым способом конфигурации K3s описанным в документации - https://docs.k3s.io/installation/configuration
Указываем K3s группу доступа к kubeconfig
На этапе подготовки мы создавали группу пользователей k3s, теперь даем этой группе права.
Открой файл конфигурации K3s:
sudo mkdir -p /etc/rancher/k3s
sudo nano /etc/rancher/k3s/config.yaml
добавляем параметры:
write-kubeconfig-group: "k3s"
write-kubeconfig-mode: "0640"
write-kubeconfig-group- параметр сервера K3s, определяющий группу-владельца kubeconfigwrite-kubeconfig-mode: 0640- разрешает чтение файла только владельцу и группе
В результате kubectl будет работать у пользователей, входящих в группу k3s.
После изменения конфигурации нужно перезапустить сервис K3s
sudo systemctl restart k3s
Проверяем, что файл имеет корректного владельца, группу и права:
ls -l /etc/rancher/k3s/k3s.yaml
Ожидаемый результат:
-rw-r----- 1 root k3s ... k3s.yaml
Это означает, что доступ есть только у root и группы k3s.
Проверка работы kubectl
Теперь kubectl должен работать без sudo для пользователей, входящих в группу k3s:
kubectl get nodes
Если отображается node со статусом Ready, значит kubectl успешно подключился к кластеру.