组里的 k8s cluster Dashboard 一直没有设置登录,导致所有可以 ping IP 的人都可以登录管理界面,这样显然是不合理的,应该要设置几个不同权限的账户,并且开启 Dashboard 的 Basic Auth。
关于开启 Dashboard Basic Auth 网上有不少资料,但是在实际操作中还是遇到几个莫名其妙的坑。
创建用户文件
根据实际需求,并不需要使用 LDAP 等等复杂的登录方式,我们只需要一个 admin 账户,再加上低权限的只读 view 账户,以及有修改权限的 edit 账户就足够。
因此,只要添加 /etc/kubernetes/pki/basic_auth_file
文件即可。
vi /etc/kubernetes/pki/basic_auth_file
password,username,1
需要注意的一个坑是用户名密码的顺序是反过来的(如上面所示),否则在 dashboard 上怎么输入都提示不对。
修改 API Server 配置
修改 /etc/kubernetes/manifests/kube-apiserver.yaml
加入一个启动参数
vim /etc/kubernetes/manifests/kube-apiserver.yaml
- --basic-auth-file=/etc/kubernetes/pki/basic_auth_file
这里又遇到一个坑,在我们的 k8s Master 节点这个目录下有两个文件,第一个叫 kube-apiserver.yaml, 另一个是 kube-apiserver_xxx.yaml。
本来我以为第一个是实际的配置文件,第二个应该是其他人配置时 copy 的一个备份。
然而实际并不是,真正被使用的是第二个文件,这点让人匪夷所思,我花了好久才发现这个坑,但是我始终没找到哪里指定了让 api server 读取 kube-apiserver_xxx.yaml
而不是 kube-apiserver.yaml
。
重启 API Server
很多资料上都会把重启 api server 一笔带过,但是都不写具体怎么操作,k8s 上并不是简单删除一个 pod 就算重启的。
又经过一番查找,发现了下面这个奇葩的方式
[root@master manifests]# pwd
/etc/kubernetes/manifests
# 把文件移出这个目录
[root@master manifests]# mv ./kube-apiserver.yaml ../
# 再把这个文件移回去 =.=
[root@master manifests]# mv ../kube-apiserver.yaml ./
看来 k8s 会一直监视这个目录,一旦发现新的配置文件,自动重启 api server。
既然这样,为什么我直接修改配置文件再保存,却不能触发自动重启呢? 这又是一个坑。
把用户和 k8s 的 role 绑定
kubectl create clusterrolebinding login-on-dashboard-with-cluster-admin --clusterrole=cluster-admin --user=admin
如果创建了多个不同的用户,在这里可以把它们绑定到不同的 k8s cluster role,这一点非常的方便。
更新 Dashboard 的 yaml
更新 kubernetes-dashboard.yaml
,加入 - --authentication-mode=basic
关于 dashboard 的部署网上有很多资料,在这里就不贴配置了。