树莓派kuernetes集群中部署dashboard

Posted by ShenHengheng on 2019-01-15

在最近关于在树莓派集群上使用kubeadm配置安装Kubernetes 1.13.0的教程中,默认情况下启用了RBAC,本文章将介绍如何在启用RBAC的情况下运行Kubernetes仪表板。

准备

配置 kubeconfig

配置本地树莓派(并非master),以便使用kubectl与上一个教程中配置的集群进行通信。使用scp从master节点上下载配置文件

$ scp pi@edge-master:/home/pi/.kube/config ./config

将配置文件拷贝到本地机器上的 ~/.kube 目录下.

注意:如果你已经有一个集群的配置,它将会覆盖之前的配置,为了避免这种情况,可以在复制时添加  — kubeconfig.

$ cp config ~/.kube/config

测试:

$ kubectl get nodes
NAME          STATUS   ROLES    AGE     VERSION
edge-master   Ready    master   7d23h   v1.13.1
edge-node1    Ready    <none>   7d23h   v1.13.1
edge-node2    Ready    <none>   7d23h   v1.13.1
edge-node3    Ready    <none>   6d      v1.13.1

创建仪表盘

Kubernetes source 在 kube-system 命名空间下将会创建以下几种资源: secret, service account, role, rolebinding, deployment, and service.

$ kubectl create -f  https://raw.githubusercontent.com/kubernetes/dashboard/72832429656c74c4c568ad5b7163fa9716c3e0ec/src/deploy/recommended/kubernetes-dashboard-arm.yaml
secret "kubernetes-dashboard-certs" created
serviceaccount "kubernetes-dashboard" created
role "kubernetes-dashboard-minimal" created
rolebinding "kubernetes-dashboard-minimal" created
deployment "kubernetes-dashboard" created
service "kubernetes-dashboard" created

:这里会出现一个问题就是Pod总是重启,后来查资料发现dashboard的版本低,这时需要手动修改一下yaml或者在线修改pods的镜像即可。

这里介绍几个技巧:

查看日志

$ kubectl logs -p POD_NAME

编辑 Pod:

$ kubectl edit pods POD_NAME -n NAMESPACE

导出pod或者deployment配置

$ kubectl get pods POD_NAME -n NAMESPACE_NAME -o yaml

之后,您将能够从本地机器启动代理以访问刚刚创建的服务。

$ nohup kubectl proxy --address 0.0.0.0 --accept-hosts '.*' &

Dashboard 可以通过 https://172.16.3.17:32351 访问仪表盘。

注意

  • 这里要使用https协议

  • 由于kubernetes-dashboard服务使用了NodePort的方式,因此这里的端口号为NodePort,这里的IP为NodeIP,即该POd所在的Node地址。

2019-01-15 15-12-04屏幕截图.png

这里我们选择跳过,可以出现下面所示的资源管理界面。

2019-01-15 15-13-14屏幕截图.png

但是,这种打开方式是安全的,但是集群管理是不允许操作的,这就是说这种打开方式是匿名或者游客模式。

接下来需要创建一个 service account 在 default namespace 并且创建一个 clusterrolebinding 对象允许我们的service account 来使用 dashboard.

$ kubectl create serviceaccount dashboard -n default
serviceaccount “dashboard” created
$ kubectl create clusterrolebinding dashboard-admin -n default \
  --clusterrole=cluster-admin \
  --serviceaccount=default:dashboard
clusterrolebinding "dashboard-admin" created

如果想了解更多有关集群角色和更细的配置可以参考:
官方文档.

以下命令可以得到我们创建的 服务帐号的 token(令牌),我们将打印出的token值复制到登录对话框中。

$ kubectl get secret $(kubectl get serviceaccount dashboard -o jsonpath="{.secrets[0].name}") -o jsonpath="{.data.token}" | base64 --decode
eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImRhc2hib2FyZC10b2tlbi01bmo5ayIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJkYXNoYm9hcmQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI1OGEzNzlmMC0xODk1LTExZTktYjBlMi1iODI3ZWJiMWY4NTgiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6ZGVmYXVsdDpkYXNoYm9hcmQifQ.X6evSc9wDPPa6T9CLy40gDj8aUTjVMg1PhA5bQIhSTnvVeB8mG763y9j8c0G3wOv4gCk1egziTIenpFx0w04P2zUTcqrHdse51vnbE5TNETQo8EiY2ELsqUJuaGd-O3Z6nmL8psBk4CmloPCMgYaBXPWiHPeS9dyOgTH-KxFoEEAuCX1i3BWPkYN_faN-sQe7zlrhu27lPJVUey8HGVjPu_6zGxMSWcZu2Wz3Euc1A-Rg6tekDhnxhxH_dcMRF38jSVY_z9r7mfvw6dJmxXTlH-KNzagruulH2l-Pg9obpz7HO7t14JB6c1F6p5Qa4zk2y9vOz4qCPk6IM7_ZfTwCw