K8S的安全機制主要圍繞着API Server設計。使用了認證(Authentication)、鑑權(Authorization)、准入控制(Admission)來保證API Server安全。
一、認證(Authentication):
首先通過認證確認身份,可以互相通信。
認證支持三種類型,不過咱們通常用CA進行認證,畢竟安全性高
- HTTP Token認證(單向認證)
- HTTP Base認證:用戶名密碼(單向認證)
- HTTPS證書認證:基於CA雙向認證(最安全)
一、組件與ApiServer通信兩種類型
- Controller Manager和Scheduler因爲在本機,通常不需要CA
- kubectl、kubelet、kube-proxy訪問API Server需要CA證書進行HTTPS
kubeconfig文件包含集羣、API Server地址、CA、context等相關信息。
二、Pod與API Server交互使用ServiceAccount
Pod中的容器訪問API Server。因爲Pod的特性,重建、銷燬,所以不採用CA(CA通信成本略高),通過SA方式與API Server交互。
K8S的Secret分爲兩類,
- 用於SA的token、ca.crt、namespace
- 用戶自定義加密信息
認證(Authentication)小結:k8s組件與Pod中容器與API Server交互方式的區別就在於一種使用了CA的HTTPS通信,另一種通過SA訪問
二、鑑權(Authorization)
基於角色的訪問控制(RBAC模式)