Kubernetes如何限制不同团队只能访问各自namespace实现
场景说明
假设有这么一个场景:一个 Kubernetes 集群,有多个 namespace,然后每个 namespace 由一个工程团队去使用,不同的工程团队之间无法访问和操作其他团队的 namespace 下的资源,实现资源和权限隔离的目的。
1 | 实现思路
可以利用 Kubernetes 的 RBAC 来实现:
- 在各自的 namespace 下创建一个 ServiceAccount
- 在这个 namespace 下创建一个 Role,定义这个 Role 的权限规则(rules)
- 将这个 Role 和 ServiceAccount 进行绑定
- 最后生成一个kubeconfig,给到各个团队通过 kubectl 命令行调用
2 | 实现的脚本
需要的配置文件已经写好,如下:
- 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 权限的 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: ["*"] # 如果发现生成的kubeconfig权限不足,可以根据提示,在这里添加对应的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 | 使用方式
假设,有 zhangsan,lisi,wangwu 三个团队,namespace 也是 zhangsan,lisi,wangwu。
那么执行脚本如下:
$ bash create_kubeconfig.sh zhangsan $ bash create_kubeconfig.sh lisi $ bash create_kubeconfig.sh wangwu
即可在脚本所在目录,生成对应的kubeconfig:zhangsan-config, lisi-config 和 wangwu-config。 那么,不同团队对k8s集群的访问就可以这样进行:
$ kubectl -n zhangsan --kube-config=zhangsan-config get all
以上就是Kubernetes如何限制不同团队只能访问各自namespace实现的详细内容,更多关于Kubernetes限制namespace的资料请关注脚本之家其它相关文章!
相关文章
Kubernetes如何限制不同团队只能访问各自namespace实现
这篇文章主要为大家介绍了Kubernetes如何限制不同团队只能访问各自namespace实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-04-04
kubelet为cadvisor添加namespace/pod/container标签示例详解
这篇文章主要为大家介绍了kubelet为cadvisor添加namespace/pod/container标签示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-09-09
Kubernetes 1.28.2集群安装过程中的关键步骤详解(最新推荐)
Kubernetes K8s是Google开源的容器编排平台,最初由Borg项目发展而来,K8s 1.28版本引入了非正常节点关闭恢复、内置Sidecar容器支持、Job优化、Proxy改进和调度框架优化等功能,本文介绍Kubernetes 1.28.2集群安装过程中的关键步骤,感兴趣的朋友一起看看吧2025-03-03
K8s中的临时容器Ephemeral Containers使用
这篇文章主要介绍了K8s中的临时容器Ephemeral Containers使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-07-07
详解Rainbond云原生平台简化Kubernetes业务问题排查
这篇文章主要介绍了详解Rainbond云原生平台简化Kubernetes业务问题排查,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-03-03


最新评论