2016-04-28 99 views

回答

3

據我所知,沒有辦法通過CRL直接吊銷證書。但是,什麼工作,以及我們目前使用的是ABAC policies以識別用戶(通過證書的公用名設置)以及他們是否有權訪問Kubernetes上的給定資源。

舉個例子,假設你有一個叫做「random」的用戶。您將從您指定的證書頒發機構爲其生成一份客戶證書,並使用通用名稱「隨機」。

從那裏,你可以有一個ABAC策略文件(一個csv文件,每一行都是JSON位),爲用戶設置「隨機」權限,爲用戶提供對Kubernetes API的特定級別訪問。您可以讓他們有權訪問所有內容或某些名稱空間或其他API參數。如果您需要撤消權限,則只需從ABAC策略文件中刪除該用戶即可。我們已經測試過了,它運行良好。不幸的是,我會說,你必須重新啓動 Kubernetes API服務才能使這些更改生效,因此可能會發生幾秒鐘的停機時間。很顯然,在開發環境中這不是什麼大問題,但是在生產中,您可能需要爲用戶添加時間。

希望未來一個簡單的「kube-apiserver重新加載」將允許重新讀取該ABAC策略文件。

最後要注意的一點是:當使用客戶端證書進行ABAC認證時,您需要爲用戶INDIVIDUALLY設置權限。與使用ABAC的授權令牌不同,您不能在「組」中設置客戶端證書用戶。一些令我們頭痛的事情,所以認爲值得傳遞。 :)

希望這有助於!

+0

感謝您的解答,解釋和建議。目前,我的k8s集羣中有4組密鑰和crts,分別是'apiserver','other master component','minions',最後一個是'kubectl'。起初,我想知道一種方法來解決像其中一個人丟失的問題。現在看來,ABAC政策是最好的選擇。一個愚蠢的問題,哪種燙髮適合於只能製造豆莢的kubectl? – Yang

+1

@Yang在這種情況下丟失證書肯定是不幸的,但不幸的是,我認爲答案仍然是從ABAC中刪除該用戶,並創建一個新用戶。例如,如果「隨機」丟失了他們的證書,則可能必須爲該用戶創建一個具有新證書的「random2」用戶。我知道社區一直在討論將CRL支持添加到更高版本的Kubernetes,但是現在撤消證書是不可能的。一個可能的解決辦法可能是在Kube API前面檢查HAProxy/NGINX以檢查撤銷的證書。 –

+1

感謝這麼多詳細的暗示,我非常感謝,特別是HAProxy/NGINX的想法,它使我轉向了XD – Yang