限制不同用户访问K8S集群
一、SSL认证
1、生成一个证书
(1)生成一个私钥 cd /etc/kubernetes/pki/
1 | ( umask 077; openssl genrsa -out lucky.key 2048) |
(2)生成一个证书请求
1 | openssl req -new -key lucky.key -out lucky.csr -subj "/CN=lucky" |
(3)生成一个证书
1 | openssl x509 -req - in lucky.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out lucky.crt -days 3650 |
2、在kubeconfig下新增加一个lucky这个用户
(1)把lucky这个用户添加到kubernetes集群中,可以用来认证apiserver的连接
1 | kubectl config set -credentials lucky --client-certificate=. /lucky .crt --client-key=. /lucky .key --embed-certs= true |
(2)在kubeconfig下新增加一个lucky这个账号
1 | kubectl config set -context lucky@kubernetes --cluster=kubernetes --user=lucky |
(3)切换账号到lucky,默认没有任何权限
1 | kubectl config use-context lucky@kubernetes |
3、把lucky这个用户通过rolebinding绑定,授予权限,基于context进行绑定
(1)创建role
1 2 3 4 5 6 7 8 9 | apiVersion: rbac.authorization.k8s.io /v1 kind: Role metadata: namespace: default name: lucky-role rules: - apiGroups: [ "" , "extensions" ] # "" 标明 core API 组 resources: [ "pods" , "deploymnets" ] verbs: [ "get" , "watch" , "list" ] |
其中 Pod 属于 core 这个 API Group,在 YAML 中⽤空字符就可以,⽽ Deployment 属于 apps 这个 API Group, ReplicaSets 属于 extensions 这个 API Group(我怎么知道的?点这⾥查⽂档),所以 rules 下⾯的 apiGroups 就综合了这⼏个资源的 API Group:["", "extensions", "apps"],其中 verbs 就 是我们上⾯提到的可以对这些资源对象执⾏的操作,我们这⾥需要所有的操作⽅法,所以我们也可以 使⽤['*']来代替
(2)创建rolebinding
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | apiVersion: rbac.authorization.k8s.io /v1 kind: RoleBinding metadata: name: read -secrets # RoleBinding 的名字空间决定了访问权限的授予范围。 # 这里仅授权在 "default" 命名空间内的访问权限。 namespace: default subjects: - kind: User name: lucky # 'name' 是不区分大小写的 apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: lucky-role apiGroup: rbac.authorization.k8s.io |
(3)测试是否有权限,测试成功
1 | [root@k8s-master rbac] # kubectl config use-context lucky@kubernetes |
1 2 3 4 5 6 7 | [root@k8s-master rbac] # kubectl get pods NAME READY STATUS RESTARTS AGE centos-deployment-5c698c96f4-gp58x 1 /1 Running 0 5d4h centos-deployment-5c698c96f4-jhpl8 1 /1 Running 0 5d4h nginx-deployment-9f65856f8-pj4hr 1 /1 Running 0 5d3h [root@k8s-master rbac] # kubectl delete pods nginx-deployment-9f65856f8-gkw2j //没有进行删除的权限 Error from server (Forbidden): pods "nginx-deployment-9f65856f8-gkw2j" is forbidden: User "lucky" cannot delete resource "pods" in API group "" in the namespace "default" |
4、基于ServiceAccount的RBAC
1、创建sa
1 | kubectl create sa haimaxy-sa -n kube-system |
1 2 3 4 5 6 7 8 | apiVersion: v1 kind: ServiceAccount metadata: name: metrics-server namespace: kube-system labels: kubernetes.io /cluster-service : "true" addonmanager.kubernetes.io /mode : Reconcile |
2、创建clusterrole
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 | apiVersion: rbac.authorization.k8s.io /v1 kind: ClusterRole metadata: name:system:metrics-server labels: kubernetes.io /cluster-service : "true" addonmanager.kubernetes.io /mode : Reconcile rules: - apiGroups: - "" resources: - pods - nodes - nodes /stats - namespaces verbs: - get - list - watch - apiGroups: - "extensions" resources: - deployments verbs: - get - list - update - watch |
3、创建clusterrolebinding进行绑定
1 2 3 4 5 6 7 8 9 10 11 12 13 | apiVersion: rbac.authorization.k8s.io /v1 kind: ClusterRoleBinding metadata: name: metrics-server:system:auth-delegator labels: kubernetes.io /cluster-service : "true" addonmanager.kubernetes.io /mode : Reconcile roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name:system:auth-delegator subjects: - kind: ServiceAccount // 使用的类型为 ServiceAccount<br><br>name: metrics-server namespace: kube-system |
添加一个lucky的普通用户
1 2 3 4 | useradd lucky cp -ar /root/.kube/ /home/lucky/ chown -R lucky.lucky /home/lucky/ su - lucky |
5、RBAC
感谢您的阅读,如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮。本文欢迎各位转载,但是转载文章之后必须在文章页面中给出作者和原文连接。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具