Dashboard管理Kubernetes集群與API訪問配置
Kubectl 命令大全
下面列出了 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-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 創(chuàng)建后會在 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
由于其網(wǎng)絡(luò)默認是 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。
在集群內(nèi)網(wǎng)可以通過 443 訪問,在外網(wǎng)可以通過 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
復(fù)制,填寫到 Web UI 中,即可進入控制臺。
RESTful API
我們可以集群中的任意節(jié)點訪問 API-Server ,其端口是 6443。
API 可以使用 Token 和 證書方式 進行認證,我們可以使用上一小節(jié)查詢出來的 token,對 API 進行訪問:
curl https://k8smaster:6443/api/v1/pods -k --header "Authorization: bearer {此處填寫你的token}"
注:使用 -k 可以忽略證書問題;k8smaster 是筆者配置 hosts 的,具體要以你的 主節(jié)點 ip為準(zhǔn)。
也可以使用證書訪問 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,只介紹幾個對調(diào)試有用的 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}
鑒權(quán)
由于 API-Server 需要一定權(quán)限才能訪問,所以實際上用戶使用 kubectl 工具時,也需要權(quán)限才能執(zhí)行命令。
kubectl auth can-i
命令用來確定一個用戶是否能夠訪問 API。
如果要確定當(dāng)前用戶是否有權(quán)限訪問 deployments,可以使用:
kubectl auth can-i create deployments
kubectl auth can-i {命令}
如果要檢查其它用戶是否有權(quán)限,可以使用 --as
:
kubectl auth can-i create deployments --as ddddd
kubectl auth can-i create deployments --as ddddd --namespace kube-system
為了更加方便地獲得權(quán)限,我們可以使用 SelfSubjectAccessReview 這個 API 來獲得權(quán)限信息資源,它將 API 服務(wù)器鑒權(quán)公開給外部服務(wù),其 API 說明文檔地址:
另外還有三個相關(guān)的 API:
SubjectAccessReview
- 對任意用戶的訪問進行評估,而不僅僅是當(dāng)前用戶。 當(dāng)鑒權(quán)決策被委派給 API 服務(wù)器時很有用。例如,kubelet 和擴展 API 服務(wù)器使用 它來確定用戶對自己的 API 的訪問權(quán)限。LocalSubjectAccessReview
- 與SubjectAccessReview
類似,但僅限于特定的 名字空間。SelfSubjectRulesReview
- 返回用戶可在名字空間內(nèi)執(zhí)行的操作集的審閱。 用戶可以快速匯總自己的訪問權(quán)限,或者用于 UI 中的隱藏/顯示動作。
這里只需要了解,不需要深入。
注解
我們可以使用 Kubernetes 注解為對象附加任意的非標(biāo)識的元數(shù)據(jù),注解使用 annotations 標(biāo)識。客戶端程序(例如工具和庫)能夠獲取這些元數(shù)據(jù)信息。
我們查看 dashboard 的相關(guān) annotations :
kubectl describe services -n kubernetes-dashboard
... ... Labels: k8s-app=kubernetes-dashboard Annotations: <none> ... ...
annotations 由 key/value 組成,類似 label,但是 annotations 支持一些特殊字符,可以用作構(gòu)建發(fā)布鏡像時的信息、日志記錄等。
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-
Pod YAML 結(jié)構(gòu)
這是一個簡單的 YAML 文件:
apiVersion: v1 kind: Pod metadata: name: firstpod spec: containers: - image: nginx name: stan
k8s 的 YAML 必須包含四個部分:
- apiVersion:API 組的版本
- kind:創(chuàng)建的對象類型
- metadata:元數(shù)據(jù),name 字段必填
- spec:怎么創(chuàng)建對象,如果是 pod,則 container 必填。
配置
在 $HOME/.kube/config
文件中存儲了 Kubernetes 的配置信息,可以直接打開文件查看,也可以通過 kubectl config view
查看(只顯示部分信息)。
前面我們訪問 API 時,使用了 token,現(xiàn)在我們可以通過這個 config,來創(chuàng)建證書文件,通過證書訪問。。
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
意思就是三個重要的 密鑰數(shù)據(jù),這里為了方便,分別使用 client、key、auth 三個變量存儲查詢的數(shù)據(jù)。
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)
創(chuàng)建證書文件:
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
到此這篇關(guān)于Dashboard管理Kubernetes集群與API訪問配置的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
CentOS 出現(xiàn)no space left on device錯誤解決辦法
這篇文章主要介紹了CentOS 出現(xiàn)no space left on device錯誤解決辦法的相關(guān)資料,需要的朋友可以參考下2017-04-04Docker與K8s關(guān)系介紹不會Docker也可以使用K8s
想學(xué)K8s,必須得先學(xué)會Docker嗎?這是很多網(wǎng)友在開始有想法想要學(xué)?K8s的時候都會冒出來的想法,要回答這個問題,我們需要先搞清楚?Docker?和?K8s?他們的角色是什么,相互之間是什么關(guān)系2022-06-06Kubernetes kubectl中Pod創(chuàng)建流程源碼解析
這篇文章主要為大家介紹了Kubernetes kubectl中Pod創(chuàng)建流程源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11Kubernetes(K8S)容器集群管理環(huán)境完整部署詳細教程-上篇
本系列文章主要介紹了Kubernetes(K8S)容器集群管理環(huán)境完整部署的詳細教程,分為上中下三篇文章,此為上篇,需要的朋友可以參考下2022-01-01Kubernetes ApiServer三大server權(quán)限與數(shù)據(jù)存儲解析
這篇文章主要為大家介紹了Kubernetes ApiServer三大server權(quán)限與數(shù)據(jù)存儲解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11使用kubeadm命令行工具創(chuàng)建kubernetes集群
這篇文章介紹了使用kubeadm命令行工具創(chuàng)建kubernetes集群的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03Kubernetes(K8S)容器集群管理環(huán)境完整部署詳細教程-下篇
本系列文章主要介紹了Kubernetes(K8S)容器集群管理環(huán)境完整部署的詳細教程,分為上中下三篇文章,此為中篇,主要講解了K8S部署metrics-server插件,K8S部署集群dashboard插件,K8S部署集群coredns插件,K8S部署kube-state-metrics插件,K8S部署harbor私有倉庫2022-01-01