java系统找不到指定文件怎么解决
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~