logo
发布于

k8s集群中使用namespace隔离不同业务系统

4002-–
作者
  • avatar
    姓名
    zhli

在k8s中,namespace可用于对集群中的资源进行逻辑隔离,将不同业务系统或团队的资源划分为独立的虚拟集群,从而实现资源的隔离和多租户支持。

比如:

  1. 避免了不同业务系统的命名和资源冲突
  2. 精确控制不同团队对集群的访问权限,确保安全性
  3. 不同的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