如何登录kubernetes仪表板?

如何登录kubernetes仪表板?,kubernetes,dashboard,Kubernetes,Dashboard,我刚刚将kubeadm和kubelet升级到v1.8.0。并按照官方指示安装仪表板 之后,我通过运行 $ kubectl proxy --address="192.168.0.101" -p 8001 --accept-hosts='^*$' 幸运的是,我可以通过 我被重定向到这样一个登录页面,这是我以前从未见过的。 看起来有两种身份验证方法 我试图将/etc/kubernetes/admin.conf作为kubeconfig上传,但失败了。然后我尝试使用从kubeadm令牌列表中获取的令牌登

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

之后,我通过运行

$ kubectl proxy --address="192.168.0.101" -p 8001 --accept-hosts='^*$'
幸运的是,我可以通过

我被重定向到这样一个登录页面,这是我以前从未见过的。 看起来有两种身份验证方法

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

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

从1.7版开始,仪表板支持基于以下各项的用户身份验证:

  • 标头在每个请求中传递到仪表板。1.6版支持。具有最高优先级。如果存在,则不会显示登录视图
  • 可以在仪表板上使用
  • 可以在仪表板上使用
  • 可在仪表板上使用的文件
-

代币 这里,
令牌
可以是来自的
静态令牌
服务帐户令牌
OpenID连接令牌
,但不能是kubeadm
引导令牌

使用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
备选方案(不建议用于生产) 这里有两种绕过身份验证的方法,但请谨慎使用

使用HTTP部署仪表板 仪表板可通过
kubectl代理加载

向仪表板的服务帐户授予管理员权限 TL;博士 要在单个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中。对我来说,用英语学习或教学要困难得多

这是一个带有换行符和缩进的单行线,便于阅读:

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的令牌部分的第一条命令
  • 第3行-仅打印以
    部署控制器令牌-
    开头的行的第一个字段(即pod名称)
  • 第1行-这是@silverfox的令牌部分的第二条命令
  • 第5行-仅打印第一个字段为“token:”的行的第二个字段:
下载

然后运行以下命令:

kubectl apply -f kubernetes-dashboard.yaml
使用以下命令查找公开的端口:

kubectl get services -n kube-system
您应该能够在以下位置获取仪表板:
没有身份验证

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

$ 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
然后,您可以使用刚刚创建的集群管理服务帐户的令牌

$ 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指南》-

中的话,结合了两个答案:和:


前面所有的答案对我都很好。但我这边会有一个直截了当的答案。只需使用
kubectl-nkube系统descripe secret$(kubectl-nkube系统get secret | grep admin user | awk'{print$1}')
。对于某些键(
名称
名称空间
标签
,…,
标记
),您将有许多值。最重要的是与您的姓名相对应的
标记。复制该令牌并将其粘贴到令牌框中。希望这有帮助。

由于安全问题,默认情况下已禁用跳过登录

在仪表板yaml中添加此参数

- --enable-skip-login

要将其取回

一个不言自明的简单一行代码,用于提取kubernetes仪表板登录的令牌

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

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

  • 创建群集管理服务帐户

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

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

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

  • 现在您可以登录了


  • 我在这里没有看到编程问题。请改为尝试serverfault.com。如果您不在本地主机上,则可能要求您仅使用https,否则登录表单将以静默方式失败(无错误消息)。详细信息:您需要生成令牌,请遵循此指南-@Jolta Devops现在是一个编程活动,这要感谢kubernetes,您将不得不面对它;)你能给我们一个例子,如何创建一个用户,然后用令牌登录吗?我仍然不知道如何像用户一样使用令牌。请参阅Kubernetes Authentications中的我正在为我的家庭服务器使用此令牌。当接受的答案是登录我时,此令牌对我很有效,但有一些授权错误。请注意,此命令赋予服务帐户许多权限,在生产环境中可能不可取可能还想在kube系统下添加serviceaccount,因为这是dashboard livesWorked为我设计的地方!我使用端口8001公开了服务,并使用SSH隧道从本地机器进行访问。我复制了一个令牌,粘贴了它,然后presto,Im,Link死了。这里有一个新的:是否有相当于awk的powershell?@duct\u tape\u coder just kubectl-n kube system获取机密并找到名为deployment controller token SOMEHASH的tokenm,然后just kubectl-n kube system描述机密deplo
    - --enable-skip-login
    
    kubectl describe secret -n kube-system | grep deployment -A 12
    
    kubectl create serviceaccount dashboard -n default
    
    kubectl create clusterrolebinding dashboard-admin -n default --clusterrole=cluster-admin --serviceaccount=default:dashboard
    
    kubectl get secret $(kubectl get serviceaccount dashboard -o jsonpath="{.secrets[0].name}") -o jsonpath="{.data.token}" | base64 --decode