Kubernetes如何限制不同團隊只能訪問各自namespace實現(xiàn)
場景說明
假設(shè)有這么一個場景:一個 Kubernetes 集群,有多個 namespace,然后每個 namespace 由一個工程團隊去使用,不同的工程團隊之間無法訪問和操作其他團隊的 namespace 下的資源,實現(xiàn)資源和權(quán)限隔離的目的。
1 | 實現(xiàn)思路
可以利用 Kubernetes 的 RBAC 來實現(xiàn):
- 在各自的 namespace 下創(chuàng)建一個 ServiceAccount
- 在這個 namespace 下創(chuàng)建一個 Role,定義這個 Role 的權(quán)限規(guī)則(rules)
- 將這個 Role 和 ServiceAccount 進行綁定
- 最后生成一個kubeconfig,給到各個團隊通過 kubectl 命令行調(diào)用
2 | 實現(xiàn)的腳本
需要的配置文件已經(jīng)寫好,如下:
- create_kubeconfig.sh
#!/bin/bash
# Created by lanbitou 03.29.2023
ns=$1
name=$ns
user=$name
kubeconfig=$ns"-config"
# kubernetes master api server 地址, 需要替換掉
apiserver="https://123.456.789.ABC:6443"
cluster="cluster_name_"$ns
context=$cluster
name=$name ns=$ns envsubst < create-role-rolebinding.yaml | kubectl apply -f -
if [ $? != 0 ]
then
echo "error, exit=1"
exit 1
fi
token=$(kubectl -n $ns get secret $(kubectl -n $ns get secret | grep $user | awk '{print $1}') -o go-template='{{.data.token}}' | base64 -d)
echo $token
kubectl config set-credentials $user --token=$token --kubeconfig=$kubeconfig
kubectl config set-cluster $cluster --insecure-skip-tls-verify=true --server=$apiserver --kubeconfig=$kubeconfig
kubectl config set-context $context --cluster=$cluster --user=$user --kubeconfig=$kubeconfig
kubectl config use-context $context --kubeconfig=$kubeconfig
echo $kubeconfig' is created in the current path.'
NOTE
這個腳本要在 Kubernetes admin 權(quán)限的 kubeconfig 下運行。
- create-role-rolebinding.yaml
apiVersion: v1 kind: ServiceAccount metadata: name: $name namespace: $ns --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: $ns name: $name rules: - apiGroups: ["", "extensions", "apps"] #resources: ["pods", "services", "configmaps", "secrets","deployments","replicasets","statefulsets","daemonsets","pods/log","pods/exec","namespaces"] resources: ["*"] verbs: ["*"] - apiGroups: ["batch"] resources: ["jobs","cronjobs"] verbs: ["*"] - apiGroups: ["apiextensions.k8s.io"] resources: ["customresourcedefinitions"] verbs: ["*"] # 如果發(fā)現(xiàn)生成的kubeconfig權(quán)限不足,可以根據(jù)提示,在這里添加對應(yīng)的rule --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: $name namespace: $ns subjects: - kind: ServiceAccount name: $name namespace: $ns roleRef: kind: Role name: $name apiGroup: rbac.authorization.k8s.io
3 | 使用方式
假設(shè),有 zhangsan,lisi,wangwu 三個團隊,namespace 也是 zhangsan,lisi,wangwu。
那么執(zhí)行腳本如下:
$ bash create_kubeconfig.sh zhangsan $ bash create_kubeconfig.sh lisi $ bash create_kubeconfig.sh wangwu
即可在腳本所在目錄,生成對應(yīng)的kubeconfig:zhangsan-config, lisi-config 和 wangwu-config。 那么,不同團隊對k8s集群的訪問就可以這樣進行:
$ kubectl -n zhangsan --kube-config=zhangsan-config get all
以上就是Kubernetes如何限制不同團隊只能訪問各自namespace實現(xiàn)的詳細內(nèi)容,更多關(guān)于Kubernetes限制namespace的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Kubernetes如何限制不同團隊只能訪問各自namespace實現(xiàn)
這篇文章主要為大家介紹了Kubernetes如何限制不同團隊只能訪問各自namespace實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-04-04
kubelet為cadvisor添加namespace/pod/container標簽示例詳解
這篇文章主要為大家介紹了kubelet為cadvisor添加namespace/pod/container標簽示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09
Kubernetes 1.28.2集群安裝過程中的關(guān)鍵步驟詳解(最新推薦)
Kubernetes K8s是Google開源的容器編排平臺,最初由Borg項目發(fā)展而來,K8s 1.28版本引入了非正常節(jié)點關(guān)閉恢復(fù)、內(nèi)置Sidecar容器支持、Job優(yōu)化、Proxy改進和調(diào)度框架優(yōu)化等功能,本文介紹Kubernetes 1.28.2集群安裝過程中的關(guān)鍵步驟,感興趣的朋友一起看看吧2025-03-03
K8s中的臨時容器Ephemeral?Containers使用
這篇文章主要介紹了K8s中的臨時容器Ephemeral?Containers使用,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07
詳解Rainbond云原生平臺簡化Kubernetes業(yè)務(wù)問題排查
這篇文章主要介紹了詳解Rainbond云原生平臺簡化Kubernetes業(yè)務(wù)問題排查,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03

