尊园地产做的网站,网站建设开票计量单位,logo 在线设计,高明网站建设报价文章目录 概要利用RBAC添加角色权限使用shell命令创建角色权限使用配置文件创建角色权限 调用k8s的api获取k8s账户的token 小结 概要
使用kubernetes部署项目时#xff0c;有些特殊场景#xff0c;我们需要在自己创建的pod里面调用k8s的api来管理k8s#xff0c;但是需要使用… 文章目录 概要利用RBAC添加角色权限使用shell命令创建角色权限使用配置文件创建角色权限 调用k8s的api获取k8s账户的token 小结 概要
使用kubernetes部署项目时有些特殊场景我们需要在自己创建的pod里面调用k8s的api来管理k8s但是需要使用指定用户权限该用户证使用当前命名空间的资源不能使用其他命名空间的api和资源。
利用RBAC添加角色权限
创建命名空间创建后会默认新建一个service_account
kubectl create namespace demo使用shell命令创建角色权限
创建role和rolebinding
kubectl create role demo_admin_role --resource* --verb* --namespacedemo
kubectl create rolebinding demo_admin_role_binding --roledemo_admin_role --serviceaccountdemo:default --namespace demo使用配置文件创建角色权限
kubectl create -n xijia -f rbac.yaml配置文件如下
定义了role和rolebindingrole名称为创建的role名称为【admin_role】以及rolebinding名称为【admin_role_binding】。rolebinding的作用就是把role和account关联起来这样我们的account就能拿到相应的权限。role包括了deployments,pods,services,configmaps四个资源的get,list,watch,create,update,delete。如果想给所有权限也可以用*
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:name: admin_rolenamespace: demo
rules:
- apiGroups:- appsresources:- deploymentsverbs:- get- list- watch- create- update- delete
- apiGroups:- resources:- pods- services- configmapsverbs:- get- list- watch- create- update- delete---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: admin_role_bindingnamespace: demo
roleRef:apiGroup: rbac.authorization.k8s.iokind: Rolename: admin_role
subjects:
- kind: ServiceAccountname: defaultnamespace: demo调用k8s的api
默认调用k8s的api是会返回401认证失败的错误的所以我们需要先拿到demo:default账户的token才能调用k8s的api接口
获取k8s账户的token
kubectl describe secret --namespace demo default-token-frn4q可以看到返回的token非常长这个是正常的后面这个就是认证的token。 先进入pod我们在pod里面测试调用k8s的api。下面的命令就是获取demo命名空间下的所有pod。
curl -k --header Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6Ik1zZ3BGcTNoam9FakxjOW93QTVyY3JhOWY5Z1RibkhCOENkSkNST0Uzc1kifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJ4aWppYSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJ0ZXN0MTIzLXRva2VuLTV3NTQ5Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6InRlc3QxMjMiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI1ZmRkN2IxYy02YTcxLTQ2ODQtYTM2ZC1lZTNkMGQzN2Y3YmMiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6eGlqaWE6dGVzdDEyMyJ9.AANC-2tRA17cvsqrAQM3_3JnE1BeMhg1tnSU_SThayj_0FqKOcZXecq3biQAPKPmHEBtNI9CFZnsihBDKV7o9I8OPl_8-urBIk9IrhlaYx7iu8OefA-zqNTofL331bbTuwJriE6qInFdKQH8YpJgJbpSyJLYptiu6Uqm_O2KVOASH0P5msZ_caMv7KvTsV-oYGM3XhrlL_eVIX10ENKNaF13nvglUH6mRcu4s2PB6E9KKMvsO7c7QSj9iJPj6semxTUEOf2iQJXlWIE2p6lReYGnNavh471kytwopt5GzG_8l4cH8XKX5v_tj1UroIPGqVGqHKUfPL3C3hucdUe4Gw https://kubernetes.default.svc:443/api/v1/namespaces/demo/pods如果获取default命名空间下的pod就会返回403权限不足的错误
curl -k --header Authorization: Bearer YOUR_TOKEN https://kubernetes.default.svc:443/api/v1/namespaces/default/pods小结
k8s的api十分丰富平时用到的deploymentpodservice都可以使用api来操作。官方文档如下https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/rbac/#api-overview