day3----dashboar交付服务(1)

前情回顾

K8S核心资源管理方法(CRUD) :
·    陈述式管理→基于众多kubectl命令
·    声明式管理→基于K8S资源配置清单
.    GUl式管理→基于K8S仪表盘(dashboard)
.K8S的CNI网络插件
·   种类众多,以flannel为例
.   三种常用工作模式
·   优化SNAT规则
. K8S的服务发现
·   集群网络→Cluster IP
.   Service资源→Service Name
.   Coredns软件→实现了Service Name和Cluster IP的自动关联
. K8S的服务暴露
-     Ingress资源→专用于暴露7层应用到K8S集群外的一种核心资源(http/https)
-     Ingress控制器→一个简化版的nginx(调度流量) + go脚本(动态识别yaml)
-     Traefik软件→实现了ingress控制器的一个软件

不管是json也好还是yaml也好都可以抽象成结构化数据
四个常用的k8s的核心附件有1.CNI网络插件 2.服务发现的插件 3.服务暴露的插件 4.GUI图像化辅助插件

在21上ping22的不通的需要
route add -net 172.7.22.0/24 gw 10.4.7.22 dev ens33
还需要在22上打开转发规则
iptables -t filter -I FORWARD -d 172.7.22.0/24 -j ACCEPT
然后去21上ping22就能通了

上面就是若是你的集群足够的小就不用什么网络插件了直接加路由转发规则就能实现相互的容器之间的相互通信了

k8s的服务发现回顾

服务发现

三个比较重要的概念
虚构出来的集群网络
一个仅仅在集群网络存在通过kube-proxy将集群网络和pod网络关联起来了
相对固定的帮你去找pod,是通过特色的功能就是标签选择器。。
使用coredns的软件将域名和容器的地址解析出来。就是自动的管理service name到cluster ip的功能

服务暴露

ingress资源----专门用于暴露7层应用到k8s集群外的一种核心资源(http/https)
ingress控制器—简化版的nginx(调度流量)+ go脚本(动态识别yaml)
traefik 软件-----实现ingress控制器的一个软件

看下面的图一个是前端,一个是后台,真正进入前端是通过下面的域名进来的,后端找到了真实提供的pod,每个运算节点起一份,因为起容器时通过deamonSet去启动的
在这里插入图片描述
它时和宿主机共享的网络命名成空间hostname
相应时间呀都要的
在这里插入图片描述

k8s的GUI资源管理插件–仪表盘

部署kubernetes-dashboard

下载地址::在github可以去找

准备dashboard镜像

运维主机200上进行操作

[root@hdss7-200 k8s-yaml]# docker pull k8scn/kubernetes-dashboard-amd64:v1.8.3
v1.8.3: Pulling from k8scn/kubernetes-dashboard-amd64
a4026007c47e: Pull complete 
Digest: sha256:ebc993303f8a42c301592639770bd1944d80c88be8036e2d4d0aa116148264ff
Status: Downloaded newer image for k8scn/kubernetes-dashboard-amd64:v1.8.3
docker.io/k8scn/kubernetes-dashboard-amd64:v1.8.3
[root@hdss7-200 k8s-yaml]# docker images |grep dashb
k8scn/kubernetes-dashboard-amd64   v1.8.3                     fcac9aa03fd6   3 years ago     102MB
[root@hdss7-200 k8s-yaml]# docker tag fcac9aa03fd6 harbor.od.com/public/dashboard:v1.8.3
[root@hdss7-200 k8s-yaml]# docker push harbor.od.com/public/dashboard:v1.8.3
The push refers to repository [harbor.od.com/public/dashboard]
23ddb8cbb75a: Pushed 
v1.8.3: digest: sha256:ebc993303f8a42c301592639770bd1944d80c88be8036e2d4d0aa116148264ff size: 529
[root@hdss7-200 k8s-yaml]# mkdir dashboard
[root@hdss7-200 k8s-yaml]# cd dashboard/
[root@hdss7-200 dashboard]# ll
total 0
[root@hdss7-200 dashboard]# vi rbac.yaml
[root@hdss7-200 dashboard]# vim dp.yaml
[root@hdss7-200 dashboard]# vi dp.yaml
[root@hdss7-200 dashboard]# vi svc.yaml
[root@hdss7-200 dashboard]# vi ingress.yaml
[root@hdss7-200 dashboard]# cat rbac.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    k8s-app: kubernetes-dashboard
    addonmanager.kubernetes.io/mode: Reconcile
  name: kubernetes-dashboard-admin
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: kubernetes-dashboard-admin
  namespace: kube-system
  labels:
    k8s-app: kubernetes-dashboard
    addonmanager.kubernetes.io/mode: Reconcile
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: kubernetes-dashboard-admin
  namespace: kube-system
[root@hdss7-200 dashboard]# ll
total 16
-rw-r--r-- 1 root root 1382 Aug 29 21:26 dp.yaml
-rw-r--r-- 1 root root  318 Aug 29 21:27 ingress.yaml
-rw-r--r-- 1 root root  610 Aug 29 21:25 rbac.yaml
-rw-r--r-- 1 root root  322 Aug 29 21:26 svc.yaml
[root@hdss7-200 dashboard]# cat ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: kubernetes-dashboard
  namespace: kube-system
  annotations:
    kubernetes.io/ingress.class: traefik
spec:
  rules:
  - host: dashboard.od.com
    http:
      paths:
      - backend:
          serviceName: kubernetes-dashboard
          servicePort: 443
[root@hdss7-200 dashboard]# cat rbac.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    k8s-app: kubernetes-dashboard
    addonmanager.kubernetes.io/mode: Reconcile
  name: kubernetes-dashboard-admin
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: kubernetes-dashboard-admin
  namespace: kube-system
  labels:
    k8s-app: kubernetes-dashboard
    addonmanager.kubernetes.io/mode: Reconcile
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: kubernetes-dashboard-admin
  namespace: kube-system
[root@hdss7-200 dashboard]# cat svc.yaml 
apiVersion: v1
kind: Service
metadata:
  name: kubernetes-dashboard
  namespace: kube-system
  labels:
    k8s-app: kubernetes-dashboard
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
spec:
  selector:
    k8s-app: kubernetes-dashboard
  ports:
  - port: 443
    targetPort: 8443
[root@hdss7-200 dashboard]# cat dp.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: kubernetes-dashboard
  namespace: kube-system
  labels:
    k8s-app: kubernetes-dashboard
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
spec:
  selector:
    matchLabels:
      k8s-app: kubernetes-dashboard
  template:
    metadata:
      labels:
        k8s-app: kubernetes-dashboard
      annotations:
        scheduler.alpha.kubernetes.io/critical-pod: ''
    spec:
      priorityClassName: system-cluster-critical
      containers:
      - name: kubernetes-dashboard
        image: harbor.od.com/public/dashboard:v1.8.3
        resources:
          limits:
            cpu: 100m
            memory: 300Mi
          requests:
            cpu: 50m
            memory: 100Mi
        ports:
        - containerPort: 8443
          protocol: TCP
        args:
          # PLATFORM-SPECIFIC ARGS HERE
          - --auto-generate-certificates
        volumeMounts:
        - name: tmp-volume
          mountPath: /tmp
        livenessProbe:
          httpGet:
            scheme: HTTPS
            path: /
            port: 8443
          initialDelaySeconds: 30
          timeoutSeconds: 30
      volumes:
      - name: tmp-volume
        emptyDir: {}
      serviceAccountName: kubernetes-dashboard-admin
      tolerations:
      - key: "CriticalAddonsOnly"
        operator: "Exists"
[root@hdss7-200 dashboard]# 

然后去21上创建pod

[root@hdss7-21 ~]# kubectl create -f http://k8s-yaml.od.com/dashboard/rbac.yaml
serviceaccount/kubernetes-dashboard-admin created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard-admin created
[root@hdss7-21 ~]# kubectl create -f http://k8s-yaml.od.com/dashboard/dp.yaml
deployment.apps/kubernetes-dashboard created
[root@hdss7-21 ~]# kubectl create -f http://k8s-yaml.od.com/dashboard/svc.yaml
service/kubernetes-dashboard created
[root@hdss7-21 ~]#  kubectl create -f http://k8s-yaml.od.com/dashboard/ingress.yaml
ingress.extensions/kubernetes-dashboard created
[root@hdss7-21 ~]# kubectl get po -n kube-system
NAME                                    READY   STATUS    RESTARTS   AGE
coredns-6b6c4f9648-ckjh7                1/1     Running   0          5h13m
kubernetes-dashboard-76dcdb4677-855kz   1/1     Running   0          44s
traefik-ingress-2jb8z                   1/1     Running   0          157m
traefik-ingress-zh4k6                   1/1     Running   0          157m
[root@hdss7-21 ~]# kubectl get svc -n kube-system
NAME                      TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE
coredns                   ClusterIP   192.168.0.2      <none>        53/UDP,53/TCP,9153/TCP   5h39m
kubernetes-dashboard      ClusterIP   192.168.37.169   <none>        443/TCP                  3m54s
traefik-ingress-service   ClusterIP   192.168.225.63   <none>        80/TCP,8080/TCP          168m
[root@hdss7-21 ~]# kubectl get ingress -n kube-system
NAME                   HOSTS              ADDRESS   PORTS   AGE
kubernetes-dashboard   dashboard.od.com             80      3m50s
traefik-web-ui         traefik.od.com               80      168m

在11上添加域名解析

[root@hdss7-11 ~]# vi /var/named/od.com.zone
[root@hdss7-11 ~]# systemctl restart named
[root@hdss7-11 ~]# cat /var/named/od.com.zone
$ORIGIN od.com.
$TTL 600        ; 10 minutes
@               IN SOA  dns.od.com. dnsadmin.od.com. (
                                2021052305 ; serial
                                10800      ; refresh (3 hours)
                                900        ; retry (15 minutes)
                                604800     ; expire (1 week)
                                86400      ; minimum (1 day)
                                )
                                NS  dns.od.com.
$TTL 60 ; 1 minute
dns             A       10.4.7.11
harbor          A       10.4.7.200
k8s-yaml        A       10.4.7.200
traefik         A       10.4.7.10
dashboard       A       10.4.7.10
[root@hdss7-11 ~]# 

在21上看解析是否正常

[root@hdss7-21 ~]# dig -t A dashboard.od.com @192.168.0.2 +short
10.4.7.10
[root@hdss7-21 ~]# 

然后就去浏览器查看是否安装好了
http://dashboard.od.com/#!/overview?namespace=default
在这里插入图片描述
在这里插入图片描述

k8s的RBAC原理详解

基于角色的访问控制就是rbac

在这里插入图片描述
用户账户如kubelet.kubeconfig,而它就是k8s的用户账户的配置文件
无法直接给账户赋予权限。必须要绑定角色,然后基于角色去给用户账户或服务账户赋予相应的权限

role 角色-----仅仅最指定名称空间有效
clusterrole 普通角色-----对集群名称空间有效

绑定角色的操作也是一种资源
所有的pod都要有一个服务用户,如果你没有指定服务账户是谁,它就给你选定默认的服务账户default。如下图
在这里插入图片描述

然后可以去看yaml文件进行解析

apiVersion: v1
kind: ServiceAccount     
metadata:
  name: traefik-ingress-controller     服务用户
  namespace: kube-system         名称空间
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole       声明集群角色
metadata:
  name: traefik-ingress-controller
rules:            定义角色的规则(权限)
  - apiGroups:
      - ""
    resources:
      - services
      - endpoints
      - secrets
    verbs:
      - get
      - list
      - watch
  - apiGroups:
      - extensions
    resources:
      - ingresses
    verbs:
      - get
      - list
      - watch
---
kind: ClusterRoleBinding      集群角色绑定,就是将上面用户和规则关联起来
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: traefik-ingress-controller
roleRef:                       让你参考的集群角色
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: traefik-ingress-controller
subjects:             角色让那个用户使用呢
- kind: ServiceAccount
  name: traefik-ingress-controller
  namespace: kube-system
rbac就是三步,一创建用户,二定义角色,三将角色和用户绑定起来

然后可以看下dashborad的rbac

apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    k8s-app: kubernetes-dashboard
    addonmanager.kubernetes.io/mode: Reconcile
  name: kubernetes-dashboard-admin          声明服务账户
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: kubernetes-dashboard-admin     
  namespace: kube-system
  labels:
    k8s-app: kubernetes-dashboard
    addonmanager.kubernetes.io/mode: Reconcile
roleRef:                  直接做了角色绑定
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole     指定的是默认集群角色可以用名kubectl get clusterrole查看默认的集群角色
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: kubernetes-dashboard-admin
  namespace: kube-system

可以看下默认的定义的角色

[root@hdss7-21 ~]# kubectl get clusterrole cluster-admin -o yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  annotations:
    rbac.authorization.kubernetes.io/autoupdate: "true"
  creationTimestamp: "2021-08-29T04:36:12Z"
  labels:
    kubernetes.io/bootstrapping: rbac-defaults
  name: cluster-admin
  resourceVersion: "40"
  selfLink: /apis/rbac.authorization.k8s.io/v1/clusterroles/cluster-admin
  uid: 5b982688-f5b2-47b2-9725-c9124845ad28
rules:    #对所有的组所有的资源有所有权限,就是admin
- apiGroups:
  - '*'
  resources:
  - '*'
  verbs:
  - '*'
- nonResourceURLs:
  - '*'
  verbs:
  - '*'
[root@hdss7-21 ~]# 

在这里插入图片描述
也可以看下默认的集群角色是是什么样的

[root@hdss7-21 ~]# kubectl get clusterrole system:node -oyaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  annotations:
    rbac.authorization.kubernetes.io/autoupdate: "true"
  creationTimestamp: "2021-08-29T04:36:13Z"
  labels:
    kubernetes.io/bootstrapping: rbac-defaults
  name: system:node
  resourceVersion: "51"
  selfLink: /apis/rbac.authorization.k8s.io/v1/clusterroles/system%3Anode
  uid: e16e15e2-0686-4edc-ad70-5cdc6b7c6e71
rules:
- apiGroups:
  - authentication.k8s.io
  resources:
  - tokenreviews
省略

下面你可以去官方去看rbac是什么一个工作原理
在这里插入图片描述
在这里插入图片描述

k8s仪表盘鉴权方式了解

在200上进行操作

这个作用不大,不详细写,想做的话可以看下面的图自己做
首先创建浏览器上网站上用到的私钥,在200上

[root@hdss7-200 certs]# (umask 077; openssl genrsa -out dashboard.od.com.key 2048)

在这里插入图片描述
然后做证书签发的请求文件

[root@hdss7-200 certs]# openssl req -new -key dashboard.od.com.key -out dashboar.od.com.csr -subj "/CN=dashboard.od.com/C=CN/ST=BJ/L=Beijing/O=OldboyEdu/OU=ops"

在这里插入图片描述
可以看到已经创建了证书签发的请求文件
在这里插入图片描述
然后去签发证书

[root@hdss7-200 certs]# openssl x509 -req -in dashboar.od.com.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out dashboard.od.com.crt -days 3650

在这里插入图片描述
$$下面是可以检查下,可以不做
在这里插入图片描述

在11上进行操作

[root@hdss7-11 ~]# cd /etc/nginx/
[root@hdss7-11 nginx]# mkdir certs
[root@hdss7-11 nginx]# cd certs/
[root@hdss7-11 certs]# scp hdss7-200:/opt/certs/dashboard.od.com.crt .
The authenticity of host 'hdss7-200 (10.4.7.200)' can't be established.
ECDSA key fingerprint is SHA256:S8lqSXkRnqiGTHxKRSz2BsEbZ45BZTzgVUg611F56/0.
ECDSA key fingerprint is MD5:bb:9d:b7:1f:be:e3:0a:cc:2a:58:5b:13:56:df:c9:82.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'hdss7-200' (ECDSA) to the list of known hosts.
dashboard.od.com.crt                                                                                                                                       100% 1196     1.4MB/s   00:00    
[root@hdss7-11 certs]# ll
总用量 4
-rw-r--r-- 1 root root 1196 622 23:09 dashboard.od.com.crt
[root@hdss7-11 certs]# scp hdss7-200:/opt/certs/dashboard.od.com.key .
dashboard.od.com.key                                                                                                                                       100% 1679     1.9MB/s   00:00    
[root@hdss7-11 certs]# ll
总用量 8
-rw-r--r-- 1 root root 1196 622 23:09 dashboard.od.com.crt
-rw------- 1 root root 1679 622 23:10 dashboard.od.com.key
[root@hdss7-11 certs]# cd ..
[root@hdss7-11 nginx]# cd conf.d/

在这里插入图片描述
在这里做了一个特殊的操作

[root@hdss7-11 conf.d]# vi dashboard.od.com.conf

server {
    listen        80;
    server_name   dashboard.od.com;

    rewrite ^(.*)$ https://${server_name}$1 permanent;
}
server {
    listen        443 ssl;
    server_name   dashboard.od.com;

    ssl_certificate "certs/dashboard.od.com.crt";
    ssl_certificate_key "certs/dashboard.od.com.key";
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  10m;
    ssl_ciphers HIGH:!aNULL:!MDS;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_pass http://default_backend_traefik;
        proxy_set_header Host       $http_host;
        proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
    }
}
[root@hdss7-11 conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@hdss7-11 conf.d]# nginx -s reload

在这里插入图片描述
然后在刷新的时候就需要证书了
这时候填写-高级–继续连接–
在这里插入图片描述
再去看证书的时候就显示是证书无效
如果你给浏览器交钱就会有效了
在这里插入图片描述
这个时候就是需要用token登录了

登录方式

[root@hdss7-21 ~]# kubectl get secret -n kube-system
NAME                                     TYPE                                  DATA   AGE
coredns-token-2j5fs                      kubernetes.io/service-account-token   3      6d
default-token-7vfng                      kubernetes.io/service-account-token   3      18d
kubernetes-dashboard-admin-token-zpdqq   kubernetes.io/service-account-token   3      2d1h
kubernetes-dashboard-key-holder          Opaque                                2      2d1h
traefik-ingress-controller-token-k7z4c   kubernetes.io/service-account-token   3      2d6h
[root@hdss7-21 ~]# kubectl describe secret kubernetes-dashboard-admin-token-zpdqq -n kube-system
Name:         kubernetes-dashboard-admin-token-zpdqq
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: kubernetes-dashboard-admin
              kubernetes.io/service-account.uid: ee381186-ee4a-485a-8861-d6791aab0c93

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1346 bytes
namespace:  11 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC1hZG1pbi10b2tlbi16cGRxcSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC1hZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImVlMzgxMTg2LWVlNGEtNDg1YS04ODYxLWQ2NzkxYWFiMGM5MyIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTprdWJlcm5ldGVzLWRhc2hib2FyZC1hZG1pbiJ9.YFnb4kcn4Ykkdmq4lDrkyy2mLzCo2RwwWDS8S8cPaaWgEdYXdXHfHZr0zbsiaEkN1Rlmby6aZwpQwqK8MpeYjTxmn13HX-2uAMdPy5w6deLr_cdDBtKU94gQWQVTcLPrjg01RJ6QZLRv0tv2CDcKJUd9u3C7CUO3xmzjJJTY0XJBtUvHrlCLYooGAVwYbyTWhoD0G6cWDh_ncK8iDTUeVHjJw1u-cwgA3N2E6R8TcAwxlrQUWqEM07U9odKp-YX8YnLWoRFupH4mVSkNzoO0-7Djix2Q8x59_xqtpoxzi_aE39uMjSCy_lbv0xqNNaJQ5JuPsgli73Co9RpWnkkTLw

这个时候可能没有报错但是登录还是一直卡着
需要去配置认证下

在这里插入图片描述
令牌就能登录上了
在这里插入图片描述
这个时候可能很不好刷出来,因为需要换成v1.10.1

升级v1.10.1版本

[root@hdss7-200 certs]# docker pull hexun/kubernetes-dashboard-amd64:v1.10.1
v1.10.1: Pulling from hexun/kubernetes-dashboard-amd64
9518d8afb433: Pull complete 
Digest: sha256:0ae6b69432e78069c5ce2bcde0fe409c5c4d6f0f4d9cd50a17974fea38898747
Status: Downloaded newer image for hexun/kubernetes-dashboard-amd64:v1.10.1
docker.io/hexun/kubernetes-dashboard-amd64:v1.10.1
[root@hdss7-200 certs]# docker images |grep dash
hexun/kubernetes-dashboard-amd64   v1.10.1                    f9aed6605b81   2 years ago     122MB
k8scn/kubernetes-dashboard-amd64   v1.8.3                     fcac9aa03fd6   3 years ago     102MB
harbor.od.com/public/dashboard     v1.8.3                     fcac9aa03fd6   3 years ago     102MB
[root@hdss7-200 certs]# docker tag f9aed6605b81 harbor.od.com/public/dashboard:v1.10.1
[root@hdss7-200 certs]# docker push harbor.od.com/public/dashboard:v1.10.1
The push refers to repository [harbor.od.com/public/dashboard]
fbdfe08b001c: Pushed 
v1.10.1: digest: sha256:0ae6b69432e78069c5ce2bcde0fe409c5c4d6f0f4d9cd50a17974fea38898747 size: 529
[root@hdss7-200 certs]# cd /data/k8s-yaml/dashboard/
[root@hdss7-200 dashboard]# vi dp.yaml 
   24         image: harbor.od.com/public/dashboard:v1.10.1                       ##将1.8.3改成1.10.1

在这里插入图片描述
注意把dp.yaml的v1.8.3改为v1.10.1
然后去浏览器去更改下就能直接更新了
在这里插入图片描述
这个时候可能就会出现错误的了,过一会就好了,
同样的道理可以去查看密钥登录了
在这里插入图片描述
会强制你登录
在这里插入图片描述

dashboard分权举例

这个这不在做了,

在200上创建rbac-minimal.yaml文件

[root@hdss7-200 dashboard]# pwd
/data/k8s-yaml/dashboard
[root@hdss7-200 dashboard]# cat rbac-minimal.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    k8s-app: kubernetes-dashboard
    addonmanager.kubernetes.io/mode: Reconcile
  name: kubernetes-dashboard
  namespace: kube-system
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
    addonmanager.kubernetes.io/mode: Reconcile
  name: kubernetes-dashboard-minimal
  namespace: kube-system
rules:
   # Allow Dashboard to get, update and delete Dashboard exclusive secrets. 
 - apiGroups: [""]
   resources: ["secrets"]
   resourceNames: ["kubernetes-dashboard-key-holder", "kubernetes-dashboard-certs"]
   verbs: ["get", "update", "delete"]
   # Allow Dashboard to get and update ' kubernetes-dashboard-settings' config map.
 - apiGroups: [""]
   resources: ["configmaps"]
   resourceNames: ["kubernetes-dashboard-settings"]
   verbs: ["get", "update"]
   # Allow Dashboard to get metrics from heapster.
 - apiGroups: [""]
   resources: ["services"]
   resourceNames: ["heapster"]
   verbs: ["proxy"]
 - apiGroups: [""]
   resources: ["services/proxy"]
   resourceNames: ["heapster", "http:heapster:", "https:heapster:"]
   verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: kubernetes-dashboard-minimal
  namespace: kube-system
  labels:
    k8s-app: kubernetes-dashboard
    addonmanager.kubernetes.io/mode: Reconcile
roleRef:
  apiGroups: rbac.authorization.k8s.io
  kind: Role
  name: kubernetes-dashboard-minimal
subjects:
- kind: ServiceAccount
  name: kubernetes-dashboard
  namespace: kube-system
然后更改下dp的那个目录
[root@hdss7-200 dashboard]# cat dp.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: kubernetes-dashboard
  namespace: kube-system
  labels:
    k8s-app: kubernetes-dashboard
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
spec:
  selector:
    matchLabels:
      k8s-app: kubernetes-dashboard
  template:
    metadata:
      labels:
        k8s-app: kubernetes-dashboard
      annotations:
        scheduler.alpha.kubernetes.io/critical-pod: ''
    spec:
      priorityClassName: system-cluster-critical
      containers:
      - name: kubernetes-dashboard
        image: harbor.od.com/public/dashboard:v1.8.3
        resources:
          limits:
            cpu: 100m
            memory: 300Mi
          requests:
            cpu: 50m
            memory: 100Mi
        ports:
        - containerPort: 8443
          protocol: TCP
        args:
          # PLATFORM-SPECIFIC ARGS HERE
          - --auto-generate-certificates
        volumeMounts:
        - name: tmp-volume
          mountPath: /tmp
        livenessProbe:
          httpGet:
            scheme: HTTPS
            path: /
            port: 8443
          initialDelaySeconds: 30
          timeoutSeconds: 30
      volumes:
      - name: tmp-volume
        emptyDir: {}
      serviceAccountName: kubernetes-dashboard     ##这里更改
      tolerations:
      - key: "CriticalAddonsOnly"
        operator: "Exists"
[root@hdss7-200 dashboard]# 

然后在22上进行创建minimal的pod了

然后再去hdss7-22上创建
[root@hdss7-22 ~]# kubectl apply -f http://k8s-yaml.od.com/dashboard/rbac-minimal.yaml
serviceaccount/kubernetes-dashboard unchanged
role.rbac.authorization.k8s.io/kubernetes-dashboard-minimal unchanged
error: error validating "http://k8s-yaml.od.com/dashboard/rbac-minimal.yaml": error validating data: [ValidationError(RoleBinding.roleRef): unknown field "apiGroups" in io.k8s.api.rbac.v1.RoleRef, ValidationError(RoleBinding.roleRef): missing required field "apiGroup" in io.k8s.api.rbac.v1.RoleRef]; if you choose to ignore these errors, turn validation off with --validate=false
[root@hdss7-22 ~]# kubectl apply -f http://k8s-yaml.od.com/dashboard/rbac-minimal.yaml --validate=false
serviceaccount/kubernetes-dashboard unchanged
role.rbac.authorization.k8s.io/kubernetes-dashboard-minimal unchanged
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created
[root@hdss7-22 ~]# kubectl apply -f http://k8s-yaml.od.com/dashboard/dp.yaml
deployment.apps/kubernetes-dashboard configured
[root@hdss7-22 ~]# kubectl get po -n kube-system          ----这里查看的快乐会看到一个更新的过程
NAME                                    READY   STATUS    RESTARTS   AGE
coredns-6b6c4f9648-qb9fw                1/1     Running   3          14d
kubernetes-dashboard-6d58ccc9fc-9j2jg   1/1     Running   0          12s
traefik-ingress-8t8zl                   1/1     Running   1          10d
traefik-ingress-xhwk7                   1/1     Running   0          10d

在这里插入图片描述
在这里插入图片描述
这个时候去登录的时候就有两个令牌了,登录的时候先去查看令牌
在这里插入图片描述
在这里插入图片描述
l两个令牌都能登陆的,当然了在minimal的是很小的权限的

下面主要就是说明的是最小权限的可以改别设置,这样能够用有效的利用这个软件,免的给你经常能坏
在这里插入图片描述
上面的实验最后都是需要还原为1.8.3的注意哦
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值