k8s实验-RBAC权限控制

网友投稿 309 2022-09-08

k8s实验-RBAC权限控制

创建 User Account

1 查看当前用户认证信息

kubectl config view

信息说明:

apiVersion: v1clusters: #集群信息,可能有多个集群- cluster: certificate-authority-data: DATA+OMITTED server: name: cluster.localcontexts: #context定义cluster,user,namespace元组名称,用来 #向指定的集群使用提供认证信息和命名空间向指定的集群发送 #请求,可以有多个context- context: cluster: cluster.local user: kubernetes-admin name: kubernetes-admin@cluster.localcurrent-context: kubernetes-admin@cluster.local #当前使用的账号所在的contextkind: Configpreferences: {}users: #用户清单- name: kubernetes-admin user: client-certificate-data: REDACTED client-key-data: REDACTED

从配置可以看出,当前只有一个cluster,现在使用的是kubernetes-admin的账号

2 在kubernetes默认存放用户密钥和证书的目录中,为新用户user2账号生成密钥

[root@node1 configmap]# cd /etc/kubernetes/pki/[root@node1 pki]# (umask 077; openssl genrsa -out user2.key 2048)

3 创建证书签署请求

openssl req -new -key user2.key -out user2.csr -subj "/CN=user2/O=kubeusers"

4 使用kubeernetes集群创建时候的CA为用户颁发证书,设置有效期365天

openssl x509 -req -in user2.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out user2.crt -days 365

使用User Account设定kube-config配置文件

1 配置客户端证书以及密钥

kubectl config set-credentials user2 --client-certificate=/etc/kubernetes/pki/user2.crt --client-key=/etc/kubernetes/pki/user2.key

2 配置user2的context,组合cluster和credentials,使得可以用通过user-context来切换

kubectl config set-context user2@kubernetes --cluster=cluster.local --user=user2

3上下文切换

#切换到刚新添加的用户user2kubectl config use-context user2@kubernetes --cluster=cluster.local --user=user2#切换回amdin用户kubectl config use-context kubernetes-admin@cluster.local#临时切换kubectl --context=user2@kubernetes get pods

4 切换到user2的上下文,显示没有权限

使用内置的ClusterRole绑定新建账号

1 查看k8s内建的clusterole

kubectl get clusterrole

使用view这个内建的clusterrole

2 查看vimew这个clusterrole的权限

kubectl describe clusterrole view

对于大部分资源都是get .list,watch的查询权限

3 在master节点创建/labfile/rbac目录,用于保存配置文件

mkdir /root/huawei_k8s/labfile/rbac && cd /root/huawei_k8s/labfile/rbac

4 创建一个ClusterRoleBinding对象,绑定该ClusterRole,view

#vim ClusterRolebindinguser2.yamlkind: ClusterRoleBindingapiVersion: rbac.authorization.k8s.io/v1metadata: name: clusterrolebindinguser2subjects:- kind: User name: user2 apiGroup: rbac.authorization.k8s.ioroleRef: kind: ClusterRole name: view apiGroup: rbac.authorization.k8s.io

5 再次测试user2账号,已经可以获取到相关信息

kubectl --context=user2@kubernetes get pods

创建Service Account等相关对象

1 创建一个名称为mynamespace的命名空间

kubectl create namespace mynamespace

2 创建Service Account类型的账户

#vim serviceaccount.yamlapiVersion: v1kind: ServiceAccountmetadata: namespace: mynamespace name: example-sa

3 创建并确认账号

4 编辑role的yaml文件并创建

#vim roletemplate.yamlkind: RoleapiVersion: rbac.authorization.k8s.io/v1metadata: namespace: mynamespace name: example-rolerules:- apiGroups: [""] resources: ["pods"] verbs: ["get","watch","list"]

5 编写Rolebinding的YAML文件来为Service Account分配权限

#vim RoleBinding.yamlkind: RoleBindingapiVersion: rbac.authorization.k8s.io/v1metadata: name: example-rolebinding namespace: mynamespacesubjects:- kind: ServiceAccount name: example-sa namespace: mynamespaceroleRef: kind: Role name: example-role apiGroup: rbac.authorization.k8s.io

6 创建roleBinding

检查

创建pod引用service Account

1 编辑pod yaml文件引用该service account

#vim nginx.yamlapiVersion: v1kind: Podmetadata: namespace: mynamespace name: nginx-testspec: containers: - name: nginx image: nginx:1.7.9 serviceAccountName: example-sa

2 创建pod

3 查看pod相关信息

kubectl describe pod nginx-test -n mynamespace

4 进入容器查看secret对象

该secret对象被挂载到该pod对应的目录下,容器里的应用就可以使用ca.crt来访问API server,此时能够做到GET,WATCH和LIST的操作。因为example-sa这个ServiceAccount的权限已经被用role做了绑定

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:“加班狂人”马龙:我也不想,但不加练就跟不上了!
下一篇:云原生微服务K8s容器编排第三章之部署containerd
相关文章

 发表评论

暂时没有评论,来抢沙发吧~