kubernetes1.13安装dashboard

文章目录

  • 1、安装kubernetes-dashborad
    • 1.1、下载kubernetes-dashboard.yaml文件
    • 1.2、修改镜像地址
    • 1.3、安装dashboard
    • 1.4、查看状态是否正常
  • 2、选择访问方式
    • 2.1、 有哪些访问方式
    • 2.2、使用Nodeport方式访问
    • 2.3、使用apiserver方式访问
  • 3 、k8s中的用户、认证及授权机制简介
    • 3.1、k8s中的用户
    • 3.2、k8s中的认证机制
    • 3.3、k8s中的授权机制
  • 4、创建并导入认证证书
    • 4.1、创建证书
    • 4.2、将证书导入chrome浏览器
  • 5、选择登录方式
    • 5.1、有哪些登录方式
    • 5.2、使用令牌方式登录
      • 5.2.1 、全部资源访问权限
      • 5.2.2、自定义资源访问权限
    • 5.3、使用kubeconfig方式登录
    • 5.4 、使用用户名密码方式登录
    • 5.5 、跳过登录过程,直接访问

官方文档:https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/

1、安装kubernetes-dashborad

1.1、下载kubernetes-dashboard.yaml文件

wget https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended/kubernetes-dashboard.yaml

1.2、修改镜像地址

将yaml文件中的image字段修改为mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.10.1

然后提前在所有节点下载好镜像。

docker pull mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.10.1

1.3、安装dashboard

[root@master2] ~$ kubectl create -f kubernetes-dashboard.yaml 
secret/kubernetes-dashboard-certs created
serviceaccount/kubernetes-dashboard created
role.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created
deployment.apps/kubernetes-dashboard created
service/kubernetes-dashboard created

1.4、查看状态是否正常

[root@master2] ~$ kubectl get pod --all-namespaces -o wide| grep kubernetes-dashboard
kube-system   kubernetes-dashboard-76479d66bb-p54tk       1/1     Running   0          39s     10.244.1.3        master2.hanli.com              

2、选择访问方式

官方文档:https://github.com/kubernetes/dashboard/wiki/Accessing-Dashboard—1.7.X-and-above

2.1、 有哪些访问方式

三种访问方式,不同的方式,地址不一样

  • kubectl proxy: 只能在localhost上访问,地址:http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

  • NodePort: 编辑 kubernetes-dashboard.yaml文件中,将 type: ClusterIP 改为 type: NodePort,找到dashboard运行在哪个节点后,访问地址https://:

  • apiserver方式: 需要在浏览器中安装用户证书。 地址: https://:/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

2.2、使用Nodeport方式访问

2.3、使用apiserver方式访问

打开浏览器访问 https://192.168.255.140:8443/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
}

通过message和code,我们了解到,我们使用的是一个system:anonymous这样的用户来访问位于kube-system命名空间中的名为https:kubernetes-dashboard的service资源。然后这个用户没有权限访问,所以被拒绝了。

看来我们需要先了解一下k8s中的用户和认证及授权机制。

3 、k8s中的用户、认证及授权机制简介

3.1、k8s中的用户

有两种

  • 真实用户 :如kubelet
  • 服务账户: 即service account(简写为sa)

3.2、k8s中的认证机制

3.3、k8s中的授权机制

  • k8s通过ClusterRoleBinding或者RoleBinding资源来实现对用户权限的赋予。

  • ClusterRole或者Role:意思是集群角色或角色,他们是规定了一组对集群内资源的权限规则。

  • roles和clusterroles的区别在于: roles只能对某个命令空间内的资源定义权限。而集群角色定义的权限都是针对整个集群的命名空间的。

  • 将用户和role绑定起来就实现了对用户权限的授予。
    kubernetes1.13安装dashboard_第1张图片

4、创建并导入认证证书

4.1、创建证书

首先需要确认kubectl命令的配置文件,默认情况下为/etc/kubernetes/admin.conf,而且已经自动创建在$HOME/.kube/config中,如果没有创建则需要手动赋值。

cat $HOME/.kube/config

如果确认有集群的配置,则运行以下命令来生成一个p12格式的浏览器证书

先生成kubecfg-crt

grep 'client-certificate-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.crt

生成kubecfg-key

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"

运行完后在当前目录会有个kubecfg.p12证书文件。

然后你需要将这个kubecfg.p12证书文件传到桌面上。

可以通过安装yum install lrzsz,然后使用下面的命令来将文件发送到桌面上

[root@master1] ~$ sz kubecfg.p12

4.2、将证书导入chrome浏览器

点击浏览器:菜单-设置-高级-管理证书

选择“个人”这一栏(适用于chrome71以上版本,71以下不确定行不行),然后点击导入kubecfg.p12。
kubernetes1.13安装dashboard_第2张图片
剩下的步骤全部默认,完成后如下:

kubernetes1.13安装dashboard_第3张图片
导入成功后,重启浏览器chrome://restart,再次访问https://192.168.255.140:8443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/,此时会弹出类似如下的证书信息对话框,点击确定即可。

kubernetes1.13安装dashboard_第4张图片
点击确定之后,会出现下面的界面kubernetes1.13安装dashboard_第5张图片

问题来了,图中的kubeconfig和令牌这两种登录有什么区别呢?我应该选择哪个?除了这两种还有其他的方式吗?如果我是内网环境,我就想输入网址之后就直接能访问各种资源,而不想通过登录,可以实现吗?

5、选择登录方式

5.1、有哪些登录方式

  • kubeconfig
  • 令牌
  • 用户名和密码
  • 直接访问,不使用任何登录

5.2、使用令牌方式登录

5.2.1 、全部资源访问权限

可以这样做:

1、先创建一个账号
2、再创建一个有全部权限的clusterroles
3、然后将二者用clusterrolebinding绑定起来。

在第三步我们安装yaml文件时,已创建了一个名为kubernetes-dashboard的服务账户,你可以查看一下详情

[root@master2] ~$ kubectl describe serviceaccount/kubernetes-dashboard -n kube-system
Name:                kubernetes-dashboard
Namespace:           kube-system
Labels:              k8s-app=kubernetes-dashboard
Annotations:         
Image pull secrets:  
Mountable secrets:   kubernetes-dashboard-token-jwld4
Tokens:              kubernetes-dashboard-token-jwld4
Events:              

而kubernetes集群安装好后,他会自动生成一些clusterroles集群权限对象,你可以用下面的命令查看都有哪些

[root@master2] ~$ kubectl get  clusterroles
NAME                                                                   AGE
admin                                                                  4h21m
cluster-admin                                                          4h21m
edit                                                                   4h21m
flannel                                                                3h58m
system:aggregate-to-admin                                              4h21m
system:aggregate-to-edit                                               4h21m
......

比如集群管理员,我们详细的看一下,*号表示对所有资源有所有权限。

[root@master2] ~$ kubectl describe  clusterroles/cluster-admin
Name:         cluster-admin
Labels:       kubernetes.io/bootstrapping=rbac-defaults
Annotations:  rbac.authorization.kubernetes.io/autoupdate: true
PolicyRule:
  Resources  Non-Resource URLs  Resource Names  Verbs
  ---------  -----------------  --------------  -----
  *.*        []                 []              [*]
             [*]                []              [*]

好,用户和权限都有了,将他们绑定起来。

将kubernetes-dashboard这个服务账户和cluster-admin这个集群管理员权限对象绑定起来。

创建一个yaml文件, vim dashboard.yaml,内容如下

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

执行

[root@master2] ~$ kubectl create -f dashboard.yaml

查看是否创建成功

[root@master2] ~$ kubectl get clusterrolebindings kubernetes-dashboard
NAME                   AGE
kubernetes-dashboard   88s

找到kubernetes-dashboard账户的token,记下这串token,登录的时候会使用,这个token默认是永久的。

[root@master2] ~$ kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep kubernetes-dashboard-token | awk '{print $1}')

Name:         kubernetes-dashboard-token-jwld4
Namespace:    kube-system
Labels:       
Annotations:  kubernetes.io/service-account.name: kubernetes-dashboard
              kubernetes.io/service-account.uid: a2ced45f-8b61-11e9-b98f-0050563ff983

Type:  kubernetes.io/service-account-token

Data
====
namespace:  11 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC10b2tlbi1qd2xkNCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImEyY2VkNDVmLThiNjEtMTFlOS1iOThmLTAwNTA1NjNmZjk4MyIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTprdWJlcm5ldGVzLWRhc2hib2FyZCJ9.VzsWE80t7AEMB891rxBKJVMxwt5DtuzA23_-SLxxQcjpaB80LBfB09WqUSe6G6vrkRdpMQ3wDLA2SIFCQVAapAHl-J45NuPyhxh8A-DNpfGpEk3uxFqXkn5WXYasbeCIcHw6TII27PTwG6wgS_q1qEbOf4LYJHjExdqypIqAj__F2RRGTqER378qVvJrHJndL5M6W2PhINazLOEqezxKxDRBigMFU7luOYvWCxSPFhjSd3LrsMfWwSRY-Jq5-tUEhsI7uU7Yyb3UIDDiXex-8Mwbida_TgpcIZi6BaEclPygSSfq1a177r97hnxcdv02X9ooOghztSGKM-1bDBWhNg
ca.crt:     1025 bytes

再次访问dashboard,输入token登录后界面如下;此时访问dashboard的主体是kubernetes-dashboard这个服务账户,它拥有对集群所有资源的所有使用权限。

kubernetes1.13安装dashboard_第6张图片

通过web方式操作很方便,如下:进行扩缩容
kubernetes1.13安装dashboard_第7张图片
如果是生产环境,我们肯定不能给所有人员赋予全部访问权限,我们需要对不同的人赋予不同的权限, 那怎么自定义权限呢?

5.2.2、自定义资源访问权限

5.3、使用kubeconfig方式登录

每次都要复制token,如果每天都登录,感觉有点麻烦好像

1、先把config文件复制到别的地方

[root@master2] ~$ cp .kube/config .

2、然后把一个具有全部访问权限的token追加到最后一行。

先找出token

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

追加到config中,如下

users:
- name: kubernetes-admin
  user:
    client-certificate-data: LS0tLS1CRUd....
    client-key-data: LS0tLS1CRUdJTiBSU......
    token: eyJhbGciO... ...

3、上传到桌面,选择登录
kubernetes1.13安装dashboard_第8张图片

5.4 、使用用户名密码方式登录

默认情况下用户名密码登录没有启用。

如果没有该参数,默认使用的是匿名用户,并且无法检查提供的凭据是否有效。
原因是Kubernetes 需要有配置

如果要启用用户名和密码验证,必须在apiserver的部署文件中配置参数 --authorization-mode=ABACand --basic-auth-file

然后在dashboard的部署文件中设置authentication-mode = basic。默认情况下,它的设置是--authentication-mode = token

kubernetes1.13安装dashboard_第9张图片

5.5 、跳过登录过程,直接访问

添加参数- --enable-skip-login

      containers:
      - args:
        - --auto-generate-certificates
        - --enable-skip-login

kubernetes1.13安装dashboard_第10张图片

官方文档:

https://github.com/kubernetes/dashboard/wiki/Accessing-Dashboard—1.7.X-and-above
https://github.com/kubernetes/dashboard/wiki/Creating-sample-user

参考:
https://www.itsfun.tk/kubernetes-dashboard/

你可能感兴趣的:(kubernetes)