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, определяющий группу-владельца kubeconfig
  • write-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 успешно подключился к кластеру.