我正在尝试使用配置文件访问kubernetes仪表板。从我选择配置文件时的身份验证中给出“Not enough data to create auth info structure
。”相同的配置文件适用于kubectl命令。
这是我的配置文件。
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: REDACTED
server: https://kubemaster:6443
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: kubernetes-admin
name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
有任何帮助来解决此问题吗?
由于 SR
答案 0 :(得分:10)
kubeconfig文件中仅支持--authentication-mode
标志指定的身份验证选项。
您可以使用令牌(kube-system
命名空间中的任何令牌)进行身份验证:
$ kubectl get secrets -n kube-system
$ kubectl get secret $SECRET_NAME -n=kube-system -o json | jq -r '.data["token"]' | base64 -d > user_token.txt
并使用令牌进行身份验证(请参阅 user_token.txt 文件)。
答案 1 :(得分:6)
查看此答案How to sign in kubernetes dashboard?后,源代码会计算出kubeconfig身份验证。
在主服务器上安装kubeadm后,获取默认服务帐户令牌并将其添加到配置文件中。然后使用配置文件进行身份验证。
您可以使用它来添加令牌。
#!/bin/bash
TOKEN=$(kubectl -n kube-system describe secret default| awk '$1=="token:"{print $2}')
kubectl config set-credentials kubernetes-admin --token="${TOKEN}"
你的配置文件应该是这样的。
kubectl config view |cut -c1-50|tail -10
name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
token: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.ey
答案 2 :(得分:4)
如果您想通过仪表板的验证提示和然后能够在仪表板上执行管理员工作,我建议您:https://github.com/kubernetes/dashboard/wiki/Creating-sample-user。
答案 3 :(得分:2)
1-假设已按照说明在此处设置仪表板。 https://docs.microsoft.com/en-us/vsts/git/concepts/git-config?view=vsts&tabs=visual-studio#rebase-local-branch-when-pulling
2-您可以从命令行正常进行kubectl访问(即kubectl获取服务)。
3-通过复制/粘贴,您可以使用令牌(使用kubectl -n kube-system describe secret ...)手动登录到仪表板。
4-但是,为了简单起见,现在您想使用“ Kubeconfig”(而不是“ Token”)选项登录到仪表板。
https://docs.aws.amazon.com/eks/latest/userguide/dashboard-tutorial.html
解决方案:
这是它的外观...
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: REDACTED
server: https://kubemaster:6443
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: kubernetes-admin
name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
token: PUT_YOUR_TOKEN_HERE_THAT_YOU_USED_TO_MANUALLY_LOGIN
答案 4 :(得分:2)
两件事正在发生
部署仪表板应用程序的通常方法是
kubectl apply
从配置推荐中提取的YAML文件:/src/deploy/recommended/kubernetes-dashboard.yaml
⟹master•v1.10.1 < / li>
kubectl proxy
并通过locally mapped Port 8001访问仪表板。但是,此默认配置是通用且最少的。它只是映射具有最小特权的角色绑定。而且,尤其是在DigitalOcean上,在配置群集时提供的kubeconfig
文件缺少实际令牌,这是登录仪表板所必需的。
因此,要解决这些缺陷,我们需要确保有一个帐户,该帐户具有对命名空间 kube-system 中的 cluster-admin ClusterRole的RoleBinding。上述默认设置仅提供对kubernetes-dashboard-minimal
的绑定。
我们可以通过显式删除
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kube-system
---
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: kube-system
然后我们还需要获取此ServiceAccount的令牌...
kubectl get serviceaccount -n kube-system
将列出您所有的服务帐户。检查您要创建的人是否存在kubectl get secrets -n kube-system
应为此帐户列出一个秘密 kubectl describe secret -n kube-system admin-user-token-
XXXXXX ,您将获得有关令牌的信息。该问题的其他答案提供了足够的提示,说明如何以方便的方式编写此访问的脚本(例如,使用awk,使用grep,使用kubectl get
和-o=json
并传递到jq,或使用-o=jsonpath
)
然后您可以:
kubeconfig
文件,并将令牌粘贴到此处提供的 admin用户 答案 5 :(得分:0)
如果要在进行重大投资设置安全性之前先查看仪表板的运行情况,这是使事情快速进行的方法。我是通过v2.0.0-rc7
完成的:
ClusterRoleRef
需要替换为this one。 (您需要先使用kubectl delete ...
删除现有的,然后再添加。)deployment
进行设置。现在,您可以转到网页并单击“跳过”。瞧!您所有的密钥都暴露无密码。祈祷没有人知道该链接!
但是等等,您说进入还是很困难的?如果安装了负载均衡器,请执行以下两个附加步骤:
kubectl -n kubernetes-dashboard edit service kubernetes-dashboard
将允许您将服务规格更改为type: LoadBalancer
。 kubectl -n kubernetes-dashboard describe service kubernetes-dashboard
现在将向您显示IP地址,该地址已将您不安全的仪表板置于其上。现在,您的端口不安全,没有密码,可以轻松浏览皇冠上的珠宝。享受吧!
答案 6 :(得分:0)
有两种方法可以提供kubernetes资源访问权限。
用户
服务帐户
用户。使用crt和key创建用户。分配角色和绑定。但是,您无法使用基于证书/密钥的用户访问仪表板
服务帐户。
创建名称空间,服务帐户,角色和角色绑定。为角色分配角色绑定,然后使用kubectl rolebinding命令分配给服务帐户。
然后从kubectl中获取秘密。机密名称将以服务帐户名称开头。每当您创建服务帐户时,也会为其创建密钥。
将唯一令牌复制到仪表板Webgui以获得访问权限。
如果提供了admin和admin角色绑定,则您将获得完全访问权限,否则,在角色中启用的访问权限将在仪表板中可用。
答案 7 :(得分:0)
对我来说,我意识到我正在遵循安装仪表板的过时教程(我正在安装仪表板的v1,但存在v2)。
现在您可以使用令牌登录到仪表板。
答案 8 :(得分:0)
答案可能取决于版本。仅供参考,我使用的是 K8s v1.20 和 Dashboard v2.1.0 首先我通过以下dashboardsvcacct.yaml 文件创建了一个仪表板管理员服务帐户
apiVersion: v1
kind: ServiceAccount
metadata:
name: dashboard-admin
namespace: kubernetes-dashboard
并通过
将其应用到集群#kubectl apply -f dashboardsvcacct.yaml
#serviceaccount/dashboard-admin created
然后我创建了一个角色绑定,允许上面的服务账户 cluster-admin 角色访问,而不是共享 kubernetes-admin 账户。通过以下dashboardrolebinding.yaml 完成
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: dashboard-admin
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: dashboard-admin
namespace: kubernetes-dashboard
并通过
将其应用到集群#kubectl apply -f dashboardrolebinding.yaml
#clusterrolebinding.rbac.authorization.k8s.io/dashboard-admin created
然后通过
从与 kubernetes-dashboard 命名空间关联的新创建的dashboard-admin 帐户中提取令牌#kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep dashboard-admin | awk '{print $1}')
输出包括下面的令牌。为了发布目的,我缩短了令牌。请注意,从终端复制/粘贴时不要包含换行符。
Name: dashboard-admin-token-9pzgf
Namespace: kubernetes-dashboard
Labels: <none>
Annotations: kubernetes.io/service-account.name: dashboard-admin
kubernetes.io/service-account.uid: 7efde521-60fd-40f3-9fe0-2097c123421c
Type: kubernetes.io/service-account-token
Data
====
token: eyJhbGciOiJSUzI1NiIsImtpZCI6Im1OVl<Shortened for posting>
ca.crt: 1066 bytes
namespace: 20 bytes
从上面的输出中复制并粘贴完整的令牌允许我通过令牌选项访问仪表板,但每次都这样做很痛苦。
主要问题是能够使用配置文件选项。配置文件不需要包含任何 X509 证书,因为仪表板不/不能使用这些证书。此外,完全共享包含证书和私钥的 kubernetes-admin 配置文件也不安全。因此访问仪表板所需的配置文件可以基于 kubernetes-admin 配置而无需 kubernetes-admin 数据,因为只需要集群服务器 API 目标和公共 ca 证书数据。文件的其余部分是来自仪表板管理员服务帐户的信息,包括令牌。配置文件需要如下所示。请注意,“集群”部分下的所有内容都将特定于您的安装。 “上下文”和“用户”部分将相同,但安装的令牌除外。
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tL<Shortened for posting>
server: https://10.175.0.3:6443
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: dashboard-admin
name: dashboard-admin@kubernetes
current-context: dashboard-admin@kubernetes
kind: Config
preferences: {}
users:
- name: dashboard-admin
user:
token: eyJhbGciOiJSUzI1NiIsImtpZCI6Im1OVl<Same Token as above, Shortened for posting>
将仪表板 UI 指向该配置文件允许我登录。
答案 9 :(得分:0)
这发生在我使用 kubectl proxy
访问仪表板时。我通过访问运行 minikube 的物理机上的 minikube dashboard
修复了它。