0%

如何登录kubernetes dashboard

问题描述

我刚刚将kubeadm和kubelet升级到v1.8.0。并按照官方文档安装Dashboard。

1
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

之后,我通过运行如下命令启动Dashboard:

1
$ kubectl proxy --address="192.168.0.101" -p 8001 --accept-hosts='^*$'

幸运的是,我能够访问到Dashboard:

http://192.168.0.101:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

我被重定向选择认证方式的页面:Kubeconfig或Token。

我尝试将/etc/kubernetes/admin.conf作为kubeconfig上传,但失败了。然后我尝试使用我从kubeadm令牌列表中获取的令牌进行登录但又失败了。

问题是我如何登录Dashboard。看起来他们添加了许多安全机制。谢谢。

高票回答

从1.7版本开始,Dashboard 使用更安全的设置。这意味着,默认情况下,它具有最小的权限集,并且只能通过HTTPS访问。在执行任何进一步的步骤之前,建议阅读访问控制指南

从版本1.7开始,Dashboard支持基于以下内容的用户身份验证:

Dashboard on Github

Token

这里Token可以是静态令牌,服务帐户令牌,来自Kubernetes Authenticating的OpenID Connect Token,但不是kubeadm Bootstrap Token。

使用kubectl,我们可以获得默认情况下在kubernetes中创建的服务帐户(例如deployment)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ kubectl -n kube-system get secret
# All secrets with type 'kubernetes.io/service-account-token' will allow to log in.
# Note that they have different privileges.
NAME TYPE DATA AGE
deployment-controller-token-frsqj kubernetes.io/service-account-token 3 22h

$ kubectl -n kube-system describe secret deployment-controller-token-frsqj
Name: deployment-controller-token-frsqj
Namespace: kube-system
Labels: <none>
Annotations: kubernetes.io/service-account.name=deployment-controller
kubernetes.io/service-account.uid=64735958-ae9f-11e7-90d5-02420ac00002

Type: kubernetes.io/service-account-token

Data
====
ca.crt: 1025 bytes
namespace: 11 bytes
token: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkZXBsb3ltZW50LWNvbnRyb2xsZXItdG9rZW4tZnJzcWoiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGVwbG95bWVudC1jb250cm9sbGVyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiNjQ3MzU5NTgtYWU5Zi0xMWU3LTkwZDUtMDI0MjBhYzAwMDAyIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRlcGxveW1lbnQtY29udHJvbGxlciJ9.OqFc4CE1Kh6T3BTCR4XxDZR8gaF1MvH4M3ZHZeCGfO-sw-D0gp826vGPHr_0M66SkGaOmlsVHmP7zmTi-SJ3NCdVO5viHaVUwPJ62hx88_JPmSfD0KJJh6G5QokKfiO0WlGN7L1GgiZj18zgXVYaJShlBSz5qGRuGf0s1jy9KOBt9slAN5xQ9_b88amym2GIXoFyBsqymt5H-iMQaGP35tbRpewKKtly9LzIdrO23bDiZ1voc5QZeAZIWrizzjPY5HPM1qOqacaY9DcGc7akh98eBJG_4vZqH2gKy76fMf0yInFTeNKr45_6fWt8gRM77DQmPwb3hbrjWXe1VvXX_g

Kubeconfig

kubeconfig文件中的用户需要用户名和密码或令牌,而admin.conf只有客户端证书。

1
$ kubectl config set-credentials cluster-admin --token=bearer_token

替代方案

以下是绕过身份验证的两种方法,但请谨慎使用。

使用HTTP部署

1
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/alternative/kubernetes-dashboard.yaml

可以使用kubectl代理在http://localhost:8001/ui加载Dashboard。

授予Dashboard管理员权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ cat <<EOF | kubectl create -f -
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: kubernetes-dashboard
labels:
k8s-app: kubernetes-dashboard
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: kubernetes-dashboard
namespace: kube-system
EOF

之后,您可以使用登录页面上的“跳过”选项来访问Dashboard。

如果您使用的是Dashboard v1.10.1版本或更高版本,则还必须将–enable-skip-login添加到部署的命令行参数中。您可以通过将其添加到kubectl edit deployment/kubernetes-dashboard –namespace=kube-system中的args来实现。

1
2
3
4
5
containers:
- args:
- --auto-generate-certificates
- --enable-skip-login # <-- add this line
image: k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1

原文链接

How to sign in kubernetes dashboard?