k8s进阶学习2:user和rbac绑定

1.
开始前,想个问题?
在部署kubectl,kube-scheduler,kube-controller-manager,kubelet,都创建了user或者sa(service account).
创建的user和sa都具有rbac分配的权限操作api.
这个权限是怎么生成分配的呢?

2.
新建一个user记录整个过程

向ca申请证书,私钥,csr(自动生成&&证书签名请求&&用于交叉签名或者重新签名)
需要证书签名请求文件,文件参考见下:

cat am1-csr.json
{
"CN": "am1",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "GD",
"L": "SZ",
"O": "system:masters",
"OU": "k8s"
}
]
}?

参数详细说明:

CN ? ? ? ? ? ?##Common Name,通用名称.
? ? ? ? ? ? ? ? ?##k8s集群里的特殊用法:kube-apiserver 从证书中提取该字段作为请求的用户名 (User Name);浏览器使用该字段验证网站是否合法,网站一般使用域名或者ip;
hosts ? ? ? ##如果 hosts 字段不为空则需要指定授权使用该证书的 IP 或域名列表,现在创建的是执行kubectl命令的用户,该证书只会被 kubectl 当做 client 证书使用,所以 hosts 字段为空;
C ? ? ? ? ? ? ?##Country ?国家
ST ? ? ? ? ? ?##State ?州,省
L ? ? ? ? ? ? ?##Locality ?地区,城市
O ? ? ? ? ? ? ##Organization Name ?组织名称,公司名称,
? ? ? ? ? ? ? ?##k8s里的特殊用法:用这个参数指定使用证书的用户Group,比如这里"system:masters",通过证书认证后,用户在rbac群组为system:masters,从而拥有这个群组的所有权限.
? ? ? ? ? ? ? ? ##k8s集群kube-apiserver预定义了部分rbac的rolebindings.这个后面检索
OU ? ? ? ? ?##Organization Unit Name ?组织单位名称,公司部门
? ? ? ? ? ? ? ??##k8s里的特殊用法:kube-apiserver 从证书中提取该字段作为请求用户所属的组 (Group),可以随意自定义.

执行命令,向ca申请证书,见下:

[root@k8s-master1 am]# cfssl gencert -ca=/etc/kubernetes/cert/ca.pem -ca-key=/etc/kubernetes/cert/ca-key.pem -config=/etc/kubernetes/cert/ca-config.json -profile=kubernetes am1-csr.json | cfssljson -bare am1
2019/03/05 14:03:45 [INFO] generate received request
2019/03/05 14:03:45 [INFO] received CSR
2019/03/05 14:03:45 [INFO] generating key: rsa-2048
2019/03/05 14:03:47 [INFO] encoded CSR
2019/03/05 14:03:47 [INFO] signed certificate with serial number 298701151984123590557480669424567076050696231266
2019/03/05 14:03:47 [WARNING] This certificate lacks a "hosts" field. This makes it unsuitable for
websites. For more information see the Baseline Requirements for the Issuance and Management
of Publicly-Trusted Certificates, v.1.1.6, from the CA/Browser Forum (https://cabforum.org);
specifically, section 10.2.3 ("Information Requirements").
[root@k8s-master1 am]# ls
am1.csr? am1-csr.json? am1-key.pem? am1.pem
[root@k8s-master1 am]#

?执行kubectl config命令,具体解释,参考kubectl config命令篇

[root@k8s-master1 am]#? kubectl config set-cluster kubernetes --certificate-authority=/etc/kubernetes/cert/ca.pem --embed-certs=true --server=https://192.168.32.127:8443 --kubeconfig=am1config
Cluster "kubernetes" set.
[root@k8s-master1 am]#?kubectl config set-credentials am1 --client-certificate=/root/k8s/key/am/am1.pem --client-key=/root/k8s/key/am/am1-key.pem --embed-certs=true --kubeconfig=am1config
User "am1" set.
[root@k8s-master1 am]# kubectl config set-context kubernetes --cluster=kubernetes --user=am1 --kubeconfig=am1config
Context "kubernetes" created.
[root@k8s-master1 am]# kubectl config use-context kubernetes --kubeconfig=am1config
Switched to context "kubernetes".
[root@k8s-master1 am]# ls
am1config? am1.csr? am1-csr.json? am1-key.pem? am1.pem
[root@k8s-master1 am]#

把am1config文件复制到~/.kube/目录下(注意:k8s改变用户默认就是改变~/.kube/config文件)

[root@k8s-master1 am]# cp am1config ~/.kube
[root@k8s-master1 .kube]# ls
am1config? cache? config? http-cache
[root@k8s-master1 .kube]#

把am1config替换成config,

root@k8s-master1 .kube]# mv config config.bk
[root@k8s-master1 .kube]# ls
am1config? cache? config.bk? http-cache
[root@k8s-master1 .kube]# mv am1config config
[root@k8s-master1 .kube]# ls
cache? config? config.bk? http-cache
[root@k8s-master1 .kube]#

到这里,已经创建好用户am1,并且已经使用成功.

3.
检索k8s现在使用的用户

[root@k8s-master1 am]# kubectl config view
apiVersion: v1
clusters:
- cluster:
? ? certificate-authority-data: REDACTED
? ? server: https://192.168.32.127:8443
? name: kubernetes
contexts:
- context:
? ? cluster: kubernetes
? ? user: am1
? name: kubernetes
current-context: kubernetes
kind: Config
preferences: {}
users:
- name: am1
? user:
? ? client-certificate-data: REDACTED
? ? client-key-data: REDACTED
[root@k8s-master1 am]#

检索am1使用k8s的权限

[root@k8s-master1 am]# kubectl get all
NAME? ? ? ? ? ? ? ? ? ? ? ? ? ? READY? ?? STATUS? ? RESTARTS?? AGE
pod/dnsutils-ds-4lslb? ? ? ? ?? 1/1? ? ?? Running?? 17? ? ? ?? 4d
pod/dnsutils-ds-4svcr? ? ? ? ?? 1/1? ? ?? Running?? 16? ? ? ?? 4d
pod/dnsutils-ds-7wqxf? ? ? ? ?? 1/1? ? ?? Running?? 16? ? ? ?? 4d
pod/dnsutils-ds-f6qkj? ? ? ? ?? 1/1? ? ?? Running?? 16? ? ? ?? 4d
pod/httpd-app-bbcbfb6cd-65phh?? 1/1? ? ?? Running?? 7? ? ? ? ? 5d
pod/httpd-app-bbcbfb6cd-6blv4?? 1/1? ? ?? Running?? 4? ? ? ? ? 5d
pod/httpd-app-bbcbfb6cd-pk9tk?? 1/1? ? ?? Running?? 3? ? ? ? ? 5d
pod/httpd-app-bbcbfb6cd-rl4w8?? 1/1? ? ?? Running?? 4? ? ? ? ? 5d
pod/httpd-app-bbcbfb6cd-rnhk8?? 1/1? ? ?? Running?? 4? ? ? ? ? 5d

NAME? ? ? ? ? ? ? ? ? TYPE? ? ? ? CLUSTER-IP? ? ?? EXTERNAL-IP?? PORT(S)? ? ?? AGE
service/dnsutils-ds?? NodePort? ? 10.254.173.49? ? <none>? ? ? ? 80:8977/TCP?? 4d
service/httpd-svc? ?? NodePort? ? 10.254.120.185?? <none>? ? ? ? 80:8416/TCP?? 5d
service/kubernetes? ? ClusterIP?? 10.254.0.1? ? ?? <none>? ? ? ? 443/TCP? ? ?? 5d

NAME? ? ? ? ? ? ? ? ? ? ? ?? DESIRED?? CURRENT?? READY? ?? UP-TO-DATE?? AVAILABLE?? NODE SELECTOR?? AGE
daemonset.apps/dnsutils-ds?? 4? ? ? ?? 4? ? ? ?? 4? ? ? ?? 4? ? ? ? ? ? 4? ? ? ? ?? <none>? ? ? ? ? 4d

NAME? ? ? ? ? ? ? ? ? ? ? ? DESIRED?? CURRENT?? UP-TO-DATE?? AVAILABLE?? AGE
deployment.apps/httpd-app?? 5? ? ? ?? 5? ? ? ?? 5? ? ? ? ? ? 5? ? ? ? ?? 5d

NAME? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? DESIRED?? CURRENT?? READY? ?? AGE
replicaset.apps/httpd-app-bbcbfb6cd?? 5? ? ? ?? 5? ? ? ?? 5? ? ? ?? 5d
[root@k8s-master1 am]# kubectl get all -n kube-system
NAME? ? ? ? ? ? ? ? ? ? ? ? ?? READY? ?? STATUS? ? RESTARTS?? AGE
pod/coredns-779ffd89bd-cwjt9?? 1/1? ? ?? Running?? 3? ? ? ? ? 4d

NAME? ? ? ? ? ? ?? TYPE? ? ? ? CLUSTER-IP?? EXTERNAL-IP?? PORT(S)? ? ? ?? AGE
service/kube-dns?? ClusterIP?? 10.254.0.2?? <none>? ? ? ? 53/UDP,53/TCP?? 4d

NAME? ? ? ? ? ? ? ? ? ? ? DESIRED?? CURRENT?? UP-TO-DATE?? AVAILABLE?? AGE
deployment.apps/coredns?? 1? ? ? ?? 1? ? ? ?? 1? ? ? ? ? ? 1? ? ? ? ?? 4d

NAME? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? DESIRED?? CURRENT?? READY? ?? AGE
replicaset.apps/coredns-779ffd89bd?? 1? ? ? ?? 1? ? ? ?? 1? ? ? ?? 4d
[root@k8s-master1 am]#

可以看到am1这个用户,实现了我们预设的权限要求,拥有了system:masters群组的所有权限.

4.
检索system:masters这个群组的权限

检索预设rbac的clusterrolebindings

[root@k8s-master1 am]# kubectl get clusterrolebindings
NAME? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? AGE
auto-approve-csrs-for-group? ? ? ? ? ? ? ? ? ? ? ? ? ? 5d
cluster-admin? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 5d
kube-apiserver? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 5d
kubelet-bootstrap? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 5d
node-client-cert-renewal? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 5d
node-server-cert-renewal? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 5d
system:aws-cloud-provider? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 5d
system:basic-user? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 5d
system:controller:attachdetach-controller? ? ? ? ? ? ? 5d
system:controller:certificate-controller? ? ? ? ? ? ?? 5d
system:controller:clusterrole-aggregation-controller?? 5d
system:controller:cronjob-controller? ? ? ? ? ? ? ? ?? 5d
system:controller:daemon-set-controller? ? ? ? ? ? ? ? 5d
system:controller:deployment-controller? ? ? ? ? ? ? ? 5d
system:controller:disruption-controller? ? ? ? ? ? ? ? 5d
system:controller:endpoint-controller? ? ? ? ? ? ? ? ? 5d
system:controller:expand-controller? ? ? ? ? ? ? ? ? ? 5d
system:controller:generic-garbage-collector? ? ? ? ? ? 5d
system:controller:horizontal-pod-autoscaler? ? ? ? ? ? 5d
system:controller:job-controller? ? ? ? ? ? ? ? ? ? ?? 5d
system:controller:namespace-controller? ? ? ? ? ? ? ?? 5d
system:controller:node-controller? ? ? ? ? ? ? ? ? ? ? 5d
system:controller:persistent-volume-binder? ? ? ? ? ?? 5d
system:controller:pod-garbage-collector? ? ? ? ? ? ? ? 5d
system:controller:pv-protection-controller? ? ? ? ? ?? 5d
system:controller:pvc-protection-controller? ? ? ? ? ? 5d
system:controller:replicaset-controller? ? ? ? ? ? ? ? 5d
system:controller:replication-controller? ? ? ? ? ? ?? 5d
system:controller:resourcequota-controller? ? ? ? ? ?? 5d
system:controller:route-controller? ? ? ? ? ? ? ? ? ?? 5d
system:controller:service-account-controller? ? ? ? ?? 5d
system:controller:service-controller? ? ? ? ? ? ? ? ?? 5d
system:controller:statefulset-controller? ? ? ? ? ? ?? 5d
system:controller:ttl-controller? ? ? ? ? ? ? ? ? ? ?? 5d
system:coredns? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 5d
system:discovery? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 5d
system:kube-controller-manager? ? ? ? ? ? ? ? ? ? ? ?? 5d
system:kube-dns? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 5d
system:kube-scheduler? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 5d
system:node? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 5d
system:node-proxier? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 5d
system:volume-scheduler? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 5d

在哪个里面呢?

[root@k8s-master1 am]# kubectl describe clusterrolebindings |grep -B 10 "system:masters"

Name:? ? ? ?? cluster-admin
Labels:? ? ?? kubernetes.io/bootstrapping=rbac-defaults
Annotations:? rbac.authorization.kubernetes.io/autoupdate=true
Role:
? Kind:? ClusterRole
? Name:? cluster-admin
Subjects:
? Kind?? Name? ? ? ? ? ? Namespace
? ----?? ----? ? ? ? ? ? ---------
? Group? system:masters?

检索下cluster-admin的权限

[root@k8s-master1 am]# kubectl describe clusterroles cluster-admin
Name:? ? ? ?? cluster-admin
Labels:? ? ?? kubernetes.io/bootstrapping=rbac-defaults
Annotations:? rbac.authorization.kubernetes.io/autoupdate=true
PolicyRule:
? Resources? Non-Resource URLs? Resource Names? Verbs
? ---------? -----------------? --------------? -----
? *.*? ? ? ? []? ? ? ? ? ? ? ?? []? ? ? ? ? ? ? [*]
? ? ? ? ? ?? [*]? ? ? ? ? ? ? ? []? ? ? ? ? ? ? [*]

5.
疑问:user am1加入到了system:masters群组,可以不可以检索system:masters群组绑定了哪些用户呢?

暂时没有找到方法.

原文地址:https://blog.51cto.com/goome/2358569

时间: 2024-10-15 14:45:26

k8s进阶学习2:user和rbac绑定的相关文章

k8s进阶学习3:创建pod流程图示

1.kubectl提交创建pod命令,api响应命令,通过一系列认证授权,把pod数据存储到etcd,创建deployment资源并初始化. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2.controller通过list-watch机制,监测发现新的deployment,将该资源加入到内部工作队列,发现该资源没有关联的pod和replicaset,启用deployment controller创建replicaset资

Java:进阶学习(1)——网络编程

Java:进阶学习(1)--网络编程 基础 Socket与ServerSocket Socket又称"套接字",网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. Socket方法 getInetAddress();    远程服务端的IP地址 getPort();    远程服务端的端口 getLocalAddress()    本地客户端的IP地址 getLocalPort()    本地客户端的端口 getInputStream();   

进阶学习项目实战链接

进阶学习目录 Python Django Ansible Playbook自动化运维项目实战 https://pan.baidu.com/s/1MAz_sNypeDSySQCdLiOuDw 顶级资深工程师深度讲解Go语言开发入门到精通 Go编程爬虫实战视频 https://pan.baidu.com/s/1nx82k7mOn8ErlPSsCdLfTw Zabbix监控系统深度实践 https://pan.baidu.com/s/1v3bAFqhk890KokIsmu3CMQ Spring Boo

42步进阶学习—让你成为优秀的Java大数据科学家!

作者 灯塔大数据 本文转自公众号灯塔大数据(DTbigdata),转载需授权 如果你对各种数据类的科学课题感兴趣,你就来对地方了.本文将给大家介绍让你成为优秀数据科学家的42个步骤.深入掌握数据准备,机器学习,SQL数据科学等. 本文将这42步骤分为六个部分, 前三个部分主要讲述从数据准备到初步完成机器学习的学习过程,其中包括对理论知识的掌握和Python库的实现. 第四部分主要是从如何理解的角度讲解深入学习的方法.最后两部分则是关于SQL数据科学和NoSQL数据库. 接下来让我们走进这42步进

Android 进阶学习:事件分发机制全然解析,带你从源代码的角度彻底理解(上)

http://blog.csdn.net/guolin_blog/article/details/9097463 事实上我一直准备写一篇关于Android事件分发机制的文章,从我的第一篇博客開始,就零零散散在好多地方使用到了Android事件分发的知识.也有好多朋友问过我各种问题,比方:onTouch和onTouchEvent有什么差别,又该怎样使用?为什么给ListView引入了一个滑动菜单的功能,ListView就不能滚动了?为什么图片轮播器里的图片使用Button而不用ImageView?

【原创】PHP程序员进阶学习书籍参考指南

PHP程序员进阶学习书籍参考指南 @heiyeluren lastmodify: 2016/2/18 [初阶](基础知识及入门) 01. <PHP与MySQL程序设计(第4版)>  http://item.jd.com/10701892.html 02. <深入浅出MySQL 数据库开发 优化与管理维护 第2版> http://item.jd.com/11381295.html 03. <实战Nginx:取代Apache的高性能Web服务器> http://dwz.cn

Java进阶学习(2)——log4j的学习和使用

Java进阶学习(2)--log4j的学习和使用 简介Loj4j Log4j的组成 Log4j主要由三大组组件构成: Logger: 负责生成日志,并能够对日志信息进行分类筛选,通俗的讲就是决定什么日志信息应该被输出,什么日志信息应该被忽略. Appender: 定义了日志信息输出的目的地,指定日志信息应该被输出到什么地方,这些地方可以是控制台.文件或网络设备等. Layout: 指定日志信息的输出格式. 说明: 一个Logger可以有多个Appender,这意味着日志信息可以被输出到多个设备上

java进阶学习计划

断断续续使用java也已经有两年了,算是最熟悉的开发工具了.但写的代码都是以项目为导向,追求work around,还需要打好基础才能长远发展. 大致的进阶学习计划, 阶段1:深究java语法,阅读常用库的jdk源码,了解jvm机制; 阶段2:阅读基于java的开源框架源码,各种framework,container. 希望可以坚持下来,经常更新技术博客. java进阶学习计划

SpringMVC学习(六)——SpringMVC高级参数绑定与@RequestMapping注解

高级参数绑定 现在进入SpringMVC高级参数绑定的学习,本文所有案例代码的编写均建立在前文SpringMVC学习(五)——SpringMVC的参数绑定的案例基础之上,因此希望读者能仔细阅读这篇文章. 绑定数组 现有这样一个需求:在商品列表页面选中多个商品,然后删除之.下面是我对该需求的分析:此功能要求商品列表页面中的每个商品前有一个checkbook(复选框),选中多个商品后点击删除按钮把商品id传递给Controller,根据商品id批量删除商品信息. 首先将itemList.jsp页面改