共计 3069 个字符,预计需要花费 8 分钟才能阅读完成。
如何部署 kubernates dashboard,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
直接部署官方默认的 dashboard:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
官方默认的 replica 是 1,可以下载官方的 yaml 文件,按需修改后部署
wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
部署成功后输入命令查看 Pod 可以看到 dashboard 已经部署成功
$ kubectl -n kube-system get pods
输入命令查看 Service,会发现 dashboard 的 IP 地址是一个自动分配的 Cluster IP 地址
$ kubectl -n kube-system get svc
在不配置任何网络策略的情况下,我们可以启动 kube-proxy,用 localhost 进行访问。也可以修改 service 增加 node port 后通过 node 的 IP 地址进行访问。
在这里我修改了 type 为 nodePort 和指定了 port
$ kubectl -n kube-system edit svc kubernetes-dashboard
apiVersion: v1
kind: Service
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{apiVersion : v1 , kind : Service , metadata :{ annotations :{}, labels :{k8s-app : kubernetes-dashboard}, name : kubernetes-dashboard , namespace : kube-system }, spec :{ports :[{ port :443, targetPort :8443}], selector :{k8s-app : kubernetes-dashboard}}}
creationTimestamp: 2019-06-25T08:32:58Z
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kube-system
resourceVersion: 131106
selfLink: /api/v1/namespaces/kube-system/services/kubernetes-dashboard
uid: d65ea8d9-9723-11e9-beba-08002777dcd3
spec:
clusterIP: 10.105.212.27
ports:
- nodePort: 31195
port: 443
protocol: TCP
targetPort: 8443
selector:
k8s-app: kubernetes-dashboard
sessionAffinity: None
type: NodePort
status:
loadBalancer: {}
修改后保存,可以看到 service 的 TYPE 已经变成 NodePort, 端口映射也完成了。
使用 dashboard 所在 node 的 IP 地址加上映射到 Node 的端口号可以直接访问 Dashboard
https://192.168.7.87:31195/
身份认证
登陆 dashboard 的时候支持 kubeconfig 和 token 两种认证方式,kubeconfig 中也依赖 token 字段,所以生成 token 这一步是必不可少的。
下文分两块来讲解两种登陆认证方式:
为 brand 命名空间下的 brand 用户创建 kubeconfig 文件
为集群的管理员(拥有所有命名空间的 amdin 权限)创建 token
使用 kubeconfig
登陆 dashboard 的时候可以指定 kubeconfig 文件来认证用户权限,如何生成登陆 dashboard 时指定的 kubeconfig 文件请参考创建用户认证授权的 kubeconfig 文件。
注意我们生成的 kubeconfig 文件中没有 token 字段,需要手动添加该字段。
比如我们为 brand namespace 下的 brand 用户生成了名为 brand.kubeconfig 的 kubeconfig 文件,还要再该文件中追加一行 token 的配置(如何生成 token 将在下文介绍),如下所示:
这样就可以使用 brand.kubeconfig 文件来登陆 dashboard 了,而且只能访问和操作 brand 命名空间下的对象。
生成 token
需要创建一个 admin 用户并授予 admin 角色绑定,使用下面的 yaml 文件创建 admin 用户并赋予他管理员权限,然后可以通过 token 登陆 dashbaord,该文件见 dashboard-admin.yaml。这种认证方式本质上是通过 Service Account 的身份认证加上 Bearer token 请求 API server 的方式实现,参考 Kubernetes 中的认证。
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: admin
annotations:
rbac.authorization.kubernetes.io/autoupdate: true
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
name: admin
namespace: kube-system
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin
namespace: kube-system
labels:
kubernetes.io/cluster-service: true
addonmanager.kubernetes.io/mode: Reconcile
执行命令
$ kubectl create -f dashboard-admin.yaml
执行命令
$ kubectl -n kube-system describe secret admin-token-78bfl
拷贝 token 在登录页面进行登录,可以以管理员身份进入 dashboard
也可以用命令直接提取 token
$ kubectl -n kube-system get secret admin-token-78bfl -o jsonpath={.data.token}|base64 -d
看完上述内容,你们掌握如何部署 kubernates dashboard 的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注丸趣 TV 行业资讯频道,感谢各位的阅读!