Kubernetes dashboard分级授权及认证:
1、部署:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.1/aio/deploy/recommended.yaml
管方提供的文档是集群内部可以访问的,如果要想集群外部访问需要修改下Service中的端口和端口类型:
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kube-system
spec:
NodePort: #指定端口类型为nodePort类型
- port: 443
targetPort: 8443
nodePort: 30001 #指定nodePort端口号
selector:
k8s-app: kubernetes-dashboard
同时官方文件中也会创建一个查看集群内存使用率的一个Pod名为metrics-server,如果之前有创建的相关Pod就把与它相关的删除即可,否者会报错!
Kubernetes dashboard的认证方式必须是ServiceAccount(服务账户) 被dashboard Pod拿来由kubernetes进行认证。
Token:
1、创建合理的ServiceAccount 根据其管理目标,使用rolebanding或clusterrolebinding绑定至合理的role或clusterrole
2、获取到此ServiceAccount的secret,查看secret的详细信息,其中就有token,此token可以直接认证。
kubeconfig:
1、创建合理的ServiceAccount 根据其管理目标,使用rolebanding或clusterrolebinding绑定至合理的role或clusterrole
2、获取TOKEN
token=$(kubectl get secret SERVICEACCOUNT_SECRETNAME -o jsonpath={.data.token} | base64 -d)
3、生成kubeconfig配置文件
kubectl config set-cluster --kubeconfig=/PATH/TO/SOMEFILE
kubectl config set-credentials NAME --token=$token --kubeconfig=/PATH/TO/SOMEFILE
kubectl config set-context
kubectl config use-context
因为dashboard是一个Pod,我们所提供的信息实际上是让该Pod认证到Kubernetes之上的,也就意为着我们要为dashboard的Pod提供一个kubeconfig文件,因此kubeconfig文件的主题必须是ServiceAccount
dashboard认证也是基于RBAC协议认证可分为以下两种认证方式
举例:
Token认证:
创建管理全集群的账户:
第一、先创建ServiceAccount。
kubectl create serviceaccount NAME -n NAMESPACE_NAME
注意此ServiceAccount要想管理哪个名称空间里面的对象,这里就要创建到哪个名称空间里面
第二、将创建好的ServiceAccount和clusterrole类型的cluster-admin绑定到一起,cluster-admin是集群部署后自动创建的属于内置的clusterrole,所以不用新创建cluserrole
kubectl create clusterrolebinding NAME --clusterrole=cluster-admin --serviceaccount=NAMESPACE_NAME:SERVICEACCOUNT_NAME
--serviceaccount=NAMESPACE_NAME:SERVICEACCOUNT_NAME格式是左边名称空间,以":"隔开右边是SERVICEACCOUNT_NAME(服务账户名字)
第三、查看secret信息。
创建ServiceAccount时会自动生成一个secret信息,名字生成的格式是ServiceAccountname+token+一些自定义字符
kubectl get secret -n NAMESPACE_NAME
找到刚才创建的ServiceAccountNAme名字,然后:
kubectl describe SECRET secretName -n NAMESPACE_NAME
查看token信息,复制token信息
第四、创建官网给的Pod 官网中封装的有很多东西,可以把不用的给删除掉,记得按照上面的修改Service端口类型,否者集群外部的会无法访问dashboard
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.1/aio/deploy/recommended.yaml
第五、打开浏览器访问dashboard地址,选择token,把上面复制到的token信息复制到对话框里面登录
kubeconfig认证:
创建管理全集群的kubeconfig:
第一、先创建ServiceAccount。
kubectl create serviceaccount NAME -n NAMESPACE_NAME
注意此ServiceAccount要想管理哪个名称空间里面的对象,这里就要创建到哪个名称空间里面
第二、将创建好的ServiceAccount和clusterrole类型的cluster-admin绑定到一起,cluster-admin是集群部署后自动创建的属于内置的clusterrole,所以不用新创建cluserrole
kubectl create clusterrolebinding NAME --clusterrole=cluster-admin --serviceaccount=NAMESPACE_NAME:SERVICEACCOUNT_NAME
--serviceaccount=NAMESPACE_NAME:SERVICEACCOUNT_NAME格式是左边名称空间,以":"隔开右边是SERVICEACCOUNT_NAME(服务账户名字)
第三、查看secret信息。
创建ServiceAccount时会自动生成一个secret信息,名字生成的格式是ServiceAccountname+token+一些自定义字符
kubectl get secret -n NAMESPACE_NAME
第四、创建kubeconfig的集群
4.1、创建kubeconfig的集群
kubectl config set-cluster CLUSTERNAME --certificate-authority=/etc/kubernetes/pki/ca.crt --server="kubernetes的api地址" --embed-certs=true --kubeconfig=/PATH/NAME.conf
--kubeconfig:当前配置信息另存为一个新的kubeconfig文件
测试是否创建成功:
kubectl config view --kubeconfig=/PATH/NAME.conf
4.2、使用上方token方式进行认证:
Token=$(kubectl get secret secretTOKENNAME -o jsonpath={.data.token} | base64 -d)
kubectl config set-credentials NAME --token=$token --kubeconfig=/PATH/NAME.conf
此时查看创建好的配置文件信息会显示user和token信息
kubectl config view --kubeconfig=/PATH/NAME.conf
4.3、设置context
kubectl config set-context NAME@kubernetes --cluster=4.1中的CLUSTERNAME --user=4.2中的NAME --kubeconfig=/PATH/NAME.conf
4.4、切换kubernetes用户
kubectl config use-context 4.3中的NAME@kubernetes --kubeconfig=/PATH/NAME.conf
这时候config文件已经全部配置完成,现在只需要把/PATH/NAME.conf,拷贝到登录dashboard客户端打开浏览器使用kubeconfig认证即可。
对于第二个来说就是把第一个ServiceAccount的token封装成了kubeconfig文件
仅登录用户可评论,点击 登录