k8s环境实现kubectl绑定到一个namespace

描述

我们日常操作k8s大多使用的是kubectl。突然有一天,我有个想法:各个部门都在用一个k8s环境,如果不做隔离,岂不乱套了?我的想法就是:为一个部门创建一个namespace,然后把这个部门的机器上的kubectl绑定到这个namespace下。
k8s环境实现kubectl绑定到一个namespace_第1张图片

依据

具体的实现就是利用k8s的RBAC, 将kubectl的用户或者组,结合roblebinding和admin集群角色绑定,从而实现kubectl只能操作一个namespace。
k8s环境实现kubectl绑定到一个namespace_第2张图片

实现

  • 生成证书请求
  openssl req -new -key /etc/kubernetes/pki/ca.key -subj '/CN=monitor' -out monitor_user.csr

上面生成了一个CN是monitor的证书请求

  • 生成证书
 openssl x509 -req -in monitor_user.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out monitor_user.crt -days 5000
  • 生成一个kubectl使用的配置文件
kubectl config set-cluster monitor \
  --certificate-authority=/app/k8s/ca.crt \
  --embed-certs=true \
  --server=https://172.31.255.132:6443 \
  --kubeconfig=kubectl.kubeconfig

ca.crt是访问apiserver使用的证书,如果是kubeadm安装的,这个文件在/etc/kubernetes/pki目录下
kubectl.kubeconfig是生成的文件

  • 配置文件中新增一个用户
  kubectl config set-credentials monitor \
  --client-certificate=/app/k8s/monitor_user.crt \
  --client-key=/app/k8s/ca.key\
  --embed-certs=true \
  --kubeconfig=kubectl.kubeconfig

monitor_user.crt 这个是上面生成的证书
ca.key 解密证书的公钥

  • 创建一个上下文
 kubectl config set-context monitor \
  --cluster=monitor \
  --user=monitor \
  --kubeconfig=kubectl.kubeconfig
  • 创建rolebinding
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: monitor-role-binding
  namespace: monitoring
subjects:
- kind: User
  name: monitor
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: admin
  apiGroup: rbac.authorization.k8s.io

kubectl apply -f <文件名>

  • 拷贝kubectl.kubeconfig到,kubectl的机器上的 <某个用户的家目录>/.kube/config
  • 切换上下文(在kubectl的机器上)
  kubectl config use-context monitor --kubeconfig=/root/.kube/config 

测试

在这里插入图片描述
上图证明这个kubctl是不能访问default和kube-system命名空间的
k8s环境实现kubectl绑定到一个namespace_第3张图片
上图证明这个kubectl能访问monitoring命名空间

赘述一下

如果想限制namespace的资源, 可以为namespace设置ResourceQuota。资源类型:

  • 计算资源
    • cpu
    • 内存
  • 存储资源
    • 存储资源总量
    • pvc的个数
  • 对象数
  • pods
  • resourcequotas
  • persistentvolumeclaims
  • services, services.loadbalancers, services.nodeports

先写的这里了,如果有问题或者异议,请进QQ群630300475,大家聊聊

你可能感兴趣的:(k8s)