日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Kubernetes_授权认证_RBAC_静态Pod网关apiserver底层的RBAC授权

發(fā)布時(shí)間:2024/5/8 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Kubernetes_授权认证_RBAC_静态Pod网关apiserver底层的RBAC授权 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

系列文章目錄

文章目錄

  • 系列文章目錄
  • 前言
  • 一、RBAC整體架構(gòu)圖
  • 二、RBAC授權(quán)規(guī)則
  • 三、Kubernetes RBAC實(shí)踐
    • 3.1 實(shí)踐:User --> Rolebinding --> Role
    • 3.2 實(shí)踐:User --> ClusterRolebinding --> ClusterRole
    • 3.3 實(shí)踐:User --> Rolebinding --> Clusterrole
  • 總結(jié)


前言

RBAC(Role-Based Access Control,基于角色的訪(fǎng)問(wèn)控制)是一種新型、靈活且使用廣泛的訪(fǎng)問(wèn)控制機(jī)制,它將權(quán)限授予“角色”(role)之上,這一點(diǎn)有別于傳統(tǒng)訪(fǎng)問(wèn)機(jī)制中將權(quán)限直接賦予使用者的方式。

在RBAC中,用戶(hù)(User)就是一個(gè)可以獨(dú)立訪(fǎng)問(wèn)計(jì)算機(jī)系統(tǒng)中的數(shù)據(jù)或者用數(shù)據(jù)表示的其他資源的主體(Subject)。角色是指一個(gè)組織或任務(wù)中的工作或者位置,它代表一種權(quán)利、資格和責(zé)任。許可(Permission)就是允許對(duì)一個(gè)或多個(gè)客體(Object)執(zhí)行的操作。一個(gè)用戶(hù)可以經(jīng)授權(quán)而擁有多個(gè)角色,一個(gè)角色可由多個(gè)用戶(hù)構(gòu)成;每個(gè)角色可擁有多種許可,每個(gè)許可也可授權(quán)給多個(gè)不同的角色。每個(gè)操作可施加于多個(gè)客體(受控對(duì)象),每個(gè)客體也可以接受多個(gè)操作。

小結(jié):RBAC簡(jiǎn)單來(lái)說(shuō)就是讓一個(gè)用戶(hù)(Users)扮演一個(gè)角色(Role),角色擁有權(quán)限,讓用戶(hù)綁定該角色;隨后在授權(quán)機(jī)制中,只需要將權(quán)限授權(quán)給某個(gè)角色,此時(shí)用戶(hù)將獲取對(duì)應(yīng)角色的權(quán)限,從而實(shí)現(xiàn)角色的訪(fǎng)問(wèn)控制。

一、RBAC整體架構(gòu)圖

RBAC(Role Based Access Control):基于角色訪(fǎng)問(wèn)控制授權(quán)。
允許管理員通過(guò)Kubernetes API動(dòng)態(tài)配置授權(quán)策略。RBAC就是用戶(hù)通過(guò)角色與權(quán)限進(jìn)行關(guān)聯(lián)。

RBAC只有授權(quán),沒(méi)有拒絕授權(quán),所以只需要定義允許該用戶(hù)做什么即可。
RBAC包括四種類(lèi)型:Role、ClusterRole、RoleBinding、ClusterRoleBinding。

RBAC的三個(gè)基本概念:
Subject:被作用者,它表示k8s中的三類(lèi)主體, user, group, serviceAccount
Role:角色,它其實(shí)是一組規(guī)則,定義了一組對(duì) Kubernetes API 對(duì)象的操作權(quán)限。
RoleBinding:定義了“被作用者”和“角色”的綁定關(guān)系。

Role 和 ClusterRole
Role是一系列的權(quán)限的集合,Role只能授予單個(gè)namespace 中資源的訪(fǎng)問(wèn)權(quán)限。
ClusterRole 跟 Role 類(lèi)似,但是可以在集群中全局使用。

[root@m ~]# kubectl get rolebinding -o wide -A
NAMESPACE NAME ROLE AGE USERS GROUPS SERVICEACCOUNTS
命名空間 binding綁定名稱(chēng) 角色 binding已存活時(shí)間 用戶(hù)(三種user之一) 用戶(hù)組(三種user之一) 服務(wù)賬號(hào)(三種user之一)

[root@m ~]# kubectl get clusterrolebinding -o wide -A
NAME ROLE AGE USERS GROUPS SERVICEACCOUNTS
binding綁定名稱(chēng) 角色 binding已存活時(shí)間 用戶(hù)(三種user之一) 用戶(hù)組(三種user之一) 服務(wù)賬號(hào)(三種user之一)

因?yàn)閡ser有三種,所以使用 get binding 命令,后面三列都是表示user的 USERS GROUPS SERVICEACCOUNTS

rbac 一頭是role,用來(lái)提供權(quán)限;一頭是user,包括三種,其中 user/userGroup 用來(lái)構(gòu)成了 userAccount 用戶(hù)賬號(hào)體系,serviceAccount 用來(lái)構(gòu)成了 serviceAccount 賬號(hào)體系,所以,學(xué)rbac就離不開(kāi) userAccount 和 serviceAccount。
另外注意,在這個(gè)過(guò)程中,屬于 kind 類(lèi)資源的 role clusterRole rolebinding clusterRoleBinding serviceAccount
user和userGroup并不屬于 kind 類(lèi)資源

二、RBAC授權(quán)規(guī)則

RBAC授權(quán)規(guī)則是通過(guò)四種資源來(lái)進(jìn)行配置的,他們可以分為兩個(gè)組:

(1) Role(角色)和ClusterRole(集群角色),它們指定了在資源上可以執(zhí)行哪些動(dòng)作。
(2) RoleBinding(角色綁定)和ClusterRoleBinding(集群角色綁定),它們將上述角色綁定到特定的用戶(hù)、組或ServiceAccounts上。

角色定義了可以做什么操作,而綁定定義了誰(shuí)可以做這些操作,如下圖所示:

綁定關(guān)系:

角色和集群角色,或者角色綁定和集群角色綁定之間的區(qū)別在于角色和角色綁定是名稱(chēng)空間級(jí)別,而集群角色和集群角色綁定是集群級(jí)別的資源。

(1) RoleBind–Role:在kubernetes授權(quán)機(jī)制中,采用RBAC的方式進(jìn)行授權(quán),把對(duì)象的操作權(quán)限定義到一個(gè)角色當(dāng)中,而將用戶(hù)綁定到該角色,從而使得用戶(hù)得到對(duì)應(yīng)角色的權(quán)限。比如下圖,當(dāng)用戶(hù)(User1)綁定到Role角色當(dāng)中,User1就獲取了對(duì)應(yīng)的NamespaceA的操作權(quán)限,但是對(duì)于NamespaceB是沒(méi)有權(quán)限進(jìn)行操作的。如get,list等操作。

(2) ClusterRoleBind–ClusterRole:集群級(jí)別的授權(quán),定義一個(gè)集群角色(ClusterRole),對(duì)集群內(nèi)的所有資源都有可操作的權(quán)限,如下圖(只看藍(lán)色的線(xiàn)連接),當(dāng)用戶(hù)(User1)通過(guò)ClusterRolebinding到ClusterRole,從而User1遍擁有了集群的操作權(quán)限。

(3) RoleBind-ClusterRole:這種方式進(jìn)行綁定時(shí),用戶(hù)僅能獲取當(dāng)前名稱(chēng)空間的所有權(quán)限。為什么這么繞呢?? 舉例有10個(gè)名稱(chēng)空間,每個(gè)名稱(chēng)空間都需要一個(gè)管理員,而每個(gè)管理員的權(quán)限是一致的。那么此時(shí)需要去定義這樣的管理員,使用RoleBinding就需要?jiǎng)?chuàng)建10個(gè)Role,這樣顯得更加繁重。為了當(dāng)使用RoleBinding去綁定一個(gè)ClusterRole時(shí),該User僅僅擁有對(duì)當(dāng)前名稱(chēng)空間的集群操作權(quán)限,也就是此時(shí)只需要?jiǎng)?chuàng)建一個(gè)ClusterRole就解決了以上的需求。比如下圖中的User2和User3用戶(hù)雖然綁定了ClusterRole,但是他們也只有自己的名稱(chēng)空間NamespaceB中權(quán)限。

三、Kubernetes RBAC實(shí)踐

這里由于要切換用戶(hù),使用root用戶(hù)同時(shí)不停的在kubernetes-admin用戶(hù)和上面創(chuàng)建的kube-user1用戶(hù)之間進(jìn)行測(cè)試。故這里創(chuàng)建一個(gè)測(cè)試用戶(hù)打開(kāi)另外一個(gè)終端進(jìn)行測(cè)試。

[root@k8s-master ~]# useradd ik8s [root@k8s-master ~]# cp -rp .kube/ /home/ik8s/ [root@k8s-master ~]# chown -R ik8s.ik8s /home/ik8s/ [root@k8s-master ~]# su - ik8s [ik8s@k8s-master ~]$ kubectl config use-context kube-user1@kubernetes Switched to context "kube-user1@kubernetes". [ik8s@k8s-master ~]$ kubectl config view ...... current-context: kube-user1@kubernetes #這里可以看到當(dāng)前已經(jīng)切換到kube-user1用戶(hù)了 ...... [ik8s@k8s-master ~]$ kubectl get pods #測(cè)試kube-user1用戶(hù)的權(quán)限,可以看出目前它沒(méi)有任何權(quán)限 Error from server (Forbidden): pods is forbidden: User "kube-user1" cannot list resource "pods" in API group "" in the namespace "default"

3.1 實(shí)踐:User --> Rolebinding --> Role

1)角色(Role)創(chuàng)建。(說(shuō)明:一個(gè)Role對(duì)象只能用于授予對(duì)某一單一名稱(chēng)空間中資源的訪(fǎng)問(wèn)權(quán)限)

[root@k8s-master ~]# kubectl create role -h #查看role創(chuàng)建幫助 ...... Usage:kubectl create role NAME --verb=verb --resource=resource.group/subresource [--resource-name=resourcename] [--dry-run] [options] --verb #指定權(quán)限 --resource #指定資源或者資源組 --dry-run #干跑模式并不會(huì)創(chuàng)建[root@k8s-master ~]# kubectl create role pods-reader --verb=get,list,watch --resource=pods --dry-run -o yaml #干跑模式查看role的定義格式 apiVersion: rbac.authorization.k8s.io/v1 kind: Role #資源類(lèi)型 metadata:creationTimestamp: nullname: pods-reader #資源名稱(chēng) rules: - apiGroups: #定義對(duì)哪些api組內(nèi)的資源可以進(jìn)行操作- ""resources: #定義對(duì)哪些資源可以進(jìn)行操作- podsverbs: #定義操作的權(quán)限- get- list- watch[root@k8s-master ~]# cd manfests/ [root@k8s-master manfests]# kubectl create role pods-reader --verb=get,list,watch --resource=pods --dry-run -o yaml > role-demo.yaml[root@k8s-master manfests]# vim role-demo.yaml #編寫(xiě)資源清單文件 apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata:name: pods-readernamespace: default rules: - apiGroups:- ""resources:- podsverbs:- get- list- watch [root@k8s-master manfests]# kubectl apply -f role-demo.yaml role.rbac.authorization.k8s.io/pods-reader created [root@k8s-master manfests]# kubectl get role NAME AGE pods-reader 4s [root@k8s-master manfests]# kubectl describe role/pods-reader Name: pods-reader Labels: <none> Annotations: kubectl.kubernetes.io/last-applied-configuration:{"apiVersion":"rbac.authorization.k8s.io/v1","kind":"Role","metadata":{"annotations":{},"name":"pods-reader","namespace":"default"},"rules... PolicyRule:Resources Non-Resource URLs Resource Names Verbs--------- ----------------- -------------- -----pods [] [] [get list watch] #這里表示當(dāng)前定義了pods-reader這個(gè)角色對(duì)pods資源擁有g(shù)et、list、watch的權(quán)限。

2)角色的綁定。(RoleBinding可以引用在同一名稱(chēng)空間定義的Role對(duì)象)

[root@k8s-master manfests]# kubectl create rolebinding -h #查看rolebinding創(chuàng)建幫助 ...... Usage:kubectl create rolebinding NAME --clusterrole=NAME|--role=NAME [--user=username] [--group=groupname] [--serviceaccount=namespace:serviceaccountname] [--dry-run] [options] --role #指定role的名字 --user #指定哪個(gè)用戶(hù)[root@k8s-master manfests]# kubectl create rolebinding kube-user1-read-pods --role=pods-reader --user=kube-user1 --dry-run -o yaml #干跑模式查看rolebinding的定義格式 apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding #資源類(lèi)型 metadata:creationTimestamp: nullname: kube-user1-read-pods #資源名稱(chēng) roleRef: #指定roleapiGroup: rbac.authorization.k8s.iokind: Rolename: pods-reader subjects: #指定user - apiGroup: rbac.authorization.k8s.iokind: Username: kube-user1[root@k8s-master manfests]# kubectl create rolebinding kube-user1-read-pods --role=pods-reader --user=kube-user1 --dry-run -o yaml > rolebinding-demo.yaml [root@k8s-master manfests]# vim rolebinding-demo.yaml #編輯資源清單文件 apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata:name: kube-user1-read-pods roleRef:apiGroup: rbac.authorization.k8s.iokind: Rolename: pods-reader subjects: - apiGroup: rbac.authorization.k8s.iokind: Username: kube-user1[root@k8s-master manfests]# kubectl apply -f rolebinding-demo.yaml rolebinding.rbac.authorization.k8s.io/kube-user1-read-pods created [root@k8s-master manfests]# kubectl get rolebinding NAME AGE kube-user1-read-pods 9s [root@k8s-master manfests]# kubectl describe rolebinding kube-user1-read-pods #查看角色綁定的信息,這里可以看到user kube-user1綁定到了pods-reader這個(gè)角色上。 Name: kube-user1-read-pods Labels: <none> Annotations: kubectl.kubernetes.io/last-applied-configuration:{"apiVersion":"rbac.authorization.k8s.io/v1","kind":"RoleBinding","metadata":{"annotations":{},"name":"kube-user1-read-pods","namespace":"... Role:Kind: RoleName: pods-reader Subjects:Kind Name Namespace---- ---- ---------User kube-user1

3)權(quán)限測(cè)試

這時(shí)候我們使用kube-user1用戶(hù)進(jìn)行測(cè)試

[ik8s@k8s-master ~]$ kubectl config use-context kube-user1@kubernetes #如果沒(méi)有切換到該kube-user1用戶(hù),通過(guò)kubectl config use-context進(jìn)行切換[ik8s@k8s-master ~]$ kubectl get pods #在default名稱(chēng)空間獲取pods信息 NAME READY STATUS RESTARTS AGE nginx-statefulset-0 1/1 Running 0 3d nginx-statefulset-1 1/1 Running 0 3d nginx-statefulset-2 1/1 Running 0 3d nginx-statefulset-3 1/1 Running 0 3d pod-sa-demo 1/1 Running 0 27h[ik8s@k8s-master ~]$ kubectl get pods -n kube-system #測(cè)試獲取kube-system名稱(chēng)空間中的pods Error from server (Forbidden): pods is forbidden: User "kube-user1" cannot list resource "pods" in API group "" in the namespace "kube-system"

從上面的操作可以看出,role的定義和綁定,僅作用于當(dāng)前名稱(chēng)空間,在獲取別的名稱(chēng)空間比如kube-system名稱(chēng)空間時(shí),一樣會(huì)出現(xiàn)Forbidden。

3.2 實(shí)踐:User --> ClusterRolebinding --> ClusterRole

1)ClusterRole定義

ClusterRole資源對(duì)象可以授予與Role資源對(duì)象相同的權(quán)限,但由于它們屬于集群范圍的對(duì)象,也可以使用它們授予對(duì)以下幾種資源的訪(fǎng)問(wèn)權(quán)限:

a. 集群范圍資源(例如節(jié)點(diǎn),即Node)
b. 非資源類(lèi)型endpoint(例如/api、/healthz等。)
c. 跨所有名稱(chēng)空間的名稱(chēng)空間資源(例如pod,運(yùn)行kubectl get pods --all-namespaces來(lái)查詢(xún)集群中所有的pod)

[root@k8s-master manfests]# kubectl create clusterrole -h #查看clusterrole創(chuàng)建幫助 ...... Usage:kubectl create clusterrole NAME --verb=verb --resource=resource.group [--resource-name=resourcename] [--dry-run] [options] --verb #指定權(quán)限 --resource #指定資源或者資源組[root@k8s-master manfests]# kubectl create clusterrole cluster-reader --verb=get,list,watch --resource=pods --dry-run -o yaml #干跑模式查看clusterrole的定義格式 apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata:creationTimestamp: nullname: cluster-reader rules: - apiGroups:- ""resources:- podsverbs:- get- list- watch[root@k8s-master manfests]# kubectl create clusterrole cluster-reader --verb=get,list,watch --resource=pods --dry-run -o yaml > clusterrole-demo.yaml [root@k8s-master manfests]# vim clusterrole-demo.yaml #編輯資源清單 apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata:name: cluster-reader rules: - apiGroups:- ""resources:- podsverbs:- get- list- watch[root@k8s-master manfests]# kubectl apply -f clusterrole-demo.yaml #創(chuàng)建clusterrole clusterrole.rbac.authorization.k8s.io/cluster-reader created [root@k8s-master manfests]# kubectl get clusterrole |grep "cluster-reader" cluster-reader 19s [root@k8s-master manfests]# kubectl describe clusterrole/cluster-reader Name: cluster-reader Labels: <none> Annotations: kubectl.kubernetes.io/last-applied-configuration:{"apiVersion":"rbac.authorization.k8s.io/v1","kind":"ClusterRole","metadata":{"annotations":{},"name":"cluster-reader"},"rules":[{"apiGrou... PolicyRule:Resources Non-Resource URLs Resource Names Verbs--------- ----------------- -------------- -----pods [] [] [get list watch]

2)ClusterRoleBinding定義

#這里還是使用kube-user1用戶(hù),所以先將上面的角色綁定信息刪除 [root@k8s-master manfests]# kubectl get rolebinding #查看角色綁定信息 NAME AGE kube-user1-read-pods 27m [root@k8s-master manfests]# kubectl delete rolebinding kube-user1-read-pods #刪除前面的綁定 rolebinding.rbac.authorization.k8s.io "kube-user1-read-pods" delete [ik8s@k8s-master ~]$ kubectl get pods #刪除后再用kube-user1用戶(hù)獲取pods資源信息,就立馬出現(xiàn)Forbidden了 Error from server (Forbidden): pods is forbidden: User "kube-user1" cannot list resource "pods" in API group "" in the namespace "default"[root@k8s-master manfests]# kubectl create clusterrolebinding -h Usage:kubectl create clusterrolebinding NAME --clusterrole=NAME [--user=username] [--group=groupname] [--serviceaccount=namespace:serviceaccountname] [--dry-run] [options] --clusterrole #指定clusterrole --user #指定用戶(hù)[root@k8s-master manfests]# kubectl create clusterrolebinding kube-user1-read-all-pods --clusterrole=cluster-reader --user=kube-user1 --dry-run -o yaml apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata:creationTimestamp: nullname: kube-user1-read-all-pods roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-reader subjects: - apiGroup: rbac.authorization.k8s.iokind: Username: kube-user1[root@k8s-master manfests]# kubectl create clusterrolebinding kube-user1-read-all-pods --clusterrole=cluster-reader --user=kube-user1 --dry-run -o yaml > clusterrolebinding-demo.yaml [root@k8s-master manfests]# vim clusterrolebinding-demo.yaml #編輯資源清單文件 cat clusterrolebinding-demo.yaml apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata:name: kube-user1-read-all-pods roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-reader subjects: - apiGroup: rbac.authorization.k8s.iokind: Username: kube-user1[root@k8s-master manfests]# kubectl apply -f clusterrolebinding-demo.yaml #創(chuàng)建clusterrolebinding clusterrolebinding.rbac.authorization.k8s.io/kube-user1-read-all-pods created [root@k8s-master manfests]# kubectl get clusterrolebinding/kube-user1-read-all-pods NAME AGE kube-user1-read-all-pods 25s [root@k8s-master manfests]# kubectl describe clusterrolebinding/kube-user1-read-all-pods #查看clusterrolebinding資源kube-user1-read-all-pods詳細(xì)信息,可以看到kube-user1用戶(hù)已經(jīng)綁定到clusterrole資源cluster-reader上了。 Name: kube-user1-read-all-pods Labels: <none> Annotations: kubectl.kubernetes.io/last-applied-configuration:{"apiVersion":"rbac.authorization.k8s.io/v1beta1","kind":"ClusterRoleBinding","metadata":{"annotations":{},"name":"kube-user1-read-all-pod... Role:Kind: ClusterRoleName: cluster-reader Subjects:Kind Name Namespace---- ---- ---------User kube-user1

3)權(quán)限測(cè)試

[ik8s@k8s-master ~]$ kubectl get pods #角色綁定后再次獲取pods信息,已經(jīng)可以正常查看 NAME READY STATUS RESTARTS AGE nginx-statefulset-0 1/1 Running 0 3d1h nginx-statefulset-1 1/1 Running 0 3d1h nginx-statefulset-2 1/1 Running 0 3d1h nginx-statefulset-3 1/1 Running 0 3d1h pod-sa-demo 1/1 Running 0 28h[ik8s@k8s-master ~]$ kubectl get pods -n kube-system #切換名稱(chēng)空間也是可以查看的 NAME READY STATUS RESTARTS AGE coredns-bccdc95cf-9gsn8 1/1 Running 0 8d coredns-bccdc95cf-x7m8g 1/1 Running 0 8d etcd-k8s-master 1/1 Running 0 8d kube-apiserver-k8s-master 1/1 Running 0 8d kube-controller-manager-k8s-master 1/1 Running 0 8d kube-flannel-ds-amd64-gg55s 1/1 Running 0 8d kube-flannel-ds-amd64-ssr7j 1/1 Running 5 8d kube-flannel-ds-amd64-w6f9h 1/1 Running 4 8d kube-proxy-77pbc 1/1 Running 3 8d kube-proxy-qs655 1/1 Running 3 8d kube-proxy-xffq4 1/1 Running 0 8d kube-scheduler-k8s-master 1/1 Running 0 8d[ik8s@k8s-master ~]$ kubectl delete pods/pod-sa-demo #在進(jìn)行刪除pod測(cè)試時(shí),還是會(huì)報(bào)Forbidden,這是因?yàn)樵谑跈?quán)時(shí)就沒(méi)授予delete權(quán)限的。 Error from server (Forbidden): pods "pod-sa-demo" is forbidden: User "kube-user1" cannot delete resource "pods" in API group "" in the namespace "default"

從上面的操作可以看出,clusterrole的定義和clusterrolebinding的綁定,可以獲取到集群內(nèi)所有資源的對(duì)應(yīng)權(quán)限。

3.3 實(shí)踐:User --> Rolebinding --> Clusterrole

將用戶(hù)kube-user1通過(guò)角色綁定(RoleBinding)到集群角色cluster-reader當(dāng)中,此時(shí)kube-user1僅作用于當(dāng)前名稱(chēng)空間的所有pods資源的權(quán)限。

1)綁定

#首先刪除上面的clusterrolebinding [root@k8s-master manfests]# kubectl delete clusterrolebinding kube-user1-read-all-pods clusterrolebinding.rbac.authorization.k8s.io "kube-user1-read-all-pods" deleted[root@k8s-master manfests]# kubectl create rolebinding kube-user1-read-pods --clusterrole=cluster-reader --user=kube-user1 --dry-run -o yaml apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata:creationTimestamp: nullname: kube-user1-read-pods roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-reader subjects: - apiGroup: rbac.authorization.k8s.iokind: Username: kube-user1[root@k8s-master manfests]# kubectl create rolebinding kube-user1-read-pods --clusterrole=cluster-reader --user=kube-user1 --dry-run -o yaml > rolebinding-clusterrole-demo.yaml [root@k8s-master manfests]# vim rolebinding-clusterrole-demo.yaml #編輯資源清單文件 apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata:name: kube-user1-read-pods roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-reader subjects: - apiGroup: rbac.authorization.k8s.iokind: Username: kube-user1[root@k8s-master manfests]# kubectl apply -f rolebinding-clusterrole-demo.yaml rolebinding.rbac.authorization.k8s.io/kube-user1-read-pods created [root@k8s-master manfests]# kubectl get rolebinding kube-user1-read-pods NAME AGE kube-user1-read-pods 32s [root@k8s-master manfests]# kubectl describe rolebinding kube-user1-read-pods Name: kube-user1-read-pods Labels: <none> Annotations: kubectl.kubernetes.io/last-applied-configuration:{"apiVersion":"rbac.authorization.k8s.io/v1","kind":"RoleBinding","metadata":{"annotations":{},"name":"kube-user1-read-pods","namespace":"... Role:Kind: ClusterRoleName: cluster-reader Subjects:Kind Name Namespace---- ---- ---------User kube-user1

2)權(quán)限測(cè)試

[ik8s@k8s-master ~]$ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-statefulset-0 1/1 Running 0 3d1h nginx-statefulset-1 1/1 Running 0 3d1h nginx-statefulset-2 1/1 Running 0 3d1h nginx-statefulset-3 1/1 Running 0 3d1h pod-sa-demo 1/1 Running 0 28h[ik8s@k8s-master ~]$ kubectl get pods -n kube-system Error from server (Forbidden): pods is forbidden: User "kube-user1" cannot list resource "pods" in API group "" in the namespace "kube-system"

從上面的操作可以看出,角色綁定(Rolebinding)和集群角色(ClusterRole)綁定后,用戶(hù)只擁有自己當(dāng)前名稱(chēng)空間的對(duì)應(yīng)的權(quán)限。


總結(jié)

本文介紹了 默認(rèn)的ServiceAccount 和 自定義ServiceAccount ,默認(rèn)的kubeconfig文件和自建證書(shū),rbac 基于角色的訪(fǎng)問(wèn)控制。

工作中,操作k8s的過(guò)程中,并不需要程序員去寫(xiě) role - binding -user 這樣的rbac,也不需要修改kubeconfig 文件(user - context - cluster),也不需要自定義serviceAccount。所以,本文的實(shí)踐價(jià)值在于工作中從網(wǎng)上download下來(lái)的yaml文件,如果出現(xiàn) rbac 的錯(cuò)誤,自己知道怎樣修改,保證容器化正常部署即可。

天天打碼,天天進(jìn)步!!

總結(jié)

以上是生活随笔為你收集整理的Kubernetes_授权认证_RBAC_静态Pod网关apiserver底层的RBAC授权的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。