kubernetes给指定用户分配调用k8s的api权限

文章目录

概要

使用kubernetes部署项目时,有些特殊场景,我们需要在自己创建的pod里面调用k8s的api来管理k8s,但是需要使用指定用户权限,该用户证使用当前命名空间的资源,不能使用其他命名空间的api和资源。

利用RBAC添加角色权限

创建命名空间,创建后会默认新建一个service_account

bash 复制代码
kubectl create namespace demo

使用shell命令创建角色权限

创建role和rolebinding

bash 复制代码
kubectl create role demo_admin_role --resource=* --verb=* --namespace=demo
kubectl create rolebinding demo_admin_role_binding --role=demo_admin_role --serviceaccount=demo:default --namespace demo

使用配置文件创建角色权限

bash 复制代码
kubectl create -n xijia -f rbac.yaml

配置文件如下:

  • 定义了role和rolebinding,role名称为创建的role名称为【admin_role】,以及rolebinding名称为【admin_role_binding】。
  • rolebinding的作用就是把role和account关联起来,这样我们的account就能拿到相应的权限。
  • role包括了deployments,pods,services,configmaps四个资源的get,list,watch,create,update,delete。如果想给所有权限,也可以用*
yaml 复制代码
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: admin_role
  namespace: demo
rules:
- apiGroups:
  - "apps"
  resources:
  - "deployments"
  verbs:
  - "get"
  - "list"
  - "watch"
  - "create"
  - "update"
  - "delete"
- apiGroups:
  - ""
  resources:
  - "pods"
  - "services"
  - "configmaps"
  verbs:
  - "get"
  - "list"
  - "watch"
  - "create"
  - "update"
  - "delete"

---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: admin_role_binding
  namespace: demo
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: admin_role
subjects:
- kind: ServiceAccount
  name: default
  namespace: demo

调用k8s的api

默认调用k8s的api是会返回401认证失败的错误的,所以我们需要先拿到demo:default账户的token才能调用k8s的api接口

获取k8s账户的token

bash 复制代码
kubectl describe secret --namespace demo default-token-frn4q

可以看到返回的token非常长,这个是正常的,后面这个就是认证的token。

先进入pod,我们在pod里面测试调用k8s的api。下面的命令就是获取demo命名空间下的所有pod。

bash 复制代码
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权限不足的错误

bash 复制代码
curl -k --header "Authorization: Bearer YOUR_TOKEN" https://kubernetes.default.svc:443/api/v1/namespaces/default/pods

小结

k8s的api十分丰富,平时用到的deployment,pod,service都可以使用api来操作。官方文档如下:https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/rbac/#api-overview

相关推荐
hwj运维之路1 小时前
k8s监控方案实践(三):部署与配置Grafana可视化平台
云原生·kubernetes·grafana
yt948321 小时前
Docker-基础(数据卷、自定义镜像、Compose)
运维·docker·容器
zizisuo1 小时前
9.3.云原生架构模式
云原生·架构
Hfc.1 小时前
docker-daemon.json
docker·容器·json
和计算机搏斗的每一天1 小时前
k8s之探针
云原生·容器·kubernetes
项目題供诗7 小时前
黑马k8s(四)
云原生·容器·kubernetes
杰克逊的日记7 小时前
大项目k8s集群有多大规模,多少节点,有多少pod
云原生·容器·kubernetes
小张童鞋。7 小时前
k8s之k8s集群部署
云原生·容器·kubernetes
long_21457 小时前
k8s中ingress-nginx介绍
kubernetes·ingress-nginx
luck_me57 小时前
k8s v1.26 实战csi-nfs 部署
linux·docker·云原生·容器·kubernetes