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:
代码语言:javascript复制# 给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"
}