Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用配置文件访问Kubernetes仪表板的数据不足,无法创建验证信息结构。_Kubernetes - Fatal编程技术网

使用配置文件访问Kubernetes仪表板的数据不足,无法创建验证信息结构。

使用配置文件访问Kubernetes仪表板的数据不足,无法创建验证信息结构。,kubernetes,Kubernetes,我正在尝试使用配置文件访问kubernetes仪表板。从身份验证中,当我选择配置文件时,它给出了“没有足够的数据来创建身份验证信息结构”,但相同的配置文件适用于kubectl命令 这是我的配置文件 apiVersion: v1 clusters: - cluster: certificate-authority-data: REDACTED server: https://kubemaster:6443 name: kubernetes contexts: - contex

我正在尝试使用配置文件访问kubernetes仪表板。从身份验证中,当我选择配置文件时,它给出了“
没有足够的数据来创建身份验证信息结构”
,但相同的配置文件适用于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

kubeconfig文件中仅支持由
--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仪表板应用程序需要身份验证令牌
  • 并且此身份验证令牌必须链接到具有足够权限的帐户
部署仪表板应用程序的常用方法是

  • kubectl应用
    一个YAML文件,该文件从
    /src/deploy/recommended/kubernetes dashboard.YAML的建议配置中提取⟹ •
    
  • 然后运行
    kubectl代理
    ,并通过
但是,此默认配置是通用的和最小的。它只映射具有最低权限的角色绑定。而且,特别是在DigitalOcean上,在配置集群时提供的
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系统
    应为此帐户列出一个机密
  • 使用
    kubectl description secret-n kube system admin user token-
    XXXXXX您将获得关于该token的信息
这个问题的其他答案提供了大量提示,说明如何以方便的方式编写访问脚本(例如,使用awk、使用grep、使用
kubectl get
-o=json
并将管道连接到jq,或使用
-o=jsonpath

然后,您可以:

  • 将此令牌存储到文本文件中并上载此令牌
  • 编辑您的
    kubeconfig
    文件,并将令牌粘贴到此处提供的管理员用户

如果您想在进行重大投资建立证券之前看到仪表板的运行情况,以下是我让事情快速进行的方法。我是用
v2.0.0-rc7
实现的:

  • 使用安装,这只是在开始时设置的安全性稍差一点
  • 使用此方法安装的
    ClusterRoleRef
    需要替换为。(您需要先使用
    kubectl delete…
    删除现有的一个,然后添加它。)
  • 文件采用“跳过法”。更新您的
    部署
    以获得该设置
现在您可以转到网页并单击“跳过”。瞧!您的所有密钥都在没有密码的情况下公开。祈祷没有人能找到那个链接

但是等等,你说进去还是太难了?如果您安装了负载平衡器,这里还有两个附加步骤:

  • kubectl-n kubernetes仪表板编辑服务kubernetes仪表板将允许您将服务规范更改为
    类型:LoadBalancer
  • 如果您的负载平衡器设置正确,
    kubectl-n kubernetes dashboard description service kubernetes dashboard
    现在将向您显示它将不安全的仪表板放在上面的IP地址

现在,您有一个不安全的端口,没有密码,可以轻松浏览皇冠上的珠宝。享受吧

提供kubernetes资源访问的方法有两种

  • 使用者

  • 服务帐户

  • 用户。使用crt和键创建用户。分配角色和绑定。但是,您无法使用用户访问仪表板,因为它基于证书/密钥

  • 服务帐户

  • 创建命名空间、服务帐户、角色和角色索引。使用kubectl rolebinding命令将rolebindings分配给角色,然后分配给服务帐户

  • 那就从库贝那里得到秘密
    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>