使用配置文件访问Kubernetes仪表板的数据不足,无法创建验证信息结构。
我正在尝试使用配置文件访问kubernetes仪表板。从身份验证中,当我选择配置文件时,它给出了“使用配置文件访问Kubernetes仪表板的数据不足,无法创建验证信息结构。,kubernetes,Kubernetes,我正在尝试使用配置文件访问kubernetes仪表板。从身份验证中,当我选择配置文件时,它给出了“没有足够的数据来创建身份验证信息结构”,但相同的配置文件适用于kubectl命令 这是我的配置文件 apiVersion: v1 clusters: - cluster: certificate-authority-data: REDACTED server: https://kubemaster:6443 name: kubernetes contexts: - contex
没有足够的数据来创建身份验证信息结构”
,但相同的配置文件适用于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
解决这个问题有什么帮助吗
谢谢
SRkubeconfig文件中仅支持由
--authentication mode
标志指定的身份验证选项
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
您可以使用令牌(kube system命名空间中的任何令牌)进行身份验证:
并使用令牌进行身份验证(请参见user_token.txt文件)。查看此答案和源代码后,对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
如果您希望通过仪表板的身份验证提示,然后能够在仪表板上执行管理操作,我建议您这样做:。1-假设您已按照此处的说明设置仪表板。 2-您的正常kubectl访问可以从命令行进行(即kubectl获取服务) 3-您可以使用复制/粘贴,使用令牌(使用kubectl-n kube system Descripte secret…)手动登录仪表板 4-但是为了简单起见,现在您希望使用“Kubeconfig”(而不是“Token”)选项登录到仪表板 解决方案:
- 在用于访问集群的配置文件中查找您的用户
- 在这个原始问题中,用户是“kubernetes管理员”
- 添加一行“token:”
- 别忘了这是YAML,所以使用空格,而不是制表符
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
这里发生了两件事
- Kubernetes仪表板应用程序需要身份验证令牌
- 并且此身份验证令牌必须链接到具有足够权限的帐户
- 要
一个YAML文件,该文件从kubectl应用
/src/deploy/recommended/kubernetes dashboard.YAML的建议配置中提取⟹ •李>
- 然后运行
,并通过kubectl代理
- 然后运行
kubeconfig
文件缺少实际的令牌,这是登录仪表板所必需的
因此,为了解决这些缺点,我们需要确保有一个帐户,该帐户在命名空间kube系统中有一个角色绑定到集群管理ClusterRole。上面提到的默认设置只提供到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
然后我们还需要获得这个服务帐户的令牌
kubectl获取服务帐户-n kube系统将列出您所有的服务帐户。检查您想要/创建的文件是否存在
应为此帐户列出一个机密kubectl获取机密-n kube系统
- 使用
XXXXXX您将获得关于该token的信息kubectl description secret-n kube system admin user token-
kubectl get
和-o=json
并将管道连接到jq,或使用-o=jsonpath
)
然后,您可以:
- 将此令牌存储到文本文件中并上载此令牌
- 编辑您的
文件,并将令牌粘贴到此处提供的管理员用户kubeconfig
v2.0.0-rc7
实现的:
- 使用安装,这只是在开始时设置的安全性稍差一点
- 使用此方法安装的
需要替换为。(您需要先使用ClusterRoleRef
删除现有的一个,然后添加它。)kubectl delete…
- 文件采用“跳过法”。更新您的
以获得该设置部署
kubectl-n kubernetes仪表板编辑服务kubernetes仪表板将允许您将服务规范更改为
李>类型:LoadBalancer
- 如果您的负载平衡器设置正确,
现在将向您显示它将不安全的仪表板放在上面的IP地址kubectl-n kubernetes dashboard description service kubernetes dashboard
- 如果您的负载平衡器设置正确,
现在,您有一个不安全的端口,没有密码,可以轻松浏览皇冠上的珠宝。享受吧 提供kubernetes资源访问的方法有两种
apiVersion: v1
kind: ServiceAccount
metadata:
name: dashboard-admin
namespace: kubernetes-dashboard
#kubectl apply -f dashboardsvcacct.yaml
#serviceaccount/dashboard-admin created
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
#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
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>