# kubectl auth can-i [執行動作]
kubectl auth can-i create pods ;
# 列出目前帳號可以操作的資源列表及動作
kubectl auth can-i --list ;
透過 kubectl auth can-i --list 可以發現 system:master 的權限充滿著一堆 * ,看來權限應該是蠻大的。大概有個概念後,我們先從RBAC 最簡單的使用者開始建立起。
在 K8s 中的使用者分為兩種,一般使用者和服務帳號,這次主要會專注在服務帳號的利用上。服務帳號顧名思義就是給服務使用的。但是服務帳號的權限又該如何決定呢? 這個就是本章要介紹的重點。在 K8s 中服務帳號的類型就叫做 service account。建立方式很簡單如下所示 :
kubectl create serviceaccount aeifkz ;
kubectl get serviceaccount ;
kubectl auth can-i create pods --as=system:serviceaccount:default:aeifkz -n default ;
kubectl auth can-i create pods --as=system:serviceaccount:default:aeifkz -n kube-system ;
kubectl auth can-i --list --as=system:serviceaccount:default:aeifkz -n default ;
kubectl auth can-i --list --as=system:serviceaccount:default:aeifkz -n kube-system ;
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
# "namespace" omitted since ClusterRoles are not namespaced
namespace: default
name: role-simple
rules:
- apiGroups: [""]
# at the HTTP level, the name of the resource for accessing Secret
# objects is "secrets"
resources: ["pods"]
verbs: [ "get", "watch", "list", "create", "delete" ]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: cluster-role-binding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: role-simple
subjects:
- kind: ServiceAccount
name: aeifkz
namespace: default
先來看看有哪些資源以及行為可以被使用,可以參考資料 Resource types、Determine the Request Verb。
針對 pod 可以進行的動作類型有 "create", "get", "watch", "list", "update", "patch", "delete",意思分別如下 :
# 參數 -o wide 代表顯示詳細資訊,會顯示資源以及該資源可以操作的動作
kubectl api-resources -o wide ;
kubectl api-resources -o wide | grep pods ;
kubectl auth can-i create pods --as=system:serviceaccount:default:aeifkz -n default ;
kubectl auth can-i create pods --as=system:serviceaccount:default:aeifkz -n kube-system ;
kubectl auth can-i --list --as=system:serviceaccount:default:aeifkz -n default ;
kubectl auth can-i --list --as=system:serviceaccount:default:aeifkz -n kube-system ;
apiVersion: v1
kind: Pod
metadata:
name: target-pod
spec:
containers:
- name: target-pod
image: aeifkz/my-ubuntu:v1.0
serviceAccount: aeifkz
kubectl exec -it target-pod -- bash ;
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" && chmod +x kubectl ;
#看一下目前的權限有多少
./kubectl auth can-i --list ;
#測試是否具有建立 Pod 的權限
./kubectl auth can-i create pods ;
#直接建立一個 new-pod
./kubectl run new-pod --image aeifkz/my-ubuntu:v1.0 ;
./kubectl delete pods new-pod ;
本日回顧 :
次日預告 :