- 发布于
k8s集群中使用namespace隔离不同业务系统
4002-–
- 作者
- 姓名
- zhli
在k8s中,namespace可用于对集群中的资源进行逻辑隔离,将不同业务系统或团队的资源划分为独立的虚拟集群,从而实现资源的隔离和多租户支持。
比如:
- 避免了不同业务系统的命名和资源冲突
- 精确控制不同团队对集群的访问权限,确保安全性
- 不同的namespace可用于划分不同的环境,比如开发、测试、预发布环境,确保环境的独立性
示例如下:
创建一个名称为test的命名空间
namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: test
创建一个角色,并设置角色可访问的apiGroups、resources、verbs
role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: role
namespace: test
rules:
- apiGroups:
- apps
- ''
- batch
- networking.k8s.io
- storage.k8s.io
resources:
- '*'
verbs:
- '*'
创建一个ServiceAccount
serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: sa
namespace: test
将角色和ServiceAccount绑定
rolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: rolebinding
namespace: test
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: role
subjects:
- kind: ServiceAccount
name: sa
namespace: test
使用kubectl apply
大法后,可以把ServiceAccount的token打印出来,后面可以用这个token连接集群
echo $(kubectl -n "$ns" get secret $(kubectl -n "$ns" get secret | grep sa | awk '{print $1}') -o go-template='{{.data.token}}' | base64 -d)
有了token,就可以使用kubectl连接、管理这个命名空间下的集群的资源了
kubectl config set-credentials usr --token=TOKEN
kubectl config set-cluster mycluster --server=xxx --insecure-skip-tls-verify
kubectl config set-context mycontext --cluster=mycluster --user=usr --namespace=test
kubectl config use-context mycontext
kubectl get pod