kubernetes從入門到精通系列15-dashboard

kubernetes從入門到精通系列目錄:


kubernetes從入門到精通系列15-dashboard


它作為 k8s 集群的附件存在,是 kubernetes 官方的項目之一,詳見:https://github.com/kubernetes/dashboard

15.1 部署流程

  • 為 dashboard 提供 ssl 證書
<code># 生成私鑰
(umask 077; openssl genrsa -out dashboard.key 2048)

# 生成一個自簽證書,注意 CN 的值必須要與自己的域名完全一致
openssl req -new -x509 -key dashboard.key -out dashboard.crt -subj "/O=dashboard/CN=k8s.dashboard.com"

# 查看證書
openssl x509 -in dashboard.crt -text -noout
/<code>
  • 下載 dashboard 的清單文件
<code>wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
/<code>
  • 為 dashboard 創建 secret 對象
<code>kubectl -n kube-system create secret generic kubernetes-dashboard-certs --from-file=dashboard.crt=./dashboard.crt --from-file=dashboard.key=./dashboard.key
/<code>
  • 修改 dashboard 清單中 service 的工作模式為 nodeport
<code>sed -i '/targetPort: 8443/a\\ \\ type: NodePort' kubernetes-dashboard.yaml 

/<code>
  • 註釋掉 kubernetes-dashboard.yaml 清單文件中的 Dashboard Secret 這個證書的清單定義
<code># ------------------- Dashboard Secret ------------------- #

#apiVersion: v1
#kind: Secret
#metadata:
# labels:
# k8s-app: kubernetes-dashboard
# name: kubernetes-dashboard-certs
# namespace: kube-system
#type: Opaque

#---
/<code>
  • 部署 dashboard 清單
<code>kubectl apply -f kubernetes-dashboard.yaml
/<code>
  • 取得 service 運行的端口
<code>kubectl get service -n kube-system
/<code>
  • 使用 chrome 訪問 dashboard
<code>https://172.16.100.102:31097/
/<code>

15.2 使用令牌登錄

  • 為 POD 創建一個 serviceaccount 對象,它是 POD 訪問 apiserver 的憑證
<code>kubectl create serviceaccount dashborad-admin -n kube-system
/<code>
  • 創建 clusterrolebinding 將用戶綁定至 cluster-admin 集群管理員(最高權限)
<code>kubectl create clusterrolebinding dashborad-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashborad-admin
/<code>
  • 找到剛才創建的 serviceaccount 對象
<code>kubectl get secret -n kube-system
/<code>
  • 得到 serviceaccount 對象中的 Token
<code>kubectl describe secret -n kube-system dashborad-admin
/<code>

15.3 分級管理

現在需要創建一個只能管理 default 名稱空間的用戶,那麼我們可以用 rolebinding 去綁定 admin 這個 clusterrolue 對象,那麼就獲得了當前名稱空間的管理員權限了。

  • 創建 serviceaccount 登錄
<code>kubectl create serviceaccount def-ns-admin -n default
/<code>
  • 使用 rolebinding 對象,將 default 名稱空間的 def-ns-admin 這個 serviceaccunt 與 admin 這個 clusterrole 綁定
<code>kubectl create rolebinding def-ns-admin --clusterrole=admin --serviceaccount=default:def-ns-admin
/<code>
  • 找到剛才創建的 serviceaccount 對象
<code>kubectl get secret -n kube-system
/<code>
  • 得到 serviceaccount 對象中的 Token
<code>kubectl describe secret def-ns-admin
/<code>

15.4 配置文件認證

與之前基於 SSL 證書的 config 文件不同,這次使用是基於 Token 的 config 文件,可以不用創建證書了,使用已有的 serviceaccount 對象的 token。

  • 設置集群的連接的 ca 機構證書,–kubeconfig 可以指定 kubectl 使用的配置文件位置,默認為用戶家目錄 .kube 目錄中的 config
<code>kubectl config set-cluster k8s-cluster --server=https://172.16.100.101:6443 --certificate-authority=/etc/kubernetes/pki/ca.crt --embed-certs=true --kubeconfig=/tmp/test.conf
/<code>
  • 取得一個已經綁定角色的 serviceaccount 對象的 Token
<code>kubectl describe secret def-ns-admin
/<code>
  • 使用 Token 來創建配置文件中的用戶
<code>kubectl config set-credentials def-ns-admin --token=<token> --kubeconfig=/tmp/test.conf
/<token>/<code>
  • 創建上下文對象,授權 kaliarch 用戶訪問名稱為 kubernetes 的集群
<code>kubectl config set-context def-ns-admin@k8s-cluster --cluster=k8s-cluster --user=def-ns-admin --kubeconfig=/tmp/test.conf
/<code>
  • 切換當前使用的上下文,到授權 kaliarch 到 kubernetes 的上下文上
<code>kubectl config use-context def-ns-admin@k8s-cluster --kubeconfig=/tmp/test.conf
/<code>
  • 複製 /tmp/test.conf 這個文件到 dashboard 中就可以登錄了


分享到:


相關文章: