如何解决如何登录 Kubernetes 仪表板?
从 1.7 版开始,Dashboard 支持基于以下条件的用户身份验证:
Authorization: Bearer <token>
标头在每个请求中传递给仪表板。从 1.6 版开始支持。具有最高优先级。如果存在,则不会显示登录视图。- 可在仪表板登录视图上使用的不记名令牌。
- 可在仪表板登录视图中使用的用户名/密码。
- 可用于 Dashboard登录视图的Kubeconfig文件。
—— Github上的仪表板
令牌
这里Token
可以来自Kubernetes
AuthenticatingStatic
Token
,Service Account Token
但不是 kubeadm 。OpenID Connect
Token
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 & password
或token
,但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://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
之后,您可以使用Skip
登录页面上的选项来访问仪表板。
如果您使用的是仪表板版本 v1.10.1 或更高版本,您还必须添加--enable-skip-
login
到部署的命令行参数。您可以通过将其添加到args
in来做到这一点kubectl 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
解决方法
我刚刚将 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
登录但再次失败。
问题是我如何登录仪表板。看起来他们比以前增加了很多安全机制。谢谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。