我们经常会使用Kubectl命令行工具管理 K8s 集群,获取诸如Pods等资源的信息,但是有时候也会在应用程序中通过调用API的方式去获取集群信息。本篇介绍如何配置和使用。
1625356773025.jpg如图所示,无论是具体的User用户,还是Service Account,都需要经过三个步骤能调用API:认证、鉴权和准入控制。一般情况都是通过Service Account的名义去查询集群信息,所以以SA为例,讲一下如何对某个SA赋权,对集群某个namespace只读权限。整体思路是基于RBAC原理。
一、创建SA
首先肯定需要创建SA,在default的namespace下,名为api-view。
kubectl create sa api-view -n default
二、创建Role
RBAC原理的话,下一步是创建“权限”,在k8s里就是role或者ClusterRole。两者区别是Role需要指定namespace,ClusterRole可以对集群作用域的资源都有效。本例创建的是Role,作用域是default,权限是对pod可以进行get、watch、list等读权限。
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: pod-reader
namespace: default
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]
写完yaml文件后执行生效
kubectl apply -f role-read.yaml
三、创建RoleBinding
下一步是通过RoleBinding绑定SA和Role,roleRef里填写的是刚创建的Role:pod-reader,subject里填的是SA。
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: rolebinding-api-view-serviceaccount
namespace: default
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
name: api-view
namespace: default
同理执行生效
kubectl apply -f role-binding-api-veiw.yaml
四、获取Token
接下来就是获取token信息,执行步骤如下
kubectl get secret | grep api-view # 先查到secret
kubectl describe secret api-view-token-fdcng -n default # 获取token
1625357787629.jpg
五、调用API
准备工作已经全部就绪,可以拿着token去访问k8s api server了。
curl -k https://127.0.0.1:6443/api/v1/namespaces/default/pods -H "Authorization: Bearer <token xxxx>"
API的列表可以参考官网
https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.20/
网友评论