13.Kubernetes叢集安全機制
阿新 • • 發佈:2022-03-13
1.概述
當我們訪問K8S叢集時,需要經過三個步驟完成具體操作
- 認證
- 鑑權【授權】
- 准入控制
進行訪問的時候,都需要經過 apiserver, apiserver做統一協調,比如門衛
- 訪問過程中,需要證書、token、或者使用者名稱和密碼
- 如果訪問pod需要serviceAccount
1.1 認證
對外不暴露8080埠,只能內部訪問,對外使用的埠6443
客戶端身份認證常用方式
- https證書認證,基於ca證書
- http token認證,通過token來識別使用者
- http基本認證,使用者名稱 + 密碼認證
1.2 鑑權
基於RBAC進行鑑權操作
基於角色訪問控制
1.3 准入控制
就是准入控制器的列表,如果列表有請求內容就通過,沒有的話 就拒絕
2. RBAC介紹
基於角色的訪問控制,為某個角色設定訪問內容,然後使用者分配該角色後,就擁有該角色的訪問許可權
k8s中有預設的幾個角色
- role:特定名稱空間訪問許可權
- ClusterRole:所有名稱空間的訪問許可權
角色繫結
- roleBinding:角色繫結到主體
- ClusterRoleBinding:叢集角色繫結到主體
主體
- user:使用者
- group:使用者組
- serviceAccount:服務賬號
3.RBAC實現鑑權
- 建立名稱空間
3.1 建立名稱空間
我們可以首先檢視已經存在的名稱空間
kubectl get namespace
然後我們建立一個自己的名稱空間 roledemo
kubectl create ns roledemo
3.2 名稱空間建立Pod
為什麼要建立名稱空間?因為如果不建立名稱空間的話,預設是在default下
kubectl run nginx --image=nginx -n roledemo
3.3 建立角色
我們通過 rbac-role.yaml進行建立
tip:這個角色只對pod 有 get、list許可權
然後通過 yaml建立我們的role
# 建立 kubectl apply -f rbac-role.yaml # 檢視 kubectl get role -n roledemo
3.4 建立角色繫結
我們還是通過 role-rolebinding.yaml 的方式,來建立我們的角色繫結
然後建立我們的角色繫結
# 建立角色繫結
kubectl apply -f rbac-rolebinding.yaml
# 檢視角色繫結
kubectl get role, rolebinding -n roledemo
使用證書識別身份
我們首先得有一個 rbac-user.sh 證書指令碼
這裡包含了很多證書檔案,在TSL目錄下,需要複製過來
通過下面命令執行我們的指令碼
./rbac-user.sh
最後我們進行測試
# 用get命令檢視 pod 【有許可權】
kubectl get pods -n roledemo
# 用get命令檢視svc 【沒許可權】
kubectl get svc -n roledmeo