配置kube-apiserver基于token的认证机制

发布时间 2023-08-19 22:45:25作者: nuccch

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"
}