中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Kubernetes身份認證和授權操作全攻略:上手操作Kubernetes授權

發布時間:2020-07-04 18:07:39 來源:網絡 閱讀:286 作者:RancherLabs 欄目:云計算

這是本系列文章中的第三篇,前兩篇文章分別介紹了Kubernetes訪問控制以及身份認證。本文將通過上手實踐的方式,帶你理解Kubernetes授權這一概念。
?

Kubernetes身份認證和授權操作全攻略:上手操作Kubernetes授權
?
在文章正式開始之前,我們先快速回顧一下我們實操過程中的環境和場景。我們正在處理生產環境中的集群,其中每個部分都與命名空間相關聯。現在,組里新來了一位同事叫Bob,我們在上篇教程中幫助Bob以engineering命名空間管理員的身份加入集群。并且他已經獲得私鑰以及簽名證書來訪問集群。

?
如果你還沒有完成上述操作,請查看上篇教程,運行其中的命令以完成環境設置以及為Bob配置證書。

?

好,我們正式開始本篇教程。

?
現在我們要給Bob授權,以控制屬于engineering命名空間的資源。
?

首先,我們要為kubectl創建一個上下文(context),方便它在不同的環境之間切換。
?

kubectl config set-context eng-context \
    --cluster=minikube \
    --namespace=engineering \
    --user=bob
Context "eng-context" created.

?
上面的命令使用Bob在minikube集群中的憑據創建了一個指向engineering命名空間的新上下文。這會導致在?/ .kube / config文件中添加一個新的部分。
?
Kubernetes身份認證和授權操作全攻略:上手操作Kubernetes授權
?
我們現在在engineering命名空間中創建一個簡單的pod:
?

apiVersion: v1
kind: Pod
metadata:
  name: myapp
  namespace: engineering
  labels:
    app: myapp
spec:
  containers:
  - name: myapp
    image: busybox
    command: ["/bin/sh", "-ec", "while :; do echo '.'; sleep 5 ; done"]

?

 kubectl create -f myapp.yaml
pod/myapp created

?

kubectl get pods -n=engineering
NAME    READY   STATUS    RESTARTS   AGE
myapp   1/1     Running   0          89s

?
雖然您可以作為集群管理員在工程命名空間中創建和操作pod,但Bob甚至無法在同一名稱空間中列出pod。
?

kubectl get pods --namespace engineering --as bob
Error from server (Forbidden): pods is forbidden: User "bob" cannot list resource "pods" in API group

?
為了使得Bob可以在engineering命名空間中訪問資源,我們需要給他授權。這可以通過創建具有適當權限的角色然后將其綁定到用戶Bob來完成。實質上,我們使用的是基于角色訪問控制(RBAC)來允許Bob對engineering命名空間中的某些Kubernetes資源執行特定操作。

?

創建一個名為eng-reader的Kubernetes角色,允許其在engineering命名空間中列出pod。
?

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: engineering 
  name: eng-reader
rules:
- apiGroups: [""] # "" indicates the core API group
  resources: ["pods", "services", "nodes"]
  verbs: ["get", "watch", "list"]

?

kubectl create -f role.yaml
role.rbac.authorization.k8s.io/eng-reader created

?

kubectl get roles --namespace=engineering
NAME         AGE
eng-reader   58s

?
注意,這一角色目前和Bob毫無關聯。我們需要通過角色綁定將角色中指定的權限應用于Bob。
?

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: eng-read-access
  namespace: engineering
subjects:
- kind: User
  name: bob # Name is case sensitive
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role #this must be Role or ClusterRole
  name: eng-reader # this must match the name of the Role or ClusterRole you wish to bind to
  apiGroup: rbac.authorization.k8s.io

?

kubectl create -f role-binding.yaml
rolebinding.rbac.authorization.k8s.io/eng-read-access created

?

kubectl get rolebindings --namespace=engineering
NAME              AGE
eng-read-access   31s

?
讓我們來檢查一下Bob現在是否可以訪問pod。
?

kubectl get pods --namespace engineering --as bob
NAME    READY   STATUS    RESTARTS   AGE
myapp   1/1     Running   0          11m

?
既然他現在已經關聯了eng-reader角色,那么他就獲得了pod列表的權限。
?

此時,Bob在集群中的訪問權限依舊十分有限。他所能做的只是在engineering 命名空間中列出pod。這對Bob幫助不大。他想要檢查集群中的節點數量,但是令他失望的是,他遇到了 forbidden error。
?

kubectl get nodes --as bob
Error from server (Forbidden): nodes is forbidden: User "bob" cannot list resource "nodes" in API group

?
在Kubernetes中角色和角色綁定既可以應用在命名空間層面也可以應用在集群層面。我們現在創建一個集群角色以及一個與Bob關聯的角色綁定,以使他能夠列出節點。
?

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  # "namespace" omitted since ClusterRoles are not namespaced
  name: cluster-node-reader
rules:
- apiGroups: [""]
  resources: ["nodes"]
  verbs: ["get", "watch", "list"]

?

kubectl create -f cluster-role.yaml
clusterrole.rbac.authorization.k8s.io/cluster-node-reader created

?

kubectl get clusterroles cluster-node-reader
NAME                  AGE
cluster-node-reader   49s

?

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: read-cluster-nodes
subjects:
- kind: User
  name: bob # Name is case sensitive
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: cluster-node-reader
  apiGroup: rbac.authorization.k8s.io

?

kubectl create -f cluster-role-binding.yaml
clusterrolebinding.rbac.authorization.k8s.io/read-cluster-nodes created

?

kubectl get clusterrolebindings read-cluster-nodes
NAME                 AGE
read-cluster-nodes   35s

?
現在,Bob已經設置為可以在集群中列出節點。
?

kubectl get nodes --as bob
NAME       STATUS   ROLES    AGE   VERSION
minikube   Ready    master   52m   v1.15.2

?
本篇教程的目的是為了幫助你理解角色以及角色綁定如何在Kubernetes中工作的。在本系列下一篇文章中,我們將來看看service account,保持關注喲~

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

金堂县| 丹巴县| 东方市| 辽阳市| 庐江县| 西城区| 武鸣县| 漾濞| 凤阳县| 棋牌| 靖安县| 石渠县| 定边县| 玛曲县| 应用必备| 孝感市| 金平| 西吉县| 循化| 汤阴县| 平果县| 红河县| 吐鲁番市| 庄浪县| 白银市| 甘德县| 株洲县| 方城县| 天气| 林周县| 舒城县| 闻喜县| 佛冈县| 文水县| 济源市| 昌平区| 弋阳县| 海丰县| 高雄县| 鹿泉市| 本溪市|