美文网首页docker
Kubernetes安装Dashboard的方法和思路

Kubernetes安装Dashboard的方法和思路

作者: chou_o_ning | 来源:发表于2018-12-28 14:30 被阅读0次

    Kubernetes(下面简称K8s)一直在持续的开发中,更新非常快,网上有很多信息虽然有翔实的安装步骤,但是很快就变得陈旧和不合时宜,因此强烈建议从官网入口,网上的文章只把它当成做一个参考。

    本文也有可能很快过时,因此我尽量说明安装的思路和参考文章的引用来源,以提供授人以渔的方法。如果有过时的地方,也请在文章下面添加评论,我看到会尽快进行更新。

    先说明一下当前的设备环境:
    三台安装Ubuntu16.04 amd64虚机,一台master node,两台worker nodes。K8s的版本为V1.13.1
    整个环境放在一台透明代理的路由器后面,因此无需设置加速器(该路由器的DIY方法,见我的博客文章 DIY: 基于OpenWRT和小米路由器的透明代理 以及姊妹篇 DIY: 基于OpenWRT和小米路由器的透明代理(SSR))

    root@ha40:kubectl# kubectl get nodes
    NAME   STATUS   ROLES    AGE   VERSION
    ha40   Ready    master   8d    v1.13.1
    ha41   Ready    <none>   8d    v1.13.1
    ha42   Ready    <none>   8d    v1.13.1
    

    官网安装Web UI(Dashboard)的入口为 https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/,安装方法非常简单,只有两个步骤:

    1. 安装
    kubectl create -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
    
    1. 启动代理
    kubectl proxy
    

    然后可以通过下面的URL访问 dashboard http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

    这种方法确实简单有效,但是在大多数环境中会存在一个很大的问题。那就是我们在安装k8s服务器时,基本都选择Ubuntu的server版本,而不是Ubuntu的desktop版本。Server版本没有图形桌面,无法使用浏览器。因此我们需要一个从外部访问k8s cluster的dashboard方法。

    除了上面k8s官网推荐的kubectl proxy方法,Dashboard的官网 https://github.com/kubernetes/dashboard/wiki/Accessing-Dashboard---1.7.X-and-above 还提到了其他三种方法 :

    1: NodePort,这种方法只推荐使用在一个node节点的方案,在大多数的环境都需要多个node节点,因此这种方法没有什么实用价值,不建议使用。
    2: API Server,这个是本文的推荐方法,在下文详细列出。
    3: Ingress,这个方法我没有试过,后续再更新。

    API Server方法:
    安装完成Dashboard后,就可以访问 https://<master-ip>:<apiserver-port>/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/ 就可以了。但是浏览器会提示下面的错误:

    {
      "kind": "Status",
      "apiVersion": "v1",
      "metadata": {
      },
      "status": "Failure",
      "message": "services \"https:kubernetes-dashboard:\" is forbidden: User \"system:anonymous\" cannot get services/proxy in the namespace \"kube-system\"",
      "reason": "Forbidden",
      "details": {
        "name": "https:kubernetes-dashboard:",
        "kind": "services"
      },
      "code": 403
    }
    

    这个错误的原因是k8s基于安全性的考虑,浏览器必须要安装一个根证书,防止中间人攻击(k8s官网的说明在此 https://kubernetes.io/docs/tasks/administer-cluster/access-cluster-api/

    下面是一系列和证书相关的操作:(参考Jose的博客 http://www.joseluisgomez.com/containers/kubernetes-dashboard/
    a. 生成crt文件

    grep 'client-certificate-data' /etc/kubernetes/admin.conf | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.crt
    

    b. 生成key文件

    grep 'client-key-data' /etc/kubernetes/admin.conf | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.key
    

    c. 生成p12证书文件(证书的生成和导入需要一个密码)

    openssl pkcs12 -export -clcerts -inkey kubecfg.key -in kubecfg.crt -out kubecfg.p12 -name "kubernetes-client"
    

    d. 将该证书文件导入到chrome浏览器中(这里就不细讲了,不清楚的同学可以用搜索引擎查一下)

    再次访问https://<master-ip>:<apiserver-port>/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/,浏览器显示为:


    Screen-Shot-2018-02-18-at-15.09.52-300x208.png

    这是网站提示你需要认证(否则任何人都能直接访问了),有两种方式可以认证,我用的是Token方式:

    Token的方法,可以参考Dashboard官网的做法,https://github.com/kubernetes/dashboard/wiki/Creating-sample-user 只需要三个命令即可:
    a. Create Service Account 创建一个服务帐号

    cat <<EOF | kubectl create -f -
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: admin-user
      namespace: kube-system
    EOF
    

    b. Create ClusterRoleBinding 创建ClusterRoleBinding

    cat <<EOF | kubectl create -f -
    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
    EOF
    

    c. Bearer Token

    kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
    

    将生成的token填入,即可进入dashboard的主页面


    2018-12-20 17-24-03屏幕截图.png

    大功告成!

    相关文章

      网友评论

        本文标题:Kubernetes安装Dashboard的方法和思路

        本文链接:https://www.haomeiwen.com/subject/cecslqtx.html