19 - --feature-gates=RemoveSelfLink=false
[root@master ~]#
编辑bb.csv文件
文件中内容分别为: 上面生成的id,自定义用户名,id【中间必须用,隔开】
[root@master ~]# cat /etc/kubernetes/pki/bb.csv
f53309a4a68ce1ae8ead,ccx,3
[root@master ~]#
然后重启服务,启用token就算配置完成了
[root@master ~]# systemctl restart kubelet
[root@master ~]#
[root@master ~]# kubectl get nodes # 需要等这能看到下面内容
NAME STATUS ROLES AGE VERSION
master Ready master 114d v1.21.0
node1 Ready 114d v1.21.0
node2 Ready 114d v1.21.0
[root@master ~]#
测试token验证
-
客户端连接集群语法:
kubectl -s https://集群master_ip:6443 --token='集群mastre生成的id' get nodes
【kubectl options
可以查看更多参数】 -
下面我们一步步做认证连接,注意看注释内容
此时连接会报证书错误的报错
[root@master2 ~]# kubectl -s https://192.168.59.142:6443 --token=‘f53309a4a68ce1ae8ead’ get nodes -n kube-system
Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of “crypto/rsa: verification error” while trying to verify candidate authority certificate “kubernetes”)
[root@master2 ~]#
我们可以加上忽略证书检测 --insecure-skip-tls-verify=true
然后又报错说ccx用户没有办法检测nodes的这个命名空间
[root@master2 ~]# kubectl -s https://192.168.59.142:6443 --token=‘f53309a4a68ce1ae8ead’ --insecure-skip-tls-verify=true get nodes -n kube-system
Error from server (Forbidden): nodes is forbidden: User “ccx” cannot list resource “nodes” in API group “” at the cluster scope
[root@master2 ~]#
综上,得到一个结论是:已经认证通过了,只是没有权限查看而已
#下面我们吧token值改一位输,就会提示报错了,说没有认证信息
[root@master2 ~]# kubectl -s https://192.168.59.142:6443 --token=‘f53309a4a68ce1ae8eax’ --insecure-skip-tls-verify=true get nodes -n kube-system
error: You must be logged in to the server (Unauthorized)
[root@master2 ~]#
- 认证过了,就牵扯到授权了,关于授权,看下面授权部分中的说明吧【内容牵扯很多,这只要知道token是啥东西就行】
===============================================================================
感兴趣的自行百度
===========================================================================
- kubeconfig文件—并不是有一个名字叫做kubeconfig的文件,而是用于做认证的文件我们就叫做kubeconfig
如:aa.txt里有认证信息,所以aa.txt也就是kubeconfig文件
- 我们搭建集群的时候有一个流程【如下图】,这就是创建kubeconfig文件的流程
- 也就是说,安装好kubernetes之后,系统会生成一个管理员权限kubeconfig文件
做下测试,我们在root下是可以执行查看,但我们切换到其他用户,就没有办法查看了,就是因为其他用户没有这个kuebconfig文件
而集群默认使用的是:~/.kube/config
的kubeconfig文件,而这个文件,是在/root下面的
[root@master ~]# ls /etc/kubernetes/
admin.conf controller-manager.conf kubelet.conf manifests pki scheduler.conf
[root@master ~]#
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 114d v1.21.0
node1 Ready 114d v1.21.0
node2 Ready 114d v1.21.0
[root@master ~]#
[root@master ~]# su - ccx
[ccx@master ~]$
[ccx@master ~]$ kubectl get nodes
The connection to the server localhost:8080 was refused - did you specify the right host or port?
[ccx@master ~]$
- 现在我们将这个文件拷贝到ccx用户下的这个目录,给予权限以后再次测试【集群master节点】
测试有点多,是逐步测试的,注意看里面的注释内容。
[root@master ~]#
[root@master ~]# cp /etc/kubernetes/admin.conf ~ccx/
[root@master ~]# chown ccx.ccx ~ccx/admin.conf
[root@master ~]#
[root@master ~]# su - ccx
Last login: Wed Nov 3 12:35:22 CST 2021 on pts/0
[ccx@master ~]$ ls ~/
admin.conf
[ccx@master ~]$ cd ~/
[ccx@master ~]$ pwd
/home/ccx
[ccx@master ~]$
此时看呢,还是不行的,因为集群不知道你使用的是哪个kubeconfig文件
[ccx@master ~]$ kubectl get nodes
The connection to the server localhost:8080 was refused - did you specify the right host or port?
[ccx@master ~]$
所以,只要我们指定这个文件名就可以查看了【路径是固定的,所以不需要加路径】
[ccx@master ~]$ kubectl --kubeconfig=admin.conf get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 114d v1.21.0
node1 Ready 114d v1.21.0
node2 Ready 114d v1.21.0
[ccx@master ~]$
综上,所以某用户只要拿到这个文件,不管这个文件的名字是什么,改用户都会具有管理员权限
但是我们也不能每次都只能这个环境变量啊,挺麻烦的,所以我们可以设置变量的形式,这样就不用指定文件了
注意,当前还是在ccx这个普通用户下的
[ccx@master ~]$ export KUBECONFIG=admin.conf
[cc