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文件

最后修改:2023 年 06 月 09 日
如果觉得我的文章对你有用,请随意赞赏