欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Dashboard管理Kubernetes集群與API訪問配置

 更新時間:2022年04月01日 11:43:24   作者:癡者工良  
這篇文章介紹了Dashboard管理Kubernetes集群與API訪問配置的方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

Kubectl 命令大全

下面列出了 kubectl 的所有命令以及其縮寫形式,供翻閱查詢。

kubectl 命令格式:

kubectl [command] [type] [Name] [flag]
allevents (ev)podsecuritypolicies (psp)
certificatesigningrequests (csr)horizontalpodautoscalers (hpa)podtemplates
clusterrolebindingsingresses (ing)replicasets (rs)
clusterrolesjobsreplicationcontrollers (rc)
clusters (valid only for federation apiservers)limitranges (limits)resourcequotas (quota)
componentstatuses (cs)namespaces (ns)rolebindings
configmaps (cm)networkpolicies (netpol)roles
controllerrevisionsnodes (no)secrets
cronjobspersistentvolumeclaims (pvc)serviceaccounts (sa)
customresourcedefinition (crd)persistentvolumes (pv)services (svc)
daemonsets (ds)poddisruptionbudgets (pdb)statefulsets
deployments (deploy)podpresetstorageclasses
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)絡默認是 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

復制,填寫到 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為準。

也可以使用證書訪問 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}

鑒權

由于 API-Server 需要一定權限才能訪問,所以實際上用戶使用 kubectl 工具時,也需要權限才能執(zhí)行命令。

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 - 返回用戶可在名字空間內(nèi)執(zhí)行的操作集的審閱。 用戶可以快速匯總自己的訪問權限,或者用于 UI 中的隱藏/顯示動作。

這里只需要了解,不需要深入。

注解

我們可以使用 Kubernetes 注解為對象附加任意的非標識的元數(shù)據(jù),注解使用 annotations 標識??蛻舳顺绦颍ɡ绻ぞ吆蛶欤┠軌颢@取這些元數(shù)據(jù)信息。

我們查看 dashboard 的相關 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

到此這篇關于Dashboard管理Kubernetes集群與API訪問配置的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

最新評論