您好,登錄后才能下訂單哦!
本篇內容主要講解“Dashboard怎么管理Kubernetes集群與API訪問配置”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Dashboard怎么管理Kubernetes集群與API訪問配置”吧!
下面列出了 kubectl 的所有命令以及其縮寫形式,供翻閱查詢。
kubectl 命令格式:
kubectl [command] [type] [Name] [flag]
all | events (ev) | podsecuritypolicies (psp) |
---|---|---|
certificatesigningrequests (csr) | horizontalpodautoscalers (hpa) | podtemplates |
clusterrolebindings | ingresses (ing) | replicasets (rs) |
clusterroles | jobs | replicationcontrollers (rc) |
clusters (valid only for federation apiservers) | limitranges (limits) | resourcequotas (quota) |
componentstatuses (cs) | namespaces (ns) | rolebindings |
configmaps (cm) | networkpolicies (netpol) | roles |
controllerrevisions | nodes (no) | secrets |
cronjobs | persistentvolumeclaims (pvc) | serviceaccounts (sa) |
customresourcedefinition (crd) | persistentvolumes (pv) | services (svc) |
daemonsets (ds) | poddisruptionbudgets (pdb) | statefulsets |
deployments (deploy) | podpreset | storageclasses |
endpoints (ep) | pods (po) |
Kubernetes-Dashboard 是一個 管理 Kubernetes 集群的 Web UI,跟 kubectl 一樣,其后端是 API-Server,使用在線的 YAML 文件部署 Kubernetes-Dashboard :
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.2.0/aio/deploy/recommended.yaml
dashboard 創建后會在 kubernetes-dashboard 命名空間中。
root@instance-1:~# kubectl get pods --namespace=kubernetes-dashboard NAME READY STATUS RESTARTS AGE dashboard-metrics-scraper-856586f554-4nd9v 1/1 Running 0 9d kubernetes-dashboard-78c79f97b4-288js 1/1 Running 0 9d root@instance-1:~# kubectl get services --namespace=kubernetes-dashboard NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE dashboard-metrics-scraper ClusterIP 10.98.50.123 <none> 8000/TCP 9d kubernetes-dashboard NodePort 10.111.44.44 <none> 443/TCP 9d
由于其網絡默認是 NodePort 的方式,沒有配置外界打開,所以為了能夠被外界訪問,可以修改其 service:
kubectl edit service kubernetes-dashboard --namespace=kubernetes-dashboard
ports: - nodePort: 30633 port: 443 protocol: TCP targetPort: 8443 selector: k8s-app: kubernetes-dashboard sessionAffinity: None type: NodePort
或者把 type 修改為 LoadBalancer。
在集群內網可以通過 443 訪問,在外網可以通過 30633 訪問,訪問方式是 https。
可以看到,訪問方式有 Token 和配置文件方式(kubeconfing),這兩者后面再講。
通過下面這條命令我們可以查看 Token:
kubectl -n kube-system describe $(kubectl -n kube-system get secret -n kube-system -o name | grep namespace) | grep token
復制,填寫到 Web UI 中,即可進入控制臺。
我們可以集群中的任意節點訪問 API-Server ,其端口是 6443。
API 可以使用 Token 和 證書方式 進行認證,我們可以使用上一小節查詢出來的 token,對 API 進行訪問:
curl https://k8smaster:6443/api/v1/pods -k --header "Authorization: bearer {此處填寫你的token}"
注:使用 -k 可以忽略證書問題;k8smaster 是筆者配置 hosts 的,具體要以你的 主節點 ip為準。
也可以使用證書訪問 API,其格式如下:
curl --cert /tmp/client.pem --key /tmp/client-key.pem \ --cacert /tmp/ca.pem -v -XGET \ https://k8smaster:6443/api/v1/pods
這里不多介紹 k8s 的 API,只介紹幾個對調試有用的 API。
GET /api/v1/namespaces/{namespace}/pods/{name}/exec GET /api/v1/namespaces/{namespace}/pods/{name}/log GET /api/v1/watch/namespaces/{namespace}/pods/{name}
由于 API-Server 需要一定權限才能訪問,所以實際上用戶使用 kubectl 工具時,也需要權限才能執行命令。
kubectl auth can-i
命令用來確定一個用戶是否能夠訪問 API。
如果要確定當前用戶是否有權限訪問 deployments,可以使用:
kubectl auth can-i create deployments
kubectl auth can-i {命令}
如果要檢查其它用戶是否有權限,可以使用 --as
:
kubectl auth can-i create deployments --as ddddd
kubectl auth can-i create deployments --as ddddd --namespace kube-system
為了更加方便地獲得權限,我們可以使用 SelfSubjectAccessReview 這個 API 來獲得權限信息資源,它將 API 服務器鑒權公開給外部服務,其 API 說明文檔地址:
https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.21/#selfsubjectaccessreview-v1-authorization-k8s-io
另外還有三個相關的 API:
SubjectAccessReview
- 對任意用戶的訪問進行評估,而不僅僅是當前用戶。 當鑒權決策被委派給 API 服務器時很有用。例如,kubelet 和擴展 API 服務器使用 它來確定用戶對自己的 API 的訪問權限。
LocalSubjectAccessReview
- 與 SubjectAccessReview
類似,但僅限于特定的 名字空間。
SelfSubjectRulesReview
- 返回用戶可在名字空間內執行的操作集的審閱。 用戶可以快速匯總自己的訪問權限,或者用于 UI 中的隱藏/顯示動作。
這里只需要了解,不需要深入。
我們可以使用 Kubernetes 注解為對象附加任意的非標識的元數據,注解使用 annotations 標識。客戶端程序(例如工具和庫)能夠獲取這些元數據信息。
我們查看 dashboard 的相關 annotations :
kubectl describe services -n kubernetes-dashboard
... ... Labels: k8s-app=kubernetes-dashboard Annotations: <none> ... ...
annotations 由 key/value 組成,類似 label,但是 annotations 支持一些特殊字符,可以用作構建發布鏡像時的信息、日志記錄等。
kubectl annotate service kubernetes-dashboard -n kubernetes-dashboard description='my test'
key=description value=my test
重新查看 describe,可以看到:
Annotations: description: my test
如果要覆蓋 key 的值,需要加上 --overwrite
。
如果要刪除一個 key:
kubectl annotate service kubernetes-dashboard description-
這是一個簡單的 YAML 文件:
apiVersion: v1 kind: Pod metadata: name: firstpod spec: containers: - image: nginx name: stan
k8s 的 YAML 必須包含四個部分:
apiVersion:API 組的版本
kind:創建的對象類型
metadata:元數據,name 字段必填
spec:怎么創建對象,如果是 pod,則 container 必填。
在 $HOME/.kube/config
文件中存儲了 Kubernetes 的配置信息,可以直接打開文件查看,也可以通過 kubectl config view
查看(只顯示部分信息)。
前面我們訪問 API 時,使用了 token,現在我們可以通過這個 config,來創建證書文件,通過證書訪問。。
client 密鑰,就在這個 config 文件的 client-certificate-data
字段中存儲。
grep client-cert $HOME/.kube/config |cut -d" " -f 6
key,在 client-key-data 字段中存儲:
grep client-key-data $HOME/.kube/config |cut -d " " -f 6
API-Server 的公鑰(auth),就在 certificate-authority-data 字段中存儲:
grep certificate-authority-data $HOME/.kube/config |cut -d " " -f 6
意思就是三個重要的 密鑰數據,這里為了方便,分別使用 client、key、auth 三個變量存儲查詢的數據。
export client=(grep client-cert $HOME/.kube/config |cut -d" " -f 6) export key=(grep client-key-data $HOME/.kube/config |cut -d " " -f 6) export auth=(grep certificate-authority-data $HOME/.kube/config |cut -d " " -f 6)
創建證書文件:
echo $client | base64 -d - > ./client.pems echo $key | base64 -d - > ./client-key.pem echo $auth | base64 -d - > ./ca.pem
然后訪問的時候就可以通過證書安全地訪問 API-Server:
curl --cert ./client.pem --key ./client-key.pem --cacert ./ca.pem https://k8smaster:6443/api/v1/pod
到此,相信大家對“Dashboard怎么管理Kubernetes集群與API訪問配置”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。