# Kubernetes集群安全機制
## 概述
當我們訪問K8S集群時,需要經過三個步驟完成具體操作
- 認證
- 鑒權【授權】
- 準入控制
進行訪問的時候,都需要經過 apiserver, apiserver做統一協調,比如門衛
- 訪問過程中,需要證書、token、或者用戶名和密碼
- 如果訪問pod需要serviceAccount

### 認證
對外不暴露8080端口,只能內部訪問,對外使用的端口6443
客戶端身份認證常用方式
- https證書認證,基于ca證書
- http token認證,通過token來識別用戶
- http基本認證,用戶名 + 密碼認證
### 鑒權
基于RBAC進行鑒權操作
基于角色訪問控制
### 準入控制
就是準入控制器的列表,如果列表有請求內容就通過,沒有的話 就拒絕
## RBAC介紹
基于角色的訪問控制,為某個角色設置訪問內容,然后用戶分配該角色后,就擁有該角色的訪問權限

k8s中有默認的幾個角色
- role:特定命名空間訪問權限
- ClusterRole:所有命名空間的訪問權限
角色綁定
- roleBinding:角色綁定到主體
- ClusterRoleBinding:集群角色綁定到主體
主體
- user:用戶
- group:用戶組
- serviceAccount:服務賬號
## RBAC實現鑒權
- 創建命名空間
### 創建命名空間
我們可以首先查看已經存在的命名空間
```bash
kubectl get namespace
```

然后我們創建一個自己的命名空間 roledemo
```bash
kubectl create ns roledemo
```
### 命名空間創建Pod
為什么要創建命名空間?因為如果不創建命名空間的話,默認是在default下
```bash
kubectl run nginx --image=nginx -n roledemo
```
### 創建角色
我們通過 rbac-role.yaml進行創建

tip:這個角色只對pod 有 get、list權限
然后通過 yaml創建我們的role
```bash
# 創建
kubectl apply -f rbac-role.yaml
# 查看
kubectl get role -n roledemo
```

### 創建角色綁定
我們還是通過 role-rolebinding.yaml 的方式,來創建我們的角色綁定

然后創建我們的角色綁定
```bash
# 創建角色綁定
kubectl apply -f rbac-rolebinding.yaml
# 查看角色綁定
kubectl get role, rolebinding -n roledemo
```

### 使用證書識別身份
我們首先得有一個 rbac-user.sh 證書腳本


這里包含了很多證書文件,在TSL目錄下,需要復制過來
通過下面命令執行我們的腳本
```bash
./rbac-user.sh
```
最后我們進行測試
```bash
# 用get命令查看 pod 【有權限】
kubectl get pods -n roledemo
# 用get命令查看svc 【沒權限】
kubectl get svc -n roledmeo
```

- Kubernetes簡介
- 搭建K8S集群前置知識
- 使用kubeadm方式搭建K8S集群
- 使用二進制方式搭建K8S集群
- Kubeadm和二進制方式對比
- Kubernetes集群管理工具kubectl
- Kubernetes集群YAML文件詳解
- Kubernetes核心技術Pod
- Kubernetes核心技術Controller
- Kubernetes核心技術Service
- Kubernetes控制器Controller詳解
- Kubernetes配置管理
- Kubernetes集群安全機制
- Kubernetes核心技術Ingress
- Kubernetes核心技術Helm
- Kubernetes持久化存儲
- Kubernetes集群資源監控
- Kubernetes搭建高可用集群
- Kubernetes容器交付介紹
- 使用kubeadm-ha腳本一鍵安裝K8S
- Kubernetes可視化界面kubesphere
- Kubernetes配置默認存儲類
- 使用Rancher搭建Kubernetes集群
- Kubernetes中的CRI