k8s环境实现kubectl绑定到一个namespace
描述我们日常操作k8s大多使用的是kubectl。突然有一天,我有个想法:各个部门都在用一个k8s环境,如果不做隔离,岂不乱套了?我的想法就是:为一个部门创建一个namespace,然后把这个部门的机器上的kubectl绑定到这个namespace下。依据具体的实现就是利用k8s的RBAC, 将kubectl的用户或者组,结合roblebinding和admin集群角色绑定,从而实现kub...
描述
我们日常操作k8s大多使用的是kubectl。突然有一天,我有个想法:各个部门都在用一个k8s环境,如果不做隔离,岂不乱套了?我的想法就是:为一个部门创建一个namespace,然后把这个部门的机器上的kubectl绑定到这个namespace下。
依据
具体的实现就是利用k8s的RBAC, 将kubectl的用户或者组,结合roblebinding和admin集群角色绑定,从而实现kubectl只能操作一个namespace。
实现
- 生成证书请求
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命名空间的
上图证明这个kubectl能访问monitoring命名空间
赘述一下
如果想限制namespace的资源, 可以为namespace设置ResourceQuota。资源类型:
- 计算资源
- cpu
- 内存
- 存储资源
- 存储资源总量
- pvc的个数
- 对象数
- pods
- resourcequotas
- persistentvolumeclaims
- services, services.loadbalancers, services.nodeports
先写的这里了,如果有问题或者异议,请进QQ群630300475,大家聊聊
更多推荐
所有评论(0)