Kubernetes安全之认证
機制說明
Kubernetes作為一個分布式集群的管理工具,保證集群的安全性是其一個重要的任務(wù)。API Server是集群內(nèi)部各個組件通信的中介,也是外部控制的入口。所以Kubernetes的安全機制基本就是圍繞保護API Server來設(shè)計的。Kubernetes使用了認證(Authentication)、鑒權(quán)(Authorization)、準入控制(AdmissionControl)三步來保證API Server的安全
Authentication
-
HTTP Token認證:通過一個Token來識別合法用戶
- HTTP Token的認證是用一個很長的特殊編碼方式的并且難以被模仿的字符串- Token來表達客戶的一種方式。Token是一個很長的很復(fù)雜的字符串,每一個Token對應(yīng)一個用戶名存儲在API Server能訪問的文件中。當(dāng)客戶端發(fā)起API調(diào)用請求時,需要在HTTP Header里放入Token
-
HTTP Base認證:通過用戶名+密碼的方式認證
- 用戶名+:+密碼用BASE64算法進行編碼后的字符串放在HTTP Request中的HeatherAuthorization域里發(fā)送給服務(wù)端,服務(wù)端收到后進行編碼,獲取用戶名及密碼
-
最嚴格的HTTPS證書認證:基于CA根證書簽名的客戶端身份認證方式
Ⅰ、HTTPS證書認證:
Ⅱ、需要認證的節(jié)點
兩種類型
- Kubenetes組件對API Server的訪問:kubectl、Controller Manager、Scheduler、kubelet、kube-proxy
- Kubernetes管理的Pod對容器的訪問:Pod(dashborad也是以Pod形式運行)
安全性說明
- Controller Manager、Scheduler與API Server在同一臺機器,所以直接使用API Server的非安全端口訪問,–insecure-bind-address=127.0.0.1
- kubectl、kubelet、kube-proxy訪問API Server就都需要證書進行HTTPS雙向認證
證書頒發(fā)
- 手動簽發(fā):通過k8s集群的跟ca進行簽發(fā)HTTPS證書
- 自動簽發(fā):kubelet首次訪問API Server時,使用token做認證,通過后,Controller Manager會為kubelet生成一個證書,以后的訪問都是用證書做認證了
Ⅲ、kubeconfig
kubeconfig文件包含集群參數(shù)(CA證書、API Server地址),客戶端參數(shù)(上面生成的證書和私鑰),集群context信息(集群名稱、用戶名)。Kubenetes組件通過啟動時指定不同的kubeconfig文件可以切換到不同的集群
Ⅳ、ServiceAccount
Pod中的容器訪問API Server。因為Pod的創(chuàng)建、銷毀是動態(tài)的,所以要為它手動生成證書就不可行了。Kubenetes使用了Service Account解決Pod訪問API Server的認證問題
Ⅴ、Secret與SA的關(guān)系
Kubernetes設(shè)計了一種資源對象叫做Secret,分為兩類,一種是用于ServiceAccount的service-accounttoken,另一種是用于保存用戶自定義保密信息的Opaque。ServiceAccount中用到包含三個部分:Token、ca.crt、namespace
- token是使用API Server私鑰簽名的JWT。用于訪問API Server時,Server端認證
- ca.crt,根證書。用于Client端驗證API Server發(fā)送的證書
- namespace,標識這個service-account-token的作用域名空間
默認情況下,每個namespace都會有一個ServiceAccount,如果Pod在創(chuàng)建時沒有指定ServiceAccount,就會使用Pod所屬的namespace的ServiceAccount
總結(jié)
總結(jié)
以上是生活随笔為你收集整理的Kubernetes安全之认证的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Kubernetes存储之volume
- 下一篇: Kubernetes安全之鉴权