如何登录kubernetes仪表板?

ich*_*lau 93 dashboard kubernetes

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

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
Run Code Online (Sandbox Code Playgroud)

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

$ kubectl proxy --address="192.168.0.101" -p 8001 --accept-hosts='^*$'
Run Code Online (Sandbox Code Playgroud)

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

我被重定向到这样的登录页面,这是我以前从未见过的. 在此输入图像描述 看起来有两种身份验证方式.

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

问题是我如何在仪表板中登录.看起来他们添加了许多安全机制.谢谢.

sil*_*fox 135

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

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

--- Github上的仪表板

代币

这里Token可以为Static Token,Service Account Token,OpenID 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
Run Code Online (Sandbox Code Playgroud)

Kubeconfig

用户在kubeconfig文件需要或者username & password还是token,而admin.confclient-certificate.

$ kubectl config set-credentials cluster-admin --token=bearer_token
Run Code Online (Sandbox Code Playgroud)

替代方案(不建议用于生产)

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

使用HTTP部署仪表板

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/alternative/kubernetes-dashboard.yaml
Run Code Online (Sandbox Code Playgroud)

仪表板可以在http:// localhost:8001/ui上加载kubectl proxy.

授予Dashboard服务帐户管理员权限

$ 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
Run Code Online (Sandbox Code Playgroud)

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

  • 您能否举一个例子,说明如何创建用户然后使用令牌登录?我仍然不知道如何像用户一样使用令牌行为。 (2认同)
  • 这允许我跳过,但不授权我查看任何内容。`被禁止:用户“system:serviceaccount:kubernetes-dashboard:kubernetes-dashboard”` (2认同)

Bru*_*sky 77

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}'
Run Code Online (Sandbox Code Playgroud)

这假设您的〜/ .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}'
Run Code Online (Sandbox Code Playgroud)

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

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

  • 有没有相当于awk的powershell? (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 剪贴板 -i``` (2认同)
  • @duct_tape_coder `kubectl -n kubernetes-dashboard 描述秘密 $(kubectl -n kubernetes-dashboard 获取秘密 | sls admin-user | ForEach-Object { $_ -Split '\s+' } | Select -First 1)` 来自 https: //github.com/kubernetes/dashboard/blob/master/docs/user/access-control/creating-sample-user.md (2认同)

Sun*_*oon 41

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

$ kubectl create serviceaccount cluster-admin-dashboard-sa
$ kubectl create clusterrolebinding cluster-admin-dashboard-sa \
  --clusterrole=cluster-admin \
  --serviceaccount=default:cluster-admin-dashboard-sa
Run Code Online (Sandbox Code Playgroud)

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

$ 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
Run Code Online (Sandbox Code Playgroud)

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

  • 可能想在kube-system下添加serviceaccount,因为这是仪表板所在的位置 (4认同)
  • 这个对我来说工作得很好,而接受的答案是在我身上签名但有一些授权错误. (3认同)
  • 请注意,此命令为服务帐户提供了很多权限,在生产环境中可能不建议这样做。 (3认同)

Rob*_*ert 19

这终于是现在有效的方法(2023)

创建两个文件create-service-cccount.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
Run Code Online (Sandbox Code Playgroud)

create-cluster-role-binding.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard
Run Code Online (Sandbox Code Playgroud)

然后运行

kubectl apply -f create-service-cccount.yaml
kubectl apply -f create-cluster-role-binding.yaml
kubectl -n kubernetes-dashboard create token admin-user
Run Code Online (Sandbox Code Playgroud)

有关最新更新,请检查 https://github.com/kubernetes/dashboard/blob/master/docs/user/access-control/creating-sample-user.md

  • 这对我有用......在 2023 年 (2认同)

Abd*_*UMI 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}')
Run Code Online (Sandbox Code Playgroud)


Rew*_*ool 13

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

kubectl describe secret -n kube-system | grep deployment -A 12
Run Code Online (Sandbox Code Playgroud)

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


UDI*_*SHI 13

您需要在令牌身份验证之前执行以下步骤

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

    kubectl create serviceaccount dashboard -n default
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将集群绑定规则添加到您的仪表板帐户

    kubectl create clusterrolebinding dashboard-admin -n default --clusterrole=cluster-admin --serviceaccount=default:dashboard
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用此命令获取秘密令牌

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

  5. 现在你可以登录了

  • 我从命令 3 中没有得到任何输出。 (24认同)

San*_*ime 10

但是,如果您使用的是 kubernetes 1.24 之后的版本,

创建服务帐户不会生成令牌,而是应使用以下命令。

kubectl -n kubernetes-dashboard create token admin-user
Run Code Online (Sandbox Code Playgroud)

  • 由于许多 kubernetes 新手都会阅读此内容,因此可能会补充一点,在创建令牌之前,仍然需要有一个具有访问所有内容的权限的服务帐户,例如 serviceaccount。在您的情况下: `kubectl create serviceaccount admin-user -n kubernetes-dashboard` 和 `kubectl create clusterrolebinding admin-user-binding -n kubernetes-dashboard --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:admin-user ` 对吧? (2认同)

小智 8

对于2023版本1.26.0/1.26.1

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
kubectl create serviceaccount admin-user -n kubernetes-dashboard
kubectl create clusterrolebinding dashboard-admin -n kubernetes-dashboard --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:admin-user
kubectl -n kubernetes-dashboard create token admin-user
Run Code Online (Sandbox Code Playgroud)

最新指南:https://github.com/kubernetes/dashboard/blob/master/docs/user/access-control/creating-sample-user.md

  • 第三条命令返回了错误,这里更正了一个“kubectl create clusterrolebinding dashboard-admin -n kubernetes-dashboard --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:admin-user” (3认同)

Ank*_*Ank 7

您可以获得令牌:

kubectl describe secret -n kube-system | grep deployment -A 12
Run Code Online (Sandbox Code Playgroud)

取 Token 值,类似于

token:    eyJhbGciOiJSUzI1NiIsI...
Run Code Online (Sandbox Code Playgroud)

使用端口转发到 /kubernetes-dashboard:

kubectl port-forward -n kubernetes-dashboard service/kubernetes-dashboard 8080:443 --address='0.0.0.0'
Run Code Online (Sandbox Code Playgroud)

使用以下方式访问该网站:

https://<IP-of-Master-node>:8080/
Run Code Online (Sandbox Code Playgroud)

当询问时提供令牌。请注意httpsURL 上的 。在 Firefox 上测试了网站,因为通过新的更新,Google Chrome 已严格禁止来自未知 SSL 证书的流量。

另请注意,主节点的虚拟机应打开 8080 端口。


Jul*_*bal 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与您的名字相对应的。复制该令牌并将其粘贴到令牌框中。希望这可以帮助。

  • 链接已死。这是一个新的:https://github.com/kubernetes/dashboard/blob/master/docs/user/access-control/creating-sample-user.md (2认同)