This page looks best with JavaScript enabled

k8s - dashboard

 ·  ☕ 3 min read

本文将介绍如何较正确的在kubernetes下使用dashboard。

更换k8s-dashboard证书

生成证书

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# root @ k8s-master in ~/k8s/dashboard [9:51:34] 
$ openssl genrsa -des3 -passout pass:x -out dashboard.pass.key 2048
Generating RSA private key, 2048 bit long modulus
.....+++
.........................+++
e is 65537 (0x10001)

# root @ k8s-master in ~/k8s/dashboard [9:51:36] 
$ ls
dashboard.pass.key

# root @ k8s-master in ~/k8s/dashboard [9:51:38] 
$ openssl rsa -passin pass:x -in dashboard.pass.key -out dashboard.key
writing RSA key

# root @ k8s-master in ~/k8s/dashboard [9:51:44] 
$ ls 
dashboard.key  dashboard.pass.key

# root @ k8s-master in ~/k8s/dashboard [9:51:48] 
$ rm dashboard.pass.key 

# root @ k8s-master in ~/k8s/dashboard [9:51:50] 
$ openssl req -new -key dashboard.key -out dashboard.csr

$ openssl x509 -req -sha256 -days 365 -in dashboard.csr -signkey dashboard.key -out dashboard.crt
Signature ok
subject=/C=CN/ST=SiChuan/L=ChengDu/O=k8s/OU=dashboard/CN=dashboard/emailAddress=zou2699@163.com
Getting Private key

创建secret

1
kubectl create secret generic kubernetes-dashboard-certs --from-file=/root/k8s/dashboard -n kube-system

创建k8s-dashboard

1
kubectl create -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/alternative/kubernetes-dashboard.yaml

角色绑定

1
2
kubectl create clusterrolebinding kubernetes-dashboard --clusterrole=cluster-admin --serviceaccount=kube-system:kubernetes-dashboard

访问方式

  1. 使用kubectl proxy

    kubectl proxy --address='0.0.0.0'  --accept-hosts='^*$'
    
  2. NodePort,上面的证书是针对NodePort形式访问用到的。

    1
    
    kubectl -n kube-system edit service kubernetes-dashboard
    

    type: ClusterIP 改为 type: NodePort,然后使用kubectl get service命令来查看自动生产的端口:

  3. API Server

    如果Kubernetes API服务器是公开的,并可以从外部访问,那我们可以直接使用API Server的方式来访问,也是比较推荐的方式。

    Dashboard的访问地址为:
    https://<master-ip>:<apiserver-port>/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/,但是返回的结果可能如下:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    
    {
      "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默认启用了RBAC,并为未认证用户赋予了一个默认的身份:anonymous

    对于API Server来说,它是使用证书进行认证的,我们需要先创建一个证书:

    1.首先找到kubectl命令的配置文件,默认情况下为/etc/kubernetes/admin.conf,我们当前已经复制到了$HOME/.kube/config中。

    2.然后我们使用client-certificate-dataclient-key-data生成一个p12文件,可使用下列命令:

    1
    2
    3
    4
    5
    6
    7
    8
    
    # 生成client-certificate-data
    grep 'client-certificate-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.crt
       
    # 生成client-key-data
    grep 'client-key-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.key
       
    # 生成p12
    openssl pkcs12 -export -clcerts -inkey kubecfg.key -in kubecfg.crt -out kubecfg.p12 -name "kubernetes-client"
    

    3.最后导入上面生成的p12文件,重新打开浏览器即可,如下图:

  4. ingress

    Ingress将开源的反向代理负载均衡器(如 Nginx、Apache、Haproxy等)与k8s进行集成,并可以动态的更新Nginx配置等,是比较灵活,更为推荐的暴露服务的方式,但也相对比较复杂,以后再来介绍。

获取token

获取之前binding的用户的token

kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard/{print $1}')

会话过期时间修改kubectl edit deployment -n kube-system kubernetes-dashboard

     - args:
        - --auto-generate-certificates
        - --token-ttl=43200

参考地址:

https://github.com/kubernetes/dashboard/wiki/Certificate-management

https://github.com/kubernetes/dashboard/wiki/Installation#recommended-setup

https://www.cnblogs.com/RainingNight/p/deploying-k8s-dashboard-ui.html

Share on

tux
WRITTEN BY
tux
devops

What's on this Page