[英]Kubectl command throwing error: Unable to connect to the server: getting credentials: exec: exit status 2
[英]Limit/Controlled kubectl exec command
我還是 kube.netes 的新手。 但我正在尋找一種方法,讓開發人員可以控制對 kubectl exec 命令的訪問。 我想讓他們運行大部分只讀命令,但阻止一些高風險命令,並阻止交互式下載/安裝等。還想在會話期間記錄他們的所有操作以供審計。
我沒有看到任何使用 rbac 的直接方法。 也沒有在牧場主中看到這些選項。 我正在尋找一些指導和方向來實現這種能力。
我相信你們中的一些人已經以某種方式實現了它。
Kube.netes RBAC 只能在你可以或不能exec
到 pod 時進行驗證(通過檢查create
verb on pods/exec
資源),之后它切換到 SPDY 協議並傳遞你的輸入並從你的docker exec
的模擬返回 output容器運行時,實際上並不關心進出的內容
使用 rbac,您還必須指定 pod 名稱,如果您使用 Deployments,這可能會出現問題,其中每個新修訂版都會生成不同的 pod 名稱。 由於 rbac 中未實現模式匹配 - 每次生成新的 pod 名稱時,您都必須更改您的角色。
所以答案是“不,你不能用 rbac 做到這一點”
另一種解決方案是使用某種 CI/CD(jenkins、gitlab-ci 等)或編排工具(rundeck、ansible-tower 等),您將在其中創建某種腳本,您的開發人員將在其中將 arguments 傳遞給工作,由你控制,即
kubectl exec deploy/foo -- /bin/bar baz "$DEV_ARGUMENT"
從本質上講,這意味着您將負責管理對該作業/腳本的訪問,為該腳本創建和維護 serviceAccount 等。
如果你害怕圖像可變性,即你不希望你的開發人員在運行的容器中安裝一些東西,但是給他們 shell 就可以了(記住,他們仍然可以讀取任何秘密/env vars/configMaps 甚至 serviceAccount pod 使用的令牌默認掛載它們),您應該考慮以下事項:
root
身份運行容器。 嘗試使用支持 rootles 操作的圖像,然后在securityContext
的runAsUser
字段中指定正確的非 root UID,或者配置runAsNonRoot: true
標志以拒絕以 root 身份運行的容器。readOnlyRootFilesystem
使您的 pod 不可變,這將拒絕對 pod 臨時存儲的寫操作(但如果您將任何卷安裝為 RW - 它們仍然可以進行寫操作)。 這種方法的可行性取決於您的應用何時使用某種臨時文件相關鏈接:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.