2015-11-18 50 views
2

我發送了一個在Ubuntu上運行Kubernetes的4節點集羣(1個主控3個工人)。我打開--authorization模式= ABAC併成立了政策文件,類似下面的在kubernetes授權模式下使用kubectl ABAC

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

我想用戶bob的條目,從而只能看着資源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,並且在名稱空間檢查時失敗。

我還沒有將Kubernetes的最新版本1.1.1升級,但看看代碼,我沒有看到這方面的任何變化。

有誰知道如何配置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。