Kubernetes管理篇:用户权限管理工具permission-manager
《Kubernetes管理篇:用户权限管理工具permission-manager》
文章目录
一、背景
二、Permission manager
2.1、下载源码包
2.2、创建namespace
2.3、创建存储配置的Secert
2.4、映射端口暴露服务
2.5、部署permission-manager服务
2.6、使用Permission Manager
2.7、普通用户访问k8s集群
三、总结
总结:整理不易,如果对你有帮助,可否点赞关注一下?
一、背景
kubernetes应用越来越广泛,我们kubernetes集群中也会根据业务来划分不同的命名空间,随之而来的就是安全权限问题,我们不可能把集群管理员账号分配给每一个人,有时候可能需要限制某用户对某些特定命名空间的权限,比如开发和测试人员也可能需要登录集群,了解应用的运行情况,查看pod的日志,甚至是修改某些配置。这时候,我们可以通过创建受限的kubeconfig文件,将该config分发给有需要的人员,让他们能通过kubectl命令实现一些允许的操作。
Permission Manager是一个简单便捷的RBAC管理界面工具,支持通过Web界面创建用户,分配Namespace权限,并可以生成相应的Kubeconfig 文件。
建议先下载:部署permission-manager-v1.6.0资源包
二、Permission manager
2.1、下载源码包
当前k8s集群版本为1.20.6,Permission manager版本为v1.6.0
[root@k8s-master-242 opt]# wget https://github.com/sighupio/permission-manager/archive/refs/tags/v1.6.0.zip
[root@k8s-master-242 opt]# unzip v1.6.0.zip
[root@k8s-master-242 opt]# cd permission-manager-1.6.0/deployments/kubernetes
1
2
3
2.2、创建namespace
[root@k8s-master-242 opt]# kubectl create namespace permission-manager
1
2.3、创建存储配置的Secert
[root@k8s-master-242 opt]# cd permission-manager-1.6.0/deployments/kubernetes
[root@k8s-master-242 kubernetes]# vim secret.yaml
---
apiVersion: v1
kind: Secret
metadata:
name: permission-manager
namespace: permission-manager
type: Opaque
stringData:
PORT: "4000" # port where server is exposed
CLUSTER_NAME: "kubernetes" # name of the cluster to use in the generated kubeconfig file
CONTROL_PLANE_ADDRESS: "https://192.168.1.242:8443" # full address of the control plane to use in the generated kubeconfig file
BASIC_AUTH_PASSWORD: "admin" # password used by basic auth (username is `admin`)
[root@k8s-master-242 kubernetes]# kubectl apply -f secret.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
说明:
1、CLUSTER_NAME为在生成的kubeconfig文件中使用的集群名称,可使用kubectl config get-clusters命令查看
2、CONTROL_PLANE_ADDRESS为在生成的kubeconfig文件中使用的kube-apiserver的地址,可使用kubectl cluster-info命令查看
3、BASIC_AUTH_PASSWORD为web页面的登陆密码,默认登录账户为admin
2.4、映射端口暴露服务
说明:将service改为NodePort方式,设置了暴露的端口为33000
#1、查看k8s集群service端口范围
[root@k8s-master-242 kubernetes]# cat /etc/kubernetes/manifests/kube-apiserver.yaml | grep service-node-port-range
- --service-node-port-range=30000-36000
#2、修改deploy.yaml文件
#修改前
---
apiVersion: v1
kind: Service
metadata:
namespace: permission-manager
name: permission-manager
spec:
selector:
app: permission-manager
ports:
- protocol: TCP
port: 4000
targetPort: 4000
#修改后
---
apiVersion: v1
kind: Service
metadata:
namespace: permission-manager
name: permission-manager
spec:
selector:
app: permission-manager
type: NodePort
ports:
- protocol: TCP
port: 4000
targetPort: 4000
nodePort: 33000
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
2.5、部署permission-manager服务
[root@k8s-master-242 kubernetes]# kubectl apply -f crd.yml
Warning: apiextensions.k8s.io/v1beta1 CustomResourceDefinition is deprecated in v1.16+, unavailable in v1.22+; use apiextensions.k8s.io/v1 CustomResourceDefinition
customresourcedefinition.apiextensions.k8s.io/permissionmanagerusers.permissionmanager.user unchanged
[root@k8s-master-242 kubernetes]# kubectl apply -f seed.yml
clusterrole.rbac.authorization.k8s.io/template-namespaced-resources___operation unchanged
clusterrole.rbac.authorization.k8s.io/template-namespaced-resources___developer unchanged
clusterrole.rbac.authorization.k8s.io/template-cluster-resources___read-only unchanged
clusterrole.rbac.authorization.k8s.io/template-cluster-resources___admin unchanged
[root@k8s-master-242 kubernetes]# kubectl apply -f deploy.yml
service/permission-manager created
deployment.apps/permission-manager created
serviceaccount/permission-manager created
clusterrole.rbac.authorization.k8s.io/permission-manager created
Warning: rbac.authorization.k8s.io/v1beta1 ClusterRoleBinding is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 ClusterRoleBinding
clusterrolebinding.rbac.authorization.k8s.io/permission-manager created
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
说明:permission-manager部署完成了,Warning信息可忽略或者自行修改yaml文件中api版本为rbac.authorization.k8s.io/v1
2.6、使用Permission Manager
1、查看permission-manager服务所在主机ip和服务端口
[root@k8s-master-242 kubernetes]# kubectl get pods -n permission-manager -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
permission-manager-6784fbc785-xqnvp 1/1 Running 0 2m35s 10.48.252.12 k8s-worker-227 <none> <none>
[root@k8s-master-242 kubernetes]# kubectl get svc -n permission-manager
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
permission-manager NodePort 10.96.217.8 <none> 4000:33000/TCP 2m39s
1
2
3
4
5
6
2、打开Permission Manager登陆页面
说明:首次打开Permission Manager登陆页面,会让我们输入用户名和密码,用户名为admin,密码就是上面的 secert.yaml 文件中定义的 BASIC_AUTH_PASSWORD。登陆后,首页如下:
3、新建用户
说明:点击首页的create new user去创建一个用户授予其拥有访问default这个namespace的只读权限。
4、点击show kubeconfig for read查看kubeconfig文件
5、将kubeconfig文件中的内容复制并保存为文件config,如下图所示
6、访问授权的default命名空间时,权限正常
[root@k8s-master-242 kubernetes]# kubectl --kubeconfig=read get pod -n default
NAME READY STATUS RESTARTS AGE
nginx-deployment-7fd9f84fd-6ds6h 1/1 Running 0 3d7h
1
2
3
7、访问未授权的其它命名空间时,显示如下报错
[root@k8s-master-242 kubernetes]# kubectl --kubeconfig=read get pod -n kube-system
Error from server (Forbidden): pods is forbidden: User "system:serviceaccount:permission-manager:read" cannot list resource "pods" in API group "" in the namespace "kube-system"
1
2
2.7、普通用户访问k8s集群
说明:由于单独给开发创建了一个普通用户登录服务器,现在开发需要访问k8s集群default名称空间,但是只能给予只读权限。
操作步骤:
#1、参考上面操作创建一个只读用户read,同时赋予default名称空间只读权限
#2、创建只读用户read
[root@k8s-master-242 kubernetes]# useradd read
[root@k8s-master-242 kubernetes]# cp -ar /root/.kube /home/read/
[root@k8s-master-242 kubernetes]# \cp read /home/read/.kube/config
[root@k8s-master-242 kubernetes]# chown read.read /home/read/.kube -R
#3、访问授权的default命名空间时,权限正常
[read@k8s-master-242 kubernetes]$ kubectl get pods -n default
NAME READY STATUS RESTARTS AGE
nginx-deployment-7fd9f84fd-6ds6h 1/1 Running 0 3d7h
#4、访问未授权的其它命名空间时,显示如下报错
[read@k8s-master-242 kubernetes]$ kubectl get pods -n kube-system
Error from server (Forbidden): pods is forbidden: User "system:serviceaccount:permission-manager:read" cannot list resource "pods" in API group "" in the namespace "kube-system"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
三、总结
经测试,v1.7.0-rc1、v1.7.0-rc2、v1.7.0-rc3、v1.7.1-rc1在当前k8s版本1.20.6对不同用户权限管理无法达到预期效果,即权限设置没有生效,后面我换成了v1.6.0版本就可以实现,不确定是什么问题导致,建议遇到同类问题的小伙伴可以针对自己环境k8s集群版本进行测试。
总结:整理不易,如果对你有帮助,可否点赞关注一下?
————————————————
版权声明:本文为CSDN博主「东城绝神」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_37814112/article/details/121826977
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?