如何登录Kubernetes仪表板?


127

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

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

之后,我通过运行启动仪表板

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

然后幸运的是,我能够通过http://192.168.0.101:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/访问仪表板

我被重定向到这样一个从未见过的登录页面。 在此处输入图片说明看来有两种验证方式。

我尝试将其上传/etc/kubernetes/admin.conf为kubeconfig,但失败了。然后,我尝试使用从中获得的令牌kubeadm token list登录,但再次失败。

问题是我如何登录仪表板。看起来他们比以前增加了很多安全机制。谢谢。


6
我在这里看不到编程问题。请尝试使用serverfault.com。
Jolta

如果您不在本地主机上,则可能只需要使用https,否则登录表单将以静默方式失败(没有err msg)。详细信息:stackoverflow.com/questions/53957413/...
普特尼克

您需要生成令牌,请遵循此指南-jhooq.com/setting-up-kubernetes-dashboard
Rahul

1
@Jolta Devops现在是一个编程活动,这要感谢kubernetes,您将要面对它;)
Fabien Quatravaux

Answers:


165

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

Github上的仪表板

代币

这里Token可以为Static TokenService Account TokenOpenID Connect TokenKubernetes身份验证,而不是kubeadm Bootstrap Token

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

$ 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文件中的用户具有username & passwordtoken,但admin.conf只能具有client-certificate。您可以编辑配置文件以添加使用上述方法提取的令牌。

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

替代(不建议用于生产)

这有两种绕过身份验证的方法,但请谨慎使用。

使用HTTP部署仪表板

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

仪表盘可以在加载的http://本地主机:8001 / UIkubectl proxy

向仪表板的服务帐户授予管理员特权

$ 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

之后,您可以使用Skip登录页面上的选项来访问仪表板。

如果使用的仪表板版本为v1.10.1或更高版本,则还必须添加--enable-skip-login到部署的命令行参数中。你可以将它添加到这样做argskubectl edit deployment/kubernetes-dashboard --namespace=kube-system

例:

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

3
您能否举一个例子,说明如何创建用户然后使用令牌登录?我仍然不知道如何像用户一样使用令牌行为。
xren

请参阅Kubernetes身份验证中的静态令牌文件
silverfox

96

TL; DR

要在单个oneliner中获得令牌:

kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | awk '/^deployment-controller-token-/{print $1}') | awk '$1=="token:"{print $2}'

假设您的〜/ .kube / config存在且有效。这也kubectl config get-contexts表明您正在为登录的仪表板使用正确的上下文(集群和名称空间)。

说明

我从@silverfox的答案中学到了什么。这是一个非常有用的文章。不幸的是,它没有告诉您如何实际地将信息付诸实践。也许我做DevOps的时间太长了,但是我认为是在Shell中进行的。对我来说,用英语学习或教学要困难得多。

这是带有换行符和缩进以提高可读性的oneliner:

kubectl -n kube-system describe secret $(
  kubectl -n kube-system get secret | \
  awk '/^deployment-controller-token-/{print $1}'
) | \
awk '$1=="token:"{print $2}'

有4个不同的命令,它们按此顺序调用:

  • 第2行-这是@silverfox的Token部分中的第一个命令。
  • 第3行-仅打印以开头的行的第一个字段deployment-controller-token-(这是窗格名称)
  • 第1行-这是@silverfox的Token部分中的第二个命令。
  • 第5行-仅打印第一个字段为“令牌:” 的行的第二个字段

2
有没有相当于awk的powershell?
pipe_tape_coder

1
@duct_tape_coder只是kubectl -n kube-system获取机密并找到带有名称Deployment-controller-token-SOMEHASH的令牌,随后,kubectl -n kube-system将描述秘密的Deployment-controller-token-SOMEHASH。这就是awk所做的。
量子位

2
好答案。再采取以下步骤: kubectl describe secret $(kubectl get secret | awk '/^dashboard-token-/{print $1}') | awk '$1=="token:"{print $2}' 或向右推至剪贴板 kubectl describe secret $(kubectl get secret | awk '/^dashboard-token-/{print $1}') | awk '$1=="token:"{print $2}' | xclip -selection clipboard -i
javajon

@duct_tape_coder kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | sls admin-user | ForEach-Object { $_ -Split '\s+' } | Select -First 1)github.com/kubernetes/dashboard/blob/master/docs/user/...
普特尼克

48

如果您不想向仪表板服务帐户授予管理员权限,则可以创建集群管理服务帐户。

$ kubectl create serviceaccount cluster-admin-dashboard-sa
$ kubectl create clusterrolebinding cluster-admin-dashboard-sa \
  --clusterrole=cluster-admin \
  --serviceaccount=default:cluster-admin-dashboard-sa

然后,您可以使用刚刚创建的群集管理服务帐户的令牌。

$ kubectl get secret | grep cluster-admin-dashboard-sa
cluster-admin-dashboard-sa-token-6xm8l   kubernetes.io/service-account-token   3         18m
$ kubectl describe secret cluster-admin-dashboard-sa-token-6xm8l

我引用它giantswarm指南- https://docs.giantswarm.io/guides/install-kubernetes-dashboard/


5
当接受的答案登录到我中时,此命令对我来说效果很好,但存在一些授权错误。
ZedTuX '18年

3
请注意,此命令赋予服务帐户许多权利,在生产环境中可能不建议这样做。
X. Wang

4
也可能想在kube-system下添加服务帐户,因为这是仪表板所在的位置
atomaras

为我工作!我使用端口8001公开了该服务,并使用SSH隧道从本地计算机进行访问。
阿努拉达·费尔南多

18

结合两个答案:4999269847761914

# Create service account
kubectl create serviceaccount cluster-admin-dashboard-sa

# Bind ClusterAdmin role to the service account
kubectl create clusterrolebinding cluster-admin-dashboard-sa \
  --clusterrole=cluster-admin \
  --serviceaccount=default:cluster-admin-dashboard-sa

# Parse the token
TOKEN=$(kubectl describe secret $(kubectl -n kube-system get secret | awk '/^cluster-admin-dashboard-sa-token-/{print $1}') | awk '$1=="token:"{print $2}')

8

一种易于解释的简单代码,可为kubernetes仪表板登录提取令牌。

kubectl describe secret -n kube-system | grep deployment -A 12

复制令牌并将其粘贴到kubernetes仪表板的令牌登录选项下,您可以很好地使用kubernetes仪表板


5

以前的所有答案对我都很好。但是对我而言,直接的答案将来自https://github.com/kubernetes/dashboard/wiki/Creating-sample-user#bearer-token。只需使用kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')。您将有一些键多个值(NameNamespaceLabels,..., token)。最重要的是token与您的名字相对应的。复制该令牌并将其粘贴到令牌框中。希望这可以帮助。


在尝试了以上几个答案之后,这个答案就起作用了。我复制了一个令牌,然后粘贴,然后保存,我要插入
。– CENTURION

5

您需要先执行以下步骤,然后才能进行令牌身份验证

  1. 创建一个群集管理服务帐户

    kubectl create serviceaccount dashboard -n default
    
  2. 将集群绑定规则添加到您的仪表板帐户

    kubectl create clusterrolebinding dashboard-admin -n default --clusterrole=cluster-admin --serviceaccount=default:dashboard
    
  3. 使用此命令获取秘密令牌

    kubectl get secret $(kubectl get serviceaccount dashboard -o jsonpath="{.secrets[0].name}") -o jsonpath="{.data.token}" | base64 --decode
    
  4. 在Kubernetes仪表板登录页面中选择令牌身份验证 在此处输入图片说明

  5. 现在您可以登录


0

下载 https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/alternative/kubernetes-dashboard.yaml

type: NodePort for the Service

然后运行以下命令:

kubectl apply -f kubernetes-dashboard.yaml

使用以下命令找到暴露的端口:

kubectl get services -n kube-system

您应该能够通过http:// hostname:exposedport /获得仪表板, 而无需进行身份验证


这绝对是可怕的建议。即使从技术上讲是正确的
Christopher Thomas

0

由于安全问题,默认情况下已禁用跳过登录。https://github.com/kubernetes/dashboard/issues/2672

在您的仪表板Yaml中添加此arg

- --enable-skip-login

找回来


1
尽管此链接可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。如果链接的页面发生更改,仅链接的答案可能无效。
Stefan Becker

1
尽管此链接可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。如果链接的页面发生更改,仅链接的答案可能无效。- 评分
里克

@StefanBecker链接不是答案,而是证明来源The skip login has been disabled by default due to security issues。答案是- --enable-skip-login。可能不是最佳答案,但这不是仅链接的答案。
derHugo

@Rick链接不是答案,而是证明的来源The skip login has been disabled by default due to security issues。答案是- --enable-skip-login。可能不是最佳答案,但这不是仅链接的答案。
derHugo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.