Kubernetes-dashboard部署

https://www.cnblogs.com/panwenbin-logs/p/10052554.html html

一章、部署dashboardgit

做爲KubernetesWeb用戶界面,用戶能夠經過DashboardKubernetes集羣中部署容器化的應用,對應用進行問題處理和管理,並對集羣自己進行管理。經過Dashboard,用戶能夠查看集羣中應用的運行狀況,同時也可以基於Dashboard建立或修改部署、任務、服務等Kubernetes的資源。經過部署嚮導,用戶可以對部署進行擴縮容,進行滾動更新、重啓Pod和部署新應用。github

項目地址:https://github.com/kubernetes/dashboard,根據項目中的介紹,咱們本身在線安裝便可,可是實際上咱們國內用戶沒法本身安裝,須要下載後修改文件才能使用docker

下載yaml文件json

[root@k8s-master01 manifests]# mkdir dashboard^C
[root@k8s-master01 manifests]# cd dashboard/
[root@k8s-master01 dashboard]# wget  https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

修改yaml文件中鏡像的地址及service的類型api

image.png

修改完成後,應用yaml文件bash

image.png

[root@k8s-master01 dashboard]# kubectl apply -f kubernetes-dashboard.yaml 
serviceaccount "kubernetes-dashboard" unchanged
role.rbac.authorization.k8s.io "kubernetes-dashboard-minimal" unchanged
rolebinding.rbac.authorization.k8s.io "kubernetes-dashboard-minimal" unchanged
deployment.apps "kubernetes-dashboard" configured
service "kubernetes-dashboard" configured
[root@k8s-master01 dashboard]# kubectl get pod -n kube-system   #dashborad存在於kube-system名稱空間中
NAME                                    READY     STATUS    RESTARTS   AGE
......
kubernetes-dashboard-7b689d867f-f67hm   1/1       Running   0          27s
[root@k8s-master01 dashboard]# kubectl get svc -n kube-system  #查看service和端口是否開啓
NAME                   TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)         AGE
......
kubernetes-dashboard   NodePort    10.101.22.15   <none>        443:32333/TCP   13m

經過masterIP:port進行訪問,正常應該會出現下面的界面app

image.png

從界面中能夠看到訪問dashboard須要經過config或者token受權才能登錄,可是dashboard自己不提供受權,由於dashborad是一個pod,實際上咱們是使用這個pod認證到k8s的集羣中去的,咱們須要爲dashboradpod提供config或者token認證,因此這裏的認證主體應該是serviceaccount負載均衡

若是出現如下界面ide

image.png



image.png

這是由於yaml文件中建立secret有問題,咱們須要手動建立一個證書來進行認證,下面咱們建立一個證書

[root@k8s-master01 dashboard]# cd /etc/kubernetes/pki/
[root@k8s-master01 pki]# (umask 077; openssl genrsa -out dashboard.key 2048)  #建立一個證書
Generating RSA private key, 2048 bit long modulus
............................................................................................+++
.............+++
e is 65537 (0x10001)
[root@k8s-master01 pki]# openssl req -new -key dashboard.key -out dashboard.csr -subj "/O=qiangungun/CN=kubernetes-dashboard"    #創建證書的簽署請求
[root@k8s-master01 pki]# openssl x509 -req -in dashboard.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out dashboard.crt -days 3650 #使用集羣的ca來簽署證書
Signature ok
subject=/O=qiangungun/CN=kubernetes-dashboard
Getting CA Private Key
[root@k8s-master01 pki]# kubectl create secret generic kubernetes-dashboard-certs --from-file=dashboard.crt=./dashboard.crt --from-file=dashboard.key=./dashboard.key  -n kube-system  #咱們須要把咱們建立的證書建立爲secret給k8s使用
secret "kubernetes-dashboard-certs" created

註釋dashborad yaml文件中secret的配置

image.png

從新應用yaml文件

[root@k8s-master01 dashboard]# kubectl delete  -f kubernetes-dashboard.yaml 
[root@k8s-master01 dashboard]# kubectl apply  -f kubernetes-dashboard.yaml

再次訪問應該就正常了

第二章、建立以token方式登陸dashborad的用戶

1.建立具備集羣管理權限的用戶登陸dashborad

[root@k8s-master01 dashboard]# kubectl create serviceaccount dashboard-admin -n kube-system #建立用於登陸dashborad的serviceaccount帳號
serviceaccount "dashboard-admin" created
[root@k8s-master01 dashboard]# kubectl create clusterrolebinding dashboard-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin   #建立一個clusterrolebingding,將名稱爲cluster-admin的clusterrole綁定到咱們剛剛從的serviceaccount上,名稱空間和sa使用:做爲間隔
clusterrolebinding.rbac.authorization.k8s.io "dashboard-cluster-admin" created   
[root@k8s-master01 dashboard]# kubectl get secret -n kube-system #建立完成後系統會自動建立一個secret,名稱以serviceaccount名稱開頭
NAME                                             TYPE                                  DATA      AGE
......
dashboard-admin-token-pbsj9                      kubernetes.io/service-account-token   3         4m
.....
[root@k8s-master01 dashboard]# kubectl describe secret dashboard-admin-token-pbsj9 -n kube-system  #使用describe查看該secret的詳細信息,主要是token一段
Name:         dashboard-admin-token-pbsj9
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name=dashboard-admin
              kubernetes.io/service-account.uid=b24fb2eb-f5e1-11e8-8969-5254001b07db
Type:  kubernetes.io/service-account-token
Data
====
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYa9hcmQtYWRtaW4tdG9rZW4tcGJzajkiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiYjI0ZmIyZWItZjVlMS0xMWU4LTg5NjktNTI1NDAwMWIwN2RiIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.jDtIZFrcAPkr71pSStWm1AD4_gJA9A4JeYics3Nxs0hm2NQSCgL_pAIlVlSiHELmn3TLasOcvy8SljQnZQJcLKSkP-ubSBe8IkzXJkBr3SOhEr6eHb1ZDHXtC9bx58QH6PEOnO3hwoUaEtcIMuzC8ULbMp5f4TCvZ5mSKL_WPwaVJgZZDteUBPOsZHfcfIyatjXOWZBhiWbD3UZIN47ghpZl6BdXVeqLT5ua8Z8G0qtRD-DoDiQOaQ5Z9nKo_yluyb5cLJgpAtAl9i4Df7exHgVRnPETk1fbnxCDTGYlEgmLKFU6tRCEKl5Q66O9TICpdJIeT4sUBJxDSFVScPNFrA
ca.crt:     1025 bytes
namespace:  11 bytes

複製secret中的token,來訪問dashborad

image.png

選擇令牌,並粘貼剛剛複製的token,點擊登陸

image.png


能夠看到,能夠管理集羣中的全部資源

2、建立具備指定名稱空間管理權限的用戶登陸dashborad

[root@k8s-master01 dashboard]# kubectl create serviceaccount default-ns-admin -n default #再次建立一個serviceaccount,指定名稱空間爲default
serviceaccount "default-ns-admin" created
[root@k8s-master01 dashboard]# kubectl create rolebinding default-ns-admin --clusterrole=admin --serviceaccount=default:default-ns-admin #使用rolebinding綁定clusterrole用戶admin到剛剛建立的serviceaccount上
rolebinding.rbac.authorization.k8s.io "default-ns-admin" created
[root@k8s-master01 dashboard]# kubectl get secret 
NAME                           TYPE                                  DATA      AGE
......
default-ns-admin-token-26xgs   kubernetes.io/service-account-token   3         2m
......
[root@k8s-master01 dashboard]# kubectl describe secret default-ns-admin-token-26xgs 
Name:         default-ns-admin-token-26xgs
Namespace:    default
Labels:       <none>
Annotations:  kubernetes.io/service-account.name=default-ns-admin
              kubernetes.io/service-account.uid=b13f19e9-f5ec-11e8-8969-5254001b07db
Type:  kubernetes.io/service-account-token
Data
====
ca.crt:     1025 bytes
namespace:  7 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImRlZmF1bHQtbnMtYWRtaW4tdG9rZW4tMjZ4Z3MiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGVmYXVsdC1ucy1hZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImIxM2YxOWU5LWY1ZWMtMTFlOC04OTY5LTUyNTQwMDFiMDdkYiIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0OmRlZmF1bHQtbnMtYWRtaW4ifQ.T1TsD-SyHDgpMMLWk75TFtYxOzc6SQcUHD4FsNEEjx6p48G9smBoh7fO6_y9NIvZKCjIGvzKt-ZUhRg7Oxk6vL2JIODe2apQQQBYyIzzW2y1ZFSICPpEHs0FYwt84RsUefGLLfEq0BrGa22mV58UfcttSMZN9LAUuWYe_1UX81F9neAuknKO78BNzif854SFOLvOaqOqNfMSiXs8Fi3vWPLi8_QFihObrC_FkDBhzc62zYtXzpH8T7gzadfAIexLpX7__RmcY8Cuaf7XvRh-zn3SAcmwo8v2ydtwOwTOtPA-6gEXGSM2UfR-rZ0WloPCIvGonej8fbNgH8G9sT2KTg


使用此token登陸dashborad

image.png

能夠看到,出來default名稱空間以外,沒法看到其餘名稱空間了

第三章、建立以config方式登陸dashborad的用戶

爲了方面咱們直接使用剛剛建立的serviceaccounttoken做爲認證信息

[root@k8s-master01 dashboard]# cd /etc/kubernetes/pki/
[root@k8s-master01 pki]# kubectl config set-cluster kubernetes --certificate-authority=./ca.crt --server="https://172.16.150.212:6443" --embed-certs=true --kubeconfig=/root/def-ns-admin.conf  #新建一個cluster,名稱爲kubernetes,使用當前集羣的ca進行認證,並指定kubeconfig文件位置
Cluster "kubernetes" set.
[root@k8s-master01 pki]# kubectl config view --kubeconfig=/root/def-ns-admin.conf  #查看建立信息
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: REDACTED
    server: https://172.16.150.212:6443
  name: kubernetes
contexts: []
current-context: ""
kind: Config
preferences: {}
users: []
[root@k8s-master01 pki]# cd 
[root@k8s-master01 ~]# kubectl get secret 
[root@k8s-master01 ~]# DEF_NS_ADMIN_TOKEN=$(kubectl get secret default-ns-admin-token-26xgs -o jsonpath={.data.token}|base64 -d) #k8s生成的token爲base64加密,全部須要使用base64進行解密
[root@k8s-master01 ~]# kubectl config set-credentials def-ns-admin --token=$DEF_NS_ADMIN_TOKEN --kubeconfig=/root/def-ns-admin.conf #建立一個serviceaccount的用戶
User "def-ns-admin" set.
[root@k8s-master01 manifests]# kubectl config view --kubeconfig=/root/def-ns-admin.conf 
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: REDACTED
    server: https://172.16.150.212:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: def-ns-admin
  name: def-ns-admin@kubernetes
current-context: ""
kind: Config
preferences: {}
users:
- name: def-ns-admin
  user:
    token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImRlZmF1bHQtbnMtYWRtaW4tdG9rZW4tMjZ4Z3MiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGVmYXVsdC1ucy1hZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImIxM2YxOWU5LWY1ZWMtMTFlOC04OTY5LTUyNTQwMDFiMDdkYiIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0OmRlZmF1bHQtbnMtYWRtaW4ifQ.T1TsD-SyHDgpMMLWk75TFtYxOzc6SQcUHD4FsNEEjx6p48G9smBoh7fO6_y9NIvZKCjIGvzKt-ZUhRg7Oxk6vL2JIODe2apQQQBYyIzzW2y1ZFSICPpEHs0FYwt84RsUefGLLfEq0BrGa22mV58UfcttSMZN9LAUuWYe_1UX81F9neAuknKO78BNzif854SFOLvOaqOqNfMSiXs8Fi3vWPLi8_QFihObrC_FkDBhzc62zYtXzpH8T7gzadfAIexLpX7__RmcY8Cuaf7XvRh-zn3SAcmwo8v2ydtwOwTOtPA-6gEXGSM2UfR-rZ0WloPCIvGonej8fbNgH8G9sT2KTg
[root@k8s-master01 manifests]# kubectl config use-context def-ns-admin@kubernetes --kubeconfig=/root/def-ns-admin.conf #設置當前serviceaccount的上下文
Switched to context "def-ns-admin@kubernetes".
[root@k8s-master01 manifests]# kubectl config view --kubeconfig=/root/def-ns-admin.conf 
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: REDACTED
    server: https://172.16.150.212:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: def-ns-admin
  name: def-ns-admin@kubernetes
current-context: def-ns-admin@kubernetes
kind: Config
preferences: {}
users:
- name: def-ns-admin
  user:
    token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImRlZmF1bHQtbnMtYWRtaW4tdG9rZW4tMjZ4Z3MiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGVmYXVsdC1ucy1hZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImIxM2YxOWU5LWY1ZWMtMTFlOC04OTY5LTUyNTQwMDFiMDdkYiIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0OmRlZmF1bHQtbnMtYWRtaW4ifQ.T1TsD-SyHDgpMMLWk75TFtYxOzc6SQcUHD4FsNEEjx6p48G9smBoh7fO6_y9NIvZKCjIGvzKt-ZUhRg7Oxk6vL2JIODe2apQQQBYyIzzW2y1ZFSICPpEHs0FYwt84RsUefGLLfEq0BrGa22mV58UfcttSMZN9LAUuWYe_1UX81F9neAuknKO78BNzif854SFOLvOaqOqNfMSiXs8Fi3vWPLi8_QFihObrC_FkDBhzc62zYtXzpH8T7gzadfAIexLpX7__RmcY8Cuaf7XvRh-zn3SAcmwo8v2ydtwOwTOtPA-6gEXGSM2UfR-rZ0WloPCIvGonej8fbNgH8G9sT2KTg

導出/root/def-ns-admin.conf到客戶端上,並選擇kubeconfig方式登陸,點擊選擇文件便可

image.png

image.png

沒有問題,登陸成功

第四章、Dashboard使用

1 Dashboard提供的功能

在默認狀況下,Dashboard顯示默認(default)命名空間下的對象,也能夠經過命名空間選擇器選擇其餘的命名空間。在Dashboard用戶界面中可以顯示集羣大部分的對象類型。

1集羣管理

集羣管理視圖用於對節點、命名空間、持久化存儲卷、角色和存儲類進行管理。 節點視圖顯示CPU和內存的使用狀況,以及此節點的建立時間和運行狀態。 命名空間視圖會顯示集羣中存在哪些命名空間,以及這些命名空間的運行狀態。角色視圖以列表形式展現集羣中存在哪些角色,這些角色的類型和所在的命名空間。 持久化存儲卷以列表的方式進行展現,能夠看到每個持久化存儲卷的存儲總量、訪問模式、使用狀態等信息;管理員也可以刪除和編輯持久化存儲卷的YAML文件。

2 工做負載

工做負載視圖顯示部署、副本集、有狀態副本集等全部的工做負載類型。在此視圖中,各類工做負載會按照各自的類型進行組織。 工做負載的詳細信息視圖可以顯示應用的詳細信息和狀態信息,以及對象之間的關係。

3 服務發現和負載均衡

服務發現視圖可以將集羣內容的服務暴露給集羣外的應用,集羣內外的應用能夠經過暴露的服務調用應用,外部的應用使用外部的端點,內部的應用使用內部端點。

4 存儲

存儲視圖顯示被應用用來存儲數據的持久化存儲卷申明資源。

5 配置

配置視圖顯示集羣中應用運行時所使用配置信息,Kubernetes提供了配置字典(ConfigMaps)和祕密字典(Secrets),經過配置視圖,可以編輯和管理配置對象,以及查看隱藏的敏感信息。

6 日誌視圖

Pod列表和詳細信息頁面提供了查看日誌視圖的連接,經過日誌視圖不但可以查看Pod的日誌信息,也可以查看Pod容器的日誌信息。經過Dashboard可以根據嚮導建立和部署一個容器化的應用,固然也能夠經過手工的方式輸入指定應用信息,或者經過上傳YAMLJSON文件來建立和不受應用。

2 、部署應用

1手動建立應用

經過嚮導建立和部署容器化應用時,須要提供以下的一些信息:

應用名稱(App name 必需) 須要部署的應用的名稱。帶有此值的標籤將會被添加至部署和服務中。在當前的Kubernetes命名空間中,應用名稱必須是惟一的。同時,應用名稱必須以小寫字母開頭,以小寫字母和數字結尾,能夠包含字母、數字和「-」。名稱最長爲24個字母。

容器組個數(Number of pods 必需) 但願部署的容器組數量。值必須爲整數。

描述(Description 對於應用的描述,將被添加至部署的註釋中,並在應用詳細信息中顯示。

標籤(Labels 應用的默認標籤爲應用的名稱和版本。能夠指定其它的標籤,這些標籤將會被應用至部署、服務、容器組等資源中。

命名空間(Namespace:在同一個物理集羣中,Kubernetes支持多個虛擬集羣。這些虛擬集羣被稱爲命名空間,經過命名空間能夠將資源進行邏輯上的劃分。經過下列菜單能夠選擇已有的命名空間,固然也能夠建立新的命名空間。命名空間的名稱最大的字符數爲63,名詞可使用字母、數字「-」,不能包含大寫字母,同時也不能所有使用數字。

鏡像拉取保密字典(Image Pull Secret 若是Docker容器鏡像是私有的,則有可能須要保密證書。Dashboard經過下拉菜單提供了全部的可用的保密憑證,也容許建立新的保密字典。保密字典名稱必須遵循DNS域名語法,例如:new.image-pull.secret。保密字典的內容必須使用基於base64進行加密的,並在.dockercfg文件中進行指定。保密字典名稱最長不能超過253個字符。

環境變量(Environment variables Kubernetes經過環境變量暴露服務, 能夠建立環境變量或者使用環境變量的值將參數傳遞給命令。環境變量可以被應用用來發現服務,環境變量的值能夠經過¥(VAR_NAME)語法被其它變量引用。

2上傳YAMLJSON文件建立應用

經過編譯工具編寫容器化應用的YAMLJSON文件,在Dashboard用戶界面中經過上傳文件建立和部署應用。

部署步驟簡單總結:

1部署

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

2將Service改成NodePort

kubectl patch svc kubernetes-dashboard -p '{"spec":{"type":"NodePort"}}' -n kube-system

3認證

認證時的帳號必須爲ServiceAccount:被dashboard pod拿來由kubernetes進行認證;

    token:

        1)建立ServiceAccount,根據其管理目標,使用rolebinding或clusterrolebinding綁定至合理role或clusterrole;

        2)獲取到此ServiceAccount的secret,查看secret的詳細信息,其中就有token;

    kubeconfig: 把ServiceAccount的token封裝爲kubeconfig文件

        1)建立ServiceAccount,根據其管理目標,使用rolebinding或clusterrolebinding綁定至合理role或clusterrole;        

        2)kubectl get secret | awk '/^ServiceAccount/{print $1}'

             KUBE_TOKEN=$(kubectl get secret SERVCIEACCOUNT_SERRET_NAME -o jsonpath={.data.token} |base64 -d)

        3)生成kubeconfig文件

            kubectl config set-cluster --kubeconfig=/PATH/TO/SOMEFILE

            kubectl config set-credentials NAME --token=$KUBE_TOKEN --kubeconfig=/PATH/TO/SOMEFILE kubectl config set-context

            kubectl config use-context

相關文章
相關標籤/搜索