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

相关推荐
Kookoos4 小时前
ABP VNext + Tye:本地微服务编排与调试
微服务·云原生·架构·tye
掘金-我是哪吒9 小时前
分布式微服务系统架构第157集:JavaPlus技术文档平台日更-Java多线程编程技巧
java·分布式·微服务·云原生·架构
掘金-我是哪吒10 小时前
分布式微服务系统架构第155集:JavaPlus技术文档平台日更-Java线程池实现原理
java·分布式·微服务·云原生·架构
朱杰jjj10 小时前
Docker容器中无法使用vim、vi命令处理
docker·容器·vim
东林牧之10 小时前
CICD[软件安装]:docker安装gitlab
docker·容器·gitlab
cui_hao_nan19 小时前
Docker后端部署
运维·docker·容器
小张是铁粉21 小时前
docker在Linux的安装遇到的问题
linux·docker·容器
没有名字的小羊1 天前
8.Docker镜像讲解
运维·docker·容器·tomcat
木鱼时刻1 天前
容器与 Kubernetes 基本概念与架构
容器·架构·kubernetes
LCG元1 天前
云原生微服务间的异步消息通信:最终一致性与系统容错的架构实战
微服务·云原生·架构