1. 程式人生 > 其它 >13.Kubernetes叢集安全機制

13.Kubernetes叢集安全機制

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