k8s,盤他!k8s多節點儀表盤(web界面)部署與谷歌瀏覽器訪問k8s儀表盤問題解決!

前言

一:k8s的WEB界面部署

1.1:兩個master節點檢查pod資源是否正常

  • [root@master ~]# kubectl get nodes	'//檢查node節點是否運行正常'
    NAME              STATUS   ROLES    AGE   VERSION
    192.168.233.132   Ready    <none>   8d    v1.12.3
    192.168.233.133   Ready    <none>   8d    v1.12.3
    [root@master ~]# kubectl get pods	'//檢查之前創建的pod資源是否運行正常'
    NAME                    READY   STATUS    RESTARTS   AGE
    nginx-dbddb74b8-5s6h7   1/1     Running   0          7d8h
    
    

1.2、master節點上創建dashboard工作目錄,並拷貝部署web界面所需的文件到指定目錄

  • 下載的網址(直接複製即可):https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/dashboard

    mark

  • [root@master dashboard]# rz -E
    rz waiting to receive.
    [root@master dashboard]# ls
    dashboard-configmap.yaml   dashboard-secret.yaml
    dashboard-deployment.yaml  dashboard-service.yaml
    dashboard-rbac.yaml        k8s-admin.yaml
    '//configmap.yaml:配置,deployment.yaml:控制器,rbac.yaml:角色控制,訪問控制,secret.yaml:安全,service.yaml:服務'
    
  • 其中service的文件需要添加node節點的訪問端口

  • 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:
      type: NodePort	'//添加類型'
      selector:
        k8s-app: kubernetes-dashboard
      ports:
      - port: 443
        targetPort: 8443
        nodePort: 30005	'//添加類型端口'
    
    
  • 還需要自己編寫一個admin的yaml文件

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: dashboard-admin
      namespace: kube-system
    ---
    kind: ClusterRoleBinding
    apiVersion: rbac.authorization.k8s.io/v1beta1
    metadata:
      name: dashboard-admin
    subjects:
      - kind: ServiceAccount
        name: dashboard-admin
        namespace: kube-system
    roleRef:
      kind: ClusterRole
      name: cluster-admin
      apiGroup: rbac.authorization.k8s.io
    
    

1.3、根據上傳的文件創建相應的pod

  • 創建訪問控制的pod

    [root@master dashboard]# kubectl create -f dashboard-rbac.yaml 
    role.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created
    rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created
    [root@master dashboard]# kubectl get Role -n kube-system	'//Role是dashboard-rbac.yaml文件中指明的Kind,-n是指定namespace,同樣在配置文件中可以查看'
    NAME                                             AGE
    extension-apiserver-authentication-reader        8d
    kubernetes-dashboard-minimal                     19s	'//創建成功'
    system::leader-locking-kube-controller-manager   8d
    system::leader-locking-kube-scheduler            8d
    system:controller:bootstrap-signer               8d
    system:controller:cloud-provider                 8d
    system:controller:token-cleaner                  8d
    
    
  • 創建安全的pod

    [root@master dashboard]# kubectl create -f dashboard-secret.yaml 
    secret/kubernetes-dashboard-certs created
    secret/kubernetes-dashboard-key-holder created
    [root@master dashboard]# kubectl get Secret -n kube-system
    NAME                              TYPE                                  DATA   AGE
    default-token-cnnbv               kubernetes.io/service-account-token   3      8d
    kubernetes-dashboard-certs        Opaque                                0      33s
    kubernetes-dashboard-key-holder   Opaque                                0      33s
    
    
  • 同理創建其他的pod

    '//創建配置的pod'
    [root@master dashboard]# kubectl create -f dashboard-configmap.yaml 
    configmap/kubernetes-dashboard-settings created
    [root@master dashboard]# kubectl get Configmap -n kube-system
    NAME                                 DATA   AGE
    extension-apiserver-authentication   1      8d
    kubernetes-dashboard-settings        0      17s
    '//創建控制器的pod'
    [root@master dashboard]# kubectl create -f dashboard-deployment.yaml 
    serviceaccount/kubernetes-dashboard created
    deployment.apps/kubernetes-dashboard created
    [root@master dashboard]# kubectl get ServiceAccount -n kube-system
    NAME                   SECRETS   AGE
    default                1         8d
    kubernetes-dashboard   1         22s
    '//創建service服務pod'
    [root@master dashboard]# kubectl create -f dashboard-service.yaml 
    service/kubernetes-dashboard created
    [root@master dashboard]# kubectl get service -n kube-system
    NAME                   TYPE       CLUSTER-IP   EXTERNAL-IP   PORT(S)    
    kubernetes-dashboard   NodePort   10.0.0.139   <none>        443:30005/T
    '//pod資源只是提供程序應用,一旦service創建了,那麼pod資源會被提供出去可以訪問,端口伴隨着service出現的,通過nodeport端口訪問web界面'
    
  • 查看創建完成的pod資源

    [root@master dashboard]# kubectl get pods -n kube-system	'//查看創建在指定的kube-system命名空間下的資源'
    NAME                                    READY   STATUS    RESTARTS   AGE
    kubernetes-dashboard-65f974f565-gxg98   1/1     Running   0          9m45s
    '//可以縮寫,可以同時查看多個資源'
    [root@master dashboard]# kubectl get pods,svc -n kube-system
    NAME                                        READY   STATUS    RESTARTS   AGE
    pod/kubernetes-dashboard-65f974f565-gxg98   1/1     Running   0          12m
    
    NAME                           TYPE       CLUSTER-IP   EXTERNAL-IP   PORT(S)         AGE
    service/kubernetes-dashboard   NodePort   10.0.0.139   <none>        443:30005/TCP   5m21s
    
    
  • 查看pod資源在哪個節點

    [root@master dashboard]# kubectl get pods -n kube-system -o wide
    NAME                                    READY   STATUS    RESTARTS   AGE   IP           NODE              NOMINATED NODE
    kubernetes-dashboard-65f974f565-gxg98   1/1     Running   0          12m   172.17.4.2   192.168.233.133   <none>
    
    
  • 查看pod資源日誌

    [root@master dashboard]# kubectl logs kubernetes-dashboard-65f974f565-gxg98 -n kube-system 
    
    
  • 總結一下:k8s創建pod資源有兩種方式

    1、使用kubectl 命令創建:kubectl run 名稱 --image= 鏡像

    2、使用yaml文件格式進行創建:kubectl create -f yaml文件

1.4:訪問web界面,並解決訪問問題

  • 訪問網址:https://192.168.233.133:30005,打開開發者工具,查看security發現缺少證書

  • mark

  • 爲谷歌瀏覽器寫一個證書

  • [root@master dashboard]# vim dashboard-cert.sh
    cat > dashboard-csr.json <<EOF
    {
       "CN": "Dashboard",
       "hosts": [],
       "key": {
           "algo": "rsa",
           "size": 2048
       },
       "names": [
           {
               "C": "CN",
               "L": "BeiJing",
               "ST": "BeiJing"
           }
       ]
    }
    EOF
    
    K8S_CA=$1
    cfssl gencert -ca=$K8S_CA/ca.pem -ca-key=$K8S_CA/ca-key.pem -config=$K8S_CA/ca-config.json -profile=kubernetes dashboard-csr.json | cfssljson -bare dashboard
    kubectl delete secret kubernetes-dashboard-certs -n kube-system
    kubectl create secret generic kubernetes-dashboard-certs --from-file=./ -n kube-system
    
  • 生成證書到指定目錄

  • [root@master dashboard]# bash dashboard-cert.sh /root/k8s/k8s-cert/
    
  • 修改控制的配置文件

    [root@master dashboard]# vim dashboard-deployment.yaml 
        ...省略內容
            ports:
            - containerPort: 8443
              protocol: TCP
            args:
              # PLATFORM-SPECIFIC ARGS HERE
              - --auto-generate-certificates
              - --tls-key-file=dashboard-key.pem	'//下方添加這兩行內容'
              - --tls-cert-file=dashboard.pem
    
    
  • 重新部署更新,使用apply命令

    [root@master dashboard]# kubectl apply -f dashboard-deployment.yaml 
    Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
    serviceaccount/kubernetes-dashboard configured
    Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
    deployment.apps/kubernetes-dashboard configured
    [root@master dashboard]# kubectl get pods -n kube-system -o wide
    NAME                                    READY   STATUS    RESTARTS   AGE   IP            NODE              NOMINATED NODE
    kubernetes-dashboard-7dffbccd68-58qms   1/1     Running   0          26s   172.17.26.3   192.168.233.132   <none>	'//節點變了'
    
    
  • 再次訪問web界面

    mark

    mark

1.5:選擇使用令牌訪問

  • 生成令牌:

    [root@master dashboard]# kubectl create -f k8s-admin.yaml 
    serviceaccount/dashboard-admin created
    clusterrolebinding.rbac.authorization.k8s.io/dashboard-admin created
    [root@master dashboard]# kubectl get secret -n kube-system
    NAME                               TYPE                                  DATA   AGE
    dashboard-admin-token-zwktc        kubernetes.io/service-account-token   3      14s	'//生成了令牌'
    default-token-cnnbv                kubernetes.io/service-account-token   3      8d
    kubernetes-dashboard-certs         Opaque                                11     9m58s
    kubernetes-dashboard-key-holder    Opaque                                2      35m
    kubernetes-dashboard-token-qgppd   kubernetes.io/service-account-token   3      32m
    
    
  • 查看令牌

    [root@master dashboard]# kubectl describe secret dashboard-admin-token-zwktc -n kube-system
    Name:         dashboard-admin-token-zwktc
    Namespace:    kube-system
    Labels:       <none>
    Annotations:  kubernetes.io/service-account.name: dashboard-admin
                  kubernetes.io/service-account.uid: ec6e301f-90d4-11ea-8c4f-000c294b2dd3
    
    Type:  kubernetes.io/service-account-token
    
    Data
    ====
    ca.crt:     1359 bytes
    namespace:  11 bytes
    token:    '//複製下方令牌,填寫到瀏覽器中即可'  eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tendrdGMiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiZWM2ZTMwMWYtOTBkNC0xMWVhLThjNGYtMDAwYzI5NGIyZGQzIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.n8a101tY2bjlv99A3WHiEsdlLBBnTXXeJED32lOBjJ6M66_rFDVyxzpAWqxY146NkRdaXK0eVdNzIkAPRXWEO1uHjU17T3iHeWBqSzQgzxvN2NgnAam4zQmBE4XaeO2HFv63MX4VDzvwsu8k8MeiryUEBw86DTndCfgvnxcPszq2rZR5QwiHMjAxFQMIA7SQvWj2-rDO7ln6gkqVU5fH04ujz7p2sXI_QQezFjMDTtKWFcMegT3T2gq65-CMB34MyEcxZxGWPQeDu4A4S7PLPlbr0CLdO7YVBWU_pEab0LHBlN8KsJYeZd49kBMgA-EdY5uMQJbH_XFHyGXq3VShwA
    
    
  • 再次訪問web界面

    mark

謝謝賞閱!如有疑問可評論區交流!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章