Kubernetes怎么限制不同团队只能访问各自namespace
本文小编为大家详细介绍“Kubernetes怎么限制不同团队只能访问各自namespace”,内容详细,步骤清晰,细节处理妥当,希望这篇“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.2023ns=$1name=$nsuser=$namekubeconfig=$ns"-config"# kubernetes master api server 地址, 需要替换掉apiserver="https://123.456.789.ABC:6443"cluster="cluster_name_"$nscontext=$clustername=$name ns=$ns envsubst < create-role-rolebinding.yaml | kubectl apply -f -if [ $? != 0 ]then echo "error, exit=1" exit 1fitoken=$(kubectl -n $ns get secret $(kubectl -n $ns get secret | grep $user | awk '{print $1}') -o go-template='{{.data.token}}' | base64 -d)echo $tokenkubectl config set-credentials $user --token=$token --kubeconfig=$kubeconfigkubectl config set-cluster $cluster --insecure-skip-tls-verify=true --server=$apiserver --kubeconfig=$kubeconfigkubectl config set-context $context --cluster=$cluster --user=$user --kubeconfig=$kubeconfigkubectl config use-context $context --kubeconfig=$kubeconfigecho $kubeconfig' is created in the current path.'
NOTE
这个脚本要在 Kubernetes admin 权限的 kubeconfig 下运行。
create-role-rolebinding.yaml
apiVersion: v1kind: ServiceAccountmetadata: name: $name namespace: $ns---apiVersion: rbac.authorization.k8s.io/v1kind: Rolemetadata: namespace: $ns name: $namerules:- 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/v1kind: RoleBindingmetadata: name: $name namespace: $nssubjects:- kind: ServiceAccount name: $name namespace: $nsroleRef: 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”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341