Dashboard

1. Dashboard概述

- Dashboard是基于网页的Kubernetes用户界面。

- Dashboard同时展示了Kubernetes集群中的资源状态信息和所有报错信息。

- 可以使用Dashboard将应用部署到集群中,也可以对容器应用排错,还能管理集群资源。列如,你可以对应用弹性伸缩、发起滚动升级、重启等等。

- Dashboard官网:https://github.com/kubernetes/dashboard

2. Dashboard安装部署

# 导入Ingress镜像到私有仓库

[root@master dashboard]# docker load -i dashboard.tar.xz

[root@master dashboard]# docker images|while read i t _;do

  [[ "${t}" == "TAG" ]] && continue

  [[ "${i}" =~ ^"harbor:443/".+ ]] && continue

  docker tag ${i}:${t} harbor:443/plugins/${i##*/}:${t}

  docker push harbor:443/plugins/${i##*/}:${t}

  docker rmi ${i}:${t} harbor:443/plugins/${i##*/}:${t}

done

# 修改配置文件

[root@master dashboard]# sed -ri 's,^(\s*image: )(.*/)?(.+),\1harbor:443/plugins/\3,' recommended.yaml

193:   image: harbor:443/plugins/dashboard:v2.7.0

278:   image: harbor:443/plugins/metrics-scraper:v1.0.8

[root@master dashboard]# kubectl apply -f recommended.yaml

[root@master dashboard]# kubectl -n kubernetes-dashboard get pods

NAME                                                                  READY   STATUS   RESTARTS

dashboard-metrics-scraper-66f6f56b59-b42ng   1/1           Running   0

kubernetes-dashboard-65ff57f4cf-lwtsk              1/1           Running   0

3. 使用NodePort发布服务 

# 查看服务状态

[root@master dashboard]# kubectl -n kubernetes-dashboard get service

NAME                       TYPE       CLUSTER-IP       PORT(S)

dashboard-metrics-scraper   ClusterIP   10.245.205.236   8000/TCPkubernetes-dashboard       ClusterIP   10.245.215.40    443/TCP

# 获取服务资源对象文件

[root@master dashboard]# vim dashboard-svc.yaml

---

kind: Service

apiVersion: v1

metadata:

  labels:

    k8s-app: kubernetes-dashboard

  name: kubernetes-dashboard

  namespace: kubernetes-dashboard

spec:

  type: NodePort

  ports:

     - port: 443

       nodePort: 30443

       targetPort: 8443

  selector:

     k8s-app: kubernetes-dashboard

[root@master dashboard]# kubectl apply -f dashboard-svc.yaml

service/kubernetes-dashboard configured

[root@master dashboard]# kubectl -n kubernetes-dashboard get service

NAME                                        TYPE         CLUSTER-IP         PORT(S)

dashboard-metrics-scraper       ClusterIP    10.245.205.236     8000/TCP

kubernetes-dashboard              NodePort    10.245.215.40       443:30443/TC

- 使用云平台将弹性公网IP绑定到任意节点,就可以通过浏览器访问服务 

ServiceAccount

1. 用户认证

- 所有Kubernetes集群都有两类用户:由Kubernetes管理的服务帐号和普通用户。

- 普通用户是以证书或密钥形式签发,主要用途是认证和鉴权,集群中并不包含用来代表普通用户帐号的对象,普通用户的信息无法调用和查询。

- 服务帐号是Kubernetes API所管理的用户。它们被绑定到特定的名称空间,与一组Secret凭据相关联,供Pod调用以获得相应的授权。

2. 创建服务帐号

# 资源对象模板

[root@master ~]# kubectl -n kubernetes-dashboard create serviceaccount kube-admin --dry-run=client -o yaml

[root@master ~]# vim admin-user.yaml

---

kind: ServiceAccount

apiVersion: v1

metadata:

  name: kube-admin

  namespace: kubernetes-dashboard

[root@master ~]# kubectl apply -f admin-user.yaml

serviceaccount/kube-admin created

[root@master ~]# kubectl -n kubernetes-dashboard get serviceaccounts

NAME                              SECRETS   AGE

default                               0                 16m

kube-admin                       0                 11s

kubernetes-dashboard      0                 16m 

3. 获取用户token 

# 使用token登录dashboard

[root@master ~]# kubectl -n kubernetes-dashboard create token kube-admin

<Base64 编码的令牌数据>

权限管理

1. 角色与授权

如果想访问和管理kubernetes集群,就要对身份以及权限做验证,kubernetes支持的鉴权模块有Node、RBAC、ABAC、Webhook API。

- Node:一种特殊用途的鉴权模式,专门对kubelet发出的请求进行鉴权。

- RBAC:是一种基于组织中用户的角色来控制资源使用的方法。

- ABAC:基于属性的访问控制,是一种通过将用户属性与权限组合在一起像用户授权的方法。

- Webhook:是一个HTTP回调。

2. 查询集群使用的鉴权方法

# 查询当前集群使用的鉴权方法

[root@master ~]# kubectl cluster-info dump |grep authorization-mode

                           "--authorization-mode=Node,RBAC",

# 查询资源对象的权限信息

[root@master ~]# kubectl api-resources -o wide

NAME                               NAMESPACED         KIND                            VERBS

bindings                             true                           Binding                        [create]

componentstatuses           false                          ComponentStatus       [get list]

configmaps                        true                           ConfigMap                   [create delete deletecollection get list patch update watch]

3.  RBAC授权

RBAC声明了 四种Kubernetes对象:

- Role:用来在某一个名称空间内创建授权角色,创建Role时,必须指定所属的名称空间的名字。

- ClusterRole:可以和Role相同完成授权。单属于集群范围,对所有名称空间有效。

- RoleBinding:是将角色中定义的权限赋予一个或者一组用户,可以使用Role或ClusterRole完成授权。

- ClusterRoleBinding:在集群范围执行授权,对所有名称空间有效,只能使用ClusterRole完成授权。

资源对象角色与作用域:

资源对象描述作用域
ServiceAccount服务账号,为 Pod 中运行的进程提供了一个身份单一名称空间
Role角色,包含一组代表相关权限的规则单一名称空间
ClusterRole角色,包含一组代表相关权限的规则全集群
RoleBinding将权限赋予用户,Role、ClusterRole 均可使用单一名称空间
ClusterRoleBinding将权限赋予用户,只可以使用 ClusterRole全集群

资源对象权限: 

createdeletedeletecollectiongetlistpatchupdatewatch
创建删除删除集合获取属性获取列表补丁更新监控

4. 普通角色

[root@master ~]# kubectl -n default create role myrole --resource=pods --verb=get,list --dry-run=client -o yaml

[root@master ~]# kubectl -n default create rolebinding kube-admin-role --role=myrole --serviceaccount=kubernetes-dashboard:kube-admin --dry-run=client -o yaml

[root@master ~]# vim myrole.yaml

---

kind: Role

apiVersion: rbac.authorization.k8s.io/v1

metadata:

  namespace: default

  name: myrole # 角色名称

rules: # 规则

- apiGroups: # 资源对象所属组信息

  - "" # 分组信息

  resources: # 要设置权限的资源对象

  - pods # 授权资源对象名称

  verbs: # 权限设置

  - get # 权限

  - list # 权限

---

kind: RoleBinding

apiVersion: rbac.authorization.k8s.io/v1

metadata:

  namespace: default

  name: kube-admin-role                         # 授权策略名称

roleRef:                                                   # 关联权限

  apiGroup: rbac.authorization.k8s.io      # 角色对象

  kind: Role                                              # 角色对象

  name: myrole                                        # 角色名称

subjects:                                                  # 授权信息

- kind: ServiceAccount                            # 帐号资源对象

  name: kube-admin                                # 帐号名称

  namespace: kubernetes-dashboard     # 帐号所在的名称空间

[root@master ~]# kubectl apply -f myrole.yaml

role.rbac.authorization.k8s.io/myrole created

rolebinding.rbac.authorization.k8s.io/kube-admin-role created

[root@master ~]# kubectl delete -f myrole.yaml

role.rbac.authorization.k8s.io "myrole" deleted

rolebinding.rbac.authorization.k8s.io "kube-admin-role" deleted

5. 集群管理员

[root@master ~]# kubectl get clusterrole

NAME                             CREATED AT

admin                              2022-06-24T08:11:17Z

cluster-admin                  2022-06-24T08:11:17Z

... ...

# 资源对象模板

[root@master ~]# kubectl create clusterrolebinding kube-admin-role --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:kube-admin --dry-run=client -o yaml

[root@master ~]# vim admin-user.yaml

---

kind: ServiceAccount

apiVersion: v1

metadata:

  name: kube-admin

  namespace: kubernetes-dashboard

---

kind: ClusterRoleBinding

apiVersion: rbac.authorization.k8s.io/v1

metadata:                                                # 元数据

  name: kube-admin-role                         # 授权策略名称

roleRef:                                                    # 关联权限

  apiGroup: rbac.authorization.k8s.io       # 角色对象组

  kind: ClusterRole                                   # 角色对象

  name: cluster-admin                              # 角色名称

subjects:                                                   # 授权信息

- kind: ServiceAccount                             # 帐号资源对象

  name: kube-admin                                 # 帐号名称

  namespace: kubernetes-dashboard      # 帐号所在的名称空间

[root@master ~]# kubectl apply -f admin-user.yaml

serviceaccount/kube-admin unchanged

clusterrolebinding.rbac.authorization.k8s.io/kube-admin-role created 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐