Доступ к главному серверу K8S с удаленного сервера через определенного c пользователя - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь имитировать доступ на основе ролей с внешнего сервера. Мой сценарий заключается в том, что мне нужен пользователь «разработчик», который имеет доступ только для создания / удаления / перечисления модулей и имеет доступ к утверждениям о постоянных томах. У меня есть роль и привязка ролей. Я протестировал его, используя

[root@K8Smaster ~]# kubectl auth can-i create pods --as=developer
yes

, так что я знаю, что эта часть работает. Как вы можете видеть, это делается на главном сервере K8S.

Чтобы заставить его работать на внешнем сервере I

openssl genrsa -out developer.key 2048

openssl req -new -key developer.key -subj "/CN=developer/O=User" -out developer.csr

(я полагаю, CN и O на самом деле ничего не значат ... .или они должны что-то совпадать? Я сопоставил имя CN с пользователем "разработчик")

openssl x509 -req -in developer.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out developer.crt

Я скопировал файлы ca.cert / developer.crt / developer.key на свой внешний сервер .

На моем внешнем сервере я установил kubectl.

Я следил за https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/

Хотя не совсем понятно, на каком сервере я их создаю файлы и запускать команды на (главном или удаленном) кажется, что создание контекста находится на главном сервере, а все остальное - на удаленном

На удаленном сервере, если я запускаю

 [developer@server ~]$ kubectl get pods
The connection to the server 10.237.107.61 was refused - did you specify the right host or port?

Или если он работает

    curl https://10.237.107.61:6443/api/v1/pods --key developer.key --cert developer.crt --cacert ca.crt
{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {

  },
  "status": "Failure",
  "message": "pods is forbidden: User \"system:anonymous\" cannot list resource \"pods\" in API group \"\" at the cluster scope",
  "reason": "Forbidden",
  "details": {
    "kind": "pods"
  },

Не уверен, что мне не хватает.

1 Ответ

1 голос
/ 11 мая 2020

Kubectl использует файл конфигурации, который необходим для подключения к кластеру. Возможно, ваш файл конфигурации несовместим из-за множества серьезных или незначительных изменений. Если дальнейший анализ проблем не дает хороших результатов, попробуйте rm -f ~/.kube/config и начните его с нуля.

Как я вижу, вы подозреваете, что проблема связана с самоподписанными сертификатами. Может потребоваться обновление кластера root Центр сертификации (CA) на клиентах, а затем обновление локального списка для допустимых сертификатов.

Go в локальный каталог CA, проверьте, существует ли файл ca.crt, затем скопируйте это своим клиентам. Для клиентов выполните следующие операции:

$ sudo cp ca.crt /usr/local/share/ca-certificates/kubernetes.crt
$ sudo update-ca-certificates

cluster: тег принимает либо имя файла сертификата CA, либо «встроенную» версию PEM в формате base64, которую вы можете увидеть с помощью:

$ kubectl config set-cluster $foo --certificate-authority=... --embed-certs=true

Во время развертывания вы должны также настроить кластер и пользователя на внешнем сервере.

Выполните команду ниже:

$ kubectl config --kubeconfig=your_kubeconfig_path set-context abc --cluster=10.237.107.61:6443 --user=developer --namespace=default

Контекст обозначает пространство имен / имя-кластера - в вашем случае IP-адрес кластера / пользователь-кластера.

$ kubectl config use-context abc

Пока вы вводите команду kubectl, действие будет применяться к кластеру и пространству имен, перечисленному в контексте abc . И команда будет использовать учетные данные пользователя, указанного в контексте abc`.

Наконец, если это не работает на внешнем сервере, попробуйте скопировать только данные, связанные с пользователем-разработчиком, из файла kubeconfig на главном k8s и скопировать его в файл kubeconfig внешнего сервера, затем снова запустите эту команду.

Если вы запустите локальный Kubernetes, настроенный с помощью Vagrant , вы заметите, что файл ~/.kube/config настраивается автоматически после кластеры поднимаются; вы также почувствуете утешение, что скрипты, которые предоставляют кубернеты внутри vagrant, также используют эти команды для настройки вашего ~ / .kube / config .

Пожалуйста, посмотрите: подключение -to-cluster , вход в кластер .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...