2015-11-18 23 views
2

Я отправил кластер из 4 узлов (1 мастер 3 рабочих), на котором запущен Kubernetes на Ubuntu. Я включил --authorization режиме = ДКС и создать файл политики с записью, как следующийИспользование kubectl с режимом авторизации Kubernetes ABAC

{"user":"bob", "readonly": true, "namespace": "projectgino"}

Я хочу, чтобы пользователь боб, чтобы только быть в состоянии смотреть на ресурсы в projectgino. У меня возникают проблемы с использованием командной строки kubectl в качестве пользователя Bob. Когда я запускать следующую команду

kubectl get pods --token=xxx --namespace=projectgino --server= https://xxx.xxx.xxx.xx:6443

Я получаю следующую ошибку

error: couldn't read version from server: the server does not allow access to the requested resource

Я проследил код команды kubectl строки и проблема, кажется, вызвана kubectl вызывающей функции NegotiateVersion в упак/клиента/помощника. идти. Это вызывает вызов/api на сервере, чтобы получить версию Kubernetes. Этот вызов терпит неудачу, потому что путь останова не содержит projectgino пространства имен. Я добавил код трассировки в pkg/auth/authorizer/abac/abac.go, и он не прошел проверку пространства имен.

Я еще не перешел к последней версии 1.1.1 Kubernetes, но, глядя на код, я не видел ничего, что изменилось в этой области.

Кто-нибудь знает, как настроить Kubernetes, чтобы обойти проблему?

ответ

1

Это недостающая функциональность в ABAC authorizer. Исправлено: #16148.

Что касается временного решения, от the authorization doc:

For miscellaneous endpoints, like /version, the resource is the empty string.

Таким образом, вы можете быть в состоянии решить путем определения политики:

{"user":"bob", "readonly": true, "resource": ""}

(обратите внимание на пустую строку ресурса), чтобы предоставить доступ к неверсированные конечные точки. Если это не работает, я не думаю, что есть обходное решение, которое позволит вам использовать kubectl с --authorization-mode = ABAC.

Смежные вопросы