Kubernetes除了提供了基於CA證書的認證方式,也提供了基於HTTP Token
的簡單認證方式。各客戶端組件與API Server之間的通信方式仍然採用HTTPS,但不採用CA數字證書。這種認證機制與CA證書相比,安全性很低,在生產環境不建議使用。
採用基於HTTP Token
的簡單認證方式時,API Server對外暴露HTTPS端口,客戶端攜帶Token來完成認證過程。
需要說明的是,kubectl
命令行工具比較特殊,它同時支持CA證書
和簡單認證
兩種方式與API Server通信,其他客戶端組件只能配置基於CA證書的認證方式或者非安全方式與API Server通信。
再添加Token認證之前訪問apiserver
提示未授權:
[root@192 ~]# curl -k --header "Authorization:Bearer admin" https://192.168.3.135:6443/version
{
"kind": "Status",
"apiVersion": "v1",
"metadata": {
},
"status": "Failure",
"message": "Unauthorized",
"reason": "Unauthorized",
"code": 401
}
基於Token認證的配置過程如下。
(1)創建包括用戶名、密碼和UID的文件token_auth_file
,將其放置在合適的目錄下,例如/etc/kuberntes
目錄。需要注意的是,這是一個純文本文件,用戶名、密碼都是明文。
$ cat /etc/kubernetes/token_auth_file
admin,admin,1
system,system,2
(2)設置kube-apiserver
的啓動參數“--token-auth-file
”,使用上述文件提供安全認證,然後重啓API Server服務。
在配置文件/etc/kubernetes/apiserver
中添加如下參數:
--secure-port=6443
--token-auth-file=/etc/kubernetes/token_auth_file
重啓kube-apiserver:systemctl restart kube-apiserver
(3)用curl客戶端工具通過token訪問API Server:
# 給apiserver添加Token認證之後,再次訪問apiserver就正常了
[root@192 ~]# curl -k --header "Authorization:Bearer admin" https://192.168.3.135:6443/version
{
"major": "1",
"minor": "19",
"gitVersion": "v1.19.0",
"gitCommit": "e19964183377d0ec2052d1f1fa930c4d7575bd50",
"gitTreeState": "clean",
"buildDate": "2020-08-26T14:23:04Z",
"goVersion": "go1.15",
"compiler": "gc",
"platform": "linux/amd64"
}