代码之家  ›  专栏  ›  技术社区  ›  ichbinblau

如何登录kubernetes dashboard?

  •  166
  • ichbinblau  · 技术社区  · 9 年前

    我刚刚将kubeadm和kubelet升级到v1.8.0。并按照官方指示安装仪表板 document .

    $ 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/

    我被重定向到这样一个登录页面,这是我以前从未见过的。 enter image description here 看起来有两种身份验证方式。

    我试图上传 /etc/kubernetes/admin.conf kubeadm token list 无法登录,但再次失败。

    问题是我如何登录仪表板。看起来他们比以前增加了很多安全机制。谢谢

    11 回复  |  直到 9 年前
        1
  •  223
  •   200_success    6 年前

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

    — Dashboard on Github

    在这里 Token 可以是 Static Token , Service Account Token OpenID Connect Token 从…起 Kubernetes Authenticating ,但不是库比德 Bootstrap Token .

    $ 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
    

    库贝Config

    仪表板需要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
    

    之后您可以使用 跳过 登录页面上用于访问仪表板的选项。

    如果您使用的是仪表板版本v1.10.1或更高版本,则还必须添加 --enable-skip-login 到部署的命令行参数。您可以通过将其添加到 args 在里面 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
    
        2
  •  133
  •   Bruno Bronosky    8 年前

    TL;博士

    要在单个单行中获取令牌:

    kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | awk '/^deployment-controller-token-/{print $1}') | awk '$1=="token:"{print $2}'
    

    这假设您的~/。kube/config存在且有效。而且 kubectl config get-contexts 表示您正在为要登录的仪表板使用正确的上下文(集群和命名空间)。

    以下是带有换行符和缩进的单行线,以便于阅读:

    kubectl -n kube-system describe secret $(
      kubectl -n kube-system get secret | \
      awk '/^deployment-controller-token-/{print $1}'
    ) | \
    awk '$1=="token:"{print $2}'
    

    • 第2行-这是@silverfox的第一条命令 代币
    • 第3行-仅打印第一行 领域 以开头的行的 deployment-controller-token- (这是pod名称)
    • 第1行-这是@silverfox的第二条命令 代币 部分
    • 领域 第一个 领域 是“令牌:”
        3
  •  54
  •   SunghoMoon    8 年前

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

    $ kubectl create serviceaccount cluster-admin-dashboard-sa
    $ kubectl create clusterrolebinding cluster-admin-dashboard-sa \
      --clusterrole=cluster-admin \
      --serviceaccount=default:cluster-admin-dashboard-sa
    

    $ 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
    

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

        4
  •  28
  •   T0xicCode    5 年前

    49992698 和 47761914 :

    # Create service account
    kubectl create serviceaccount -n kube-system cluster-admin-dashboard-sa
    
    # Bind ClusterAdmin role to the service account
    kubectl create clusterrolebinding -n kube-system cluster-admin-dashboard-sa \
      --clusterrole=cluster-admin \
      --serviceaccount=kube-system:cluster-admin-dashboard-sa
    
    # Parse the token
    TOKEN=$(kubectl describe secret -n kube-system $(kubectl get secret -n kube-system | awk '/^cluster-admin-dashboard-sa-token-/{print $1}') | awk '$1=="token:"{print $2}')
    
        5
  •  23
  •   Jossef Harush Kadouri    6 年前

    在令牌身份验证之前,您需要遵循以下步骤

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

      kubectl create serviceaccount dashboard -n default
      
    2. 将集群绑定规则添加到仪表板帐户

      kubectl create clusterrolebinding dashboard-admin -n default --clusterrole=cluster-admin --serviceaccount=default:dashboard
      
    3. kubectl get secret $(kubectl get serviceaccount dashboard -o jsonpath="{.secrets[0].name}") -o jsonpath="{.data.token}" | base64 --decode
      
    4. 在Kubernetes仪表板登录页面中选择令牌身份验证 enter image description here

    5. 现在你可以登录了

        6
  •  14
  •   Rewanth Tammana    7 年前

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

    kubectl describe secret -n kube-system | grep deployment -A 12
    

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

        7
  •  6
  •   Julien Nyambal    8 年前

    前面所有的答案对我都很好。但我这边的一个直截了当的答案是 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}') . 对于某些键,您将有许多值( Name , Namespace , Labels token ). 最重要的是 代币 与你的名字对应。复制该令牌并将其粘贴到令牌框中。希望这有帮助。

        8
  •  6
  •   Ank    5 年前

    您可以获得令牌:

    kubectl describe secret -n kube-system | grep deployment -A 12
    

    取令牌值,如下所示

    token:    eyJhbGciOiJSUzI1NiIsI...
    

    使用端口转发到/kubernetes仪表板:

    kubectl port-forward -n kubernetes-dashboard service/kubernetes-dashboard 8080:443 --address='0.0.0.0'
    

    使用以下工具访问网站:

    https://<IP-of-Master-node>:8080/
    

    需要时提供令牌。 注意 https 在URL上。在Firefox上测试站点,因为随着新的更新,Google Chrome变得严格,不允许来自未知SSL证书的流量。

    还要注意的是,8080端口应该在主节点的VM中打开。

        9
  •  1
  •   h q    4 年前

    获取kubernetes仪表板令牌的另一种方法:

    kubectl -n kubernetes-dashboard get secret -o=jsonpath='{.items[?(@.metadata.annotations.kubernetes\.io/service-account\.name=="kubernetes-dashboard")].data.token}' | base64 --decode
    

    说明:

    1. 获取所有 secret kubernetes-dashboard 命名空间。
    2. 看看 items metadata -&燃气轮机; annotations kubernetes.io/service-account.name ==
    3. 打印 data token
    4. 解码内容。(如果您执行 kubectl describe secret 代币
        10
  •  0
  •   3CxEZiVlQ    8 年前

    下载 https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/alternative/kubernetes-dashboard.yaml

    添加

    type: NodePort for the Service
    

    然后运行以下命令:

    kubectl apply -f kubernetes-dashboard.yaml
    

    使用以下命令查找暴露的端口:

    kubectl get services -n kube-system
    

    您应该能够在以下位置获取仪表板: http://hostname:exposedport/

        11
  •  0
  •   derHugo    7 年前

    由于安全问题,默认情况下已禁用跳过登录。 https://github.com/kubernetes/dashboard/issues/2672

    在仪表板yaml中添加此参数

    - --enable-skip-login
    

    把它拿回来