我們經(jīng)常會使用Kubectl命令行工具管理 K8s 集群崇裁,獲取諸如Pods等資源的信息,但是有時候也會在應(yīng)用程序中通過調(diào)用API的方式去獲取集群信息束昵。本篇介紹如何配置和使用拔稳。
如圖所示,無論是具體的User用戶锹雏,還是Service Account巴比,都需要經(jīng)過三個步驟能調(diào)用API:認(rèn)證、鑒權(quán)和準(zhǔn)入控制礁遵。一般情況都是通過Service Account的名義去查詢集群信息轻绞,所以以SA為例,講一下如何對某個SA賦權(quán)佣耐,對集群某個namespace只讀權(quán)限政勃。整體思路是基于RBAC原理。
一兼砖、創(chuàng)建SA
首先肯定需要創(chuàng)建SA奸远,在default的namespace下,名為api-view讽挟。
kubectl create sa api-view -n default
二懒叛、創(chuàng)建Role
RBAC原理的話,下一步是創(chuàng)建“權(quán)限”耽梅,在k8s里就是role或者ClusterRole薛窥。兩者區(qū)別是Role需要指定namespace,ClusterRole可以對集群作用域的資源都有效眼姐。本例創(chuàng)建的是Role诅迷,作用域是default佩番,權(quán)限是對pod可以進(jìn)行g(shù)et、watch竟贯、list等讀權(quán)限答捕。
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: pod-reader
namespace: default
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]
寫完yaml文件后執(zhí)行生效
kubectl apply -f role-read.yaml
三、創(chuàng)建RoleBinding
下一步是通過RoleBinding綁定SA和Role屑那,roleRef里填寫的是剛創(chuàng)建的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
同理執(zhí)行生效
kubectl apply -f role-binding-api-veiw.yaml
四持际、獲取Token
接下來就是獲取token信息,執(zhí)行步驟如下
kubectl get secret | grep api-view # 先查到secret
kubectl describe secret api-view-token-fdcng -n default # 獲取token
五哗咆、調(diào)用API
準(zhǔn)備工作已經(jīng)全部就緒蜘欲,可以拿著token去訪問k8s api server了。
curl -k https://127.0.0.1:6443/api/v1/namespaces/default/pods -H "Authorization: Bearer <token xxxx>"
API的列表可以參考官網(wǎng)
https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.20/