chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

k8s權(quán)限管理指南說(shuō)明

馬哥Linux運(yùn)維 ? 來(lái)源:博客園 ? 2025-06-26 14:06 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

k8s-權(quán)限管理

1. 身份認(rèn)證

我們?cè)谀壳暗膋8s集群環(huán)境里面,只能在master節(jié)點(diǎn)上執(zhí)行kubectl的一些命令,在其他節(jié)點(diǎn)上執(zhí)行就會(huì)報(bào)錯(cuò)

|   |   |
| --- | --- |
|   |# 看一下是不是 |
|   | [root@node1 ~]# kubectl get nodes |
|   | E0220 1215.695133  6091 memcache.go:238] couldn't get current server API group list: Get "http://localhost:8080/api?timeout=32s": dial tcp [::1] connect: connection refused |
|   | E0220 1215.695771  6091 memcache.go:238] couldn't get current server API group list: Get"http://localhost:8080/api?timeout=32s": dial tcp [::1] connect: connection refused |
|   | E0220 1215.697555  6091 memcache.go:238] couldn't get current server API group list: Get "http://localhost:8080/api?timeout=32s": dial tcp [::1] connect: connection refused |
|   | E0220 1215.699191  6091 memcache.go:238] couldn't get current server API group list: Get"http://localhost:8080/api?timeout=32s": dial tcp [::1] connect: connection refused |
|   | E0220 1215.700655  6091 memcache.go:238] couldn't get current server API group list: Get "http://localhost:8080/api?timeout=32s": dial tcp [::1] connect: connection refused |
|   | The connection to the server localhost:8080 was refused - did you specify the right host or port? |
|   |   |

我們可以看到在node1上執(zhí)行kubectl get nodes都會(huì)報(bào)錯(cuò),那就更不談創(chuàng)建pod之類的操作了,那為什么master可以而其他節(jié)點(diǎn)不行呢?
這是因?yàn)樵趍aster節(jié)點(diǎn)上是有一個(gè)kubeconfig的

|   |   |
| --- | --- |
|   | [root@master ~]#env|grep -i kubeconfig |
|   | KUBECONFIG=/etc/kubernetes/admin.conf |

我們可以看到在master節(jié)點(diǎn)上是有一個(gè)環(huán)境變量加載了這個(gè)admin.conf這個(gè)文件的,這個(gè)文件就是k8s集群默認(rèn)的管理員文件,換一種說(shuō)法,只要你有本事偷走這個(gè)文件并且保障你的網(wǎng)絡(luò)跟這個(gè)集群的網(wǎng)絡(luò)是通的,那么恭喜你,得到了一個(gè)k8s集群

node節(jié)點(diǎn)操作

我們現(xiàn)在來(lái)將這個(gè)admin.conf傳到node1上,再來(lái)看看node1能不能去執(zhí)行命令

|   |   |
| --- | --- |
|   |# 傳文件 |
|   | [root@master ~]# scp /etc/kubernetes/admin.conf node1:~ |
|   | admin.conf                                  100% 5669   6.2MB/s  00:00 |
|   |# 在node1上執(zhí)行命令看看效果 |
|   | [root@node1 ~]# kubectl get node --kubeconfig=admin.conf |
|   | NAME   STATUS  ROLES         AGE  VERSION |
|   | master  Ready  control-plane,master  43d  v1.26.0 |
|   | node1  Ready  node1         43d  v1.26.0 |
|   | node2  Ready  node2         43d  v1.26.0 |

我們通過(guò)這個(gè)小實(shí)驗(yàn)看到,node1節(jié)點(diǎn)確實(shí)是可以獲取到節(jié)點(diǎn)信息了,但是他執(zhí)行的命令跟master上有所不同,在node1上執(zhí)行的時(shí)候他是需要執(zhí)行配置文件的,如果你不想執(zhí)行的話可以將這個(gè)注冊(cè)到環(huán)境變量里面

|   |   |
| --- | --- |
|   | [root@node1 ~]#echo"export KUBECONFIG=/root/admin.conf">> /etc/profile |
|   | [root@node1 ~]#tail-1 /etc/profile |
|   |exportKUBECONFIG=/root/admin.conf |

只需要這樣就好了

但是這樣存在一個(gè)問(wèn)題,他們用的都是管理員的配置文件,那么就相當(dāng)于他們都是管理員,對(duì)集群有全部權(quán)限,我們追求是的最小權(quán)限原則,就是我給你的權(quán)限正好能夠讓你完成屬于你自己的任務(wù),多的權(quán)限不應(yīng)該有,那么我們能不能像Linux一樣創(chuàng)建普通用戶,給普通用戶定制權(quán)限呢?當(dāng)然是可以的

創(chuàng)建普通用戶并授權(quán)

我們現(xiàn)在來(lái)創(chuàng)建一個(gè)普通用戶zhangsan并授權(quán)

1. 生成私鑰

|   |   |
| --- | --- |
|   |# 使用openssl生成一個(gè)rsa類型的私鑰,私鑰文件名是client.key 2048位 |
|   | [root@master ca]# openssl genrsa -out client.key 2048 |
|   | Generating RSA private key, 2048 bit long modulus (2 primes) |
|   | ........................+++++ |
|   | ...............................................................................................................................................................................................................................................+++++ |
|   | e is 65537 (0x010001) |
|   | [root@master ca]#ls|
|   | client.key |

2. 生成zhangsan用戶證書請(qǐng)求文件

|   |   |
| --- | --- |
|   |# 使用client.key 生成一個(gè)新的文件叫做client.csr |
|   | [root@master ca]# openssl req -new -key client.key -subj"/CN=zhangsan"-out client.csr |
|   | [root@master ca]#ls|
|   | client.csr client.key |

3. 為zhangsan用戶頒發(fā)證書

zhangsan用戶如何將請(qǐng)求發(fā)送給k8s的ca進(jìn)行證書頒發(fā)呢?這個(gè)時(shí)候我們可以使用k8s自帶的ca來(lái)頒發(fā)證書

|   |   |
| --- | --- |
|   |# k8s的ca在/etc/kubernetes/pki下 |
|   | [root@master ca]# openssl x509 -req -inclient.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out client.crt -days 3650 |
|   | Signature ok |
|   | subject=CN = zhangsan |
|   | Getting CA Private Key |
|   |# 拷貝ca到當(dāng)前目錄 |
|   | [root@master ca]#cp/etc/kubernetes/pki/ca.crt . |
|   | [root@master ca]#ls|
|   | ca.crt client.crt client.csr client.key |

4. 創(chuàng)建命名空間及pod

|   |   |
| --- | --- |
|   | [root@master ca]# kubectl create ns zhangsan |
|   | namespace/zhangsan created |
|   |# 切到這個(gè)命名空間 |
|   | [root@master ca]# kubectl config set-context --current --namespace zhangsan |
|   | Context"kubernetes-admin@kubernetes"modified. |
|   |# 創(chuàng)建一個(gè)pod |
|   | [root@master ca]# kubectl run test01 --image nginx --image-pull-policy IfNotPresent |
|   | pod/test01 created |
|   | [root@master ca]# kubectl get pods |
|   | NAME   READY  STATUS  RESTARTS  AGE |
|   | test01  1/1   Running  0     13s |

5. 創(chuàng)建角色

角色是什么呢?我們可以這樣想,假如我們現(xiàn)在有增刪改查4個(gè)權(quán)限,用戶用張三,李四,王五,那我們現(xiàn)在給他們授權(quán)的話只能是一個(gè)權(quán)限一個(gè)權(quán)限的去給,萬(wàn)一后面又新增了用戶我們依舊是一個(gè)個(gè)去指定,過(guò)于麻煩,而角色就是介于權(quán)限與用戶之間的一個(gè)模板,就像這樣
我們指定了一個(gè)角色是管理員,擁有增刪改查4個(gè)權(quán)限
一個(gè)是開發(fā)的角色,擁有增改查的權(quán)限
一個(gè)是普通用戶角色,只有查的權(quán)限
我們指定好這3個(gè)模板之后,后面新來(lái)的用戶只需要知道他的作用是什么,比如他就是一個(gè)普通用戶,那我們直接把這個(gè)模板給他套上,那他就只有查的權(quán)限,來(lái)了一個(gè)開發(fā)者,那我們就給他開發(fā)的這個(gè)角色模板,他就自然而然的擁有增改查的權(quán)限

|   |   |
| --- | --- |
|   |# 這里的pod-reader是role的名字 后面的--verb就是這個(gè)角色所包含哪些權(quán)限,并且這個(gè)角色所能操作的資源對(duì)象僅僅只有pod |
|   | [root@master ca]# kubectl create role pod-reader --verb=get --verb=list --verb=watch --resource=pods |
|   | role.rbac.authorization.k8s.io/pod-reader created |

6. 綁定角色給用戶

|   |   |
| --- | --- |
|   |# 創(chuàng)建一個(gè)rolebinding名字叫zhangsan,這個(gè)zhangsan并不是用戶張三,而是這個(gè)rolebinding的名字,后面--user這個(gè)才是用戶張三 |
|   | [root@master ca]# kubectl create rolebinding zhangsan --role pod-reader --user zhangsan |
|   | rolebinding.rbac.authorization.k8s.io/zhangsan created |
|   | [root@master ca]# kubectl get rolebindings.rbac.authorization.k8s.io |
|   | NAME    ROLE       AGE |
|   | zhangsan  Role/pod-reader  4s |

7. 編輯kubeconfig文件

關(guān)于這個(gè)文件的框架,我們可以到官網(wǎng)去找到

地址 https://kubernetes.io/zh-cn/docs/concepts/configuration/organize-cluster-access-kubeconfig/
在官網(wǎng)找到之后我們只需要做一些修改就行,改成這樣就可以,直接復(fù)制這個(gè)去改也行

|  |  |
|---|---|
|  |apiVersion:v1|
|  |kind:Config|
|  |  |
|  |clusters:|
|  |-cluster:|
|  |name:cluster-zs|
|  |  |
|  |users:|
|  |-name:zhangsan|
|  |  |
|  |contexts:|
|  |-context:|
|  |name:context-zs|
|  |namespace:zhangsan|
|  |current-context:"context-zs"|

這個(gè)文件就寫好了,但是目前來(lái)看他與管理員的那個(gè)admin.conf好像不一樣,那個(gè)文件里面內(nèi)容很多,這個(gè)很少
這是因?yàn)槲覀冞€沒(méi)有將剛剛創(chuàng)建出來(lái)的那些密鑰文件嵌入進(jìn)去

8. 嵌入密鑰文件

|   |   |
| --- | --- |
|   |# 1. 嵌入ca文件 |
|   |# set-cluster與剛剛文件里的一樣就好了 server地址就是master的ip加上6443端口 |
|   | [root@master ca]# kubectl config --kubeconfig=kube-zhangsan set-cluster cluster-zs --server=https://192.168.200.200:6443 --certificate-authority=ca.crt --embed-certs=true|
|   | Cluster"cluster-zs"set. |
|   |# 2. 嵌入client |
|   | [root@master ca]# kubectl config --kubeconfig=kube-zhangsan set-credentials zhangsan --client-certificate=client.crt --client-key=client.key --embed-certs=true|
|   | User"zhangsan"set. |
|   |# 3. 設(shè)置上下文信息 |
|   | [root@master ca]# kubectl config --kubeconfig=kube-zhangsan set-context context-zs --cluster=cluster-zs --namespace=zhangsan --user=zhangsan |
|   | Context"context-zs"modified. |

這3個(gè)操作搞定之后,你再去看看這個(gè)文件,你會(huì)發(fā)現(xiàn)他跟admin.conf是一樣一樣的了

9. 驗(yàn)證權(quán)限

這個(gè)文件我們就算搞定了,我們來(lái)看看使用這個(gè)文件所擁有的權(quán)限是否是與我們預(yù)期的一樣

|   |   |
| --- | --- |
|   | [root@node1 ~]# kubectl get pods --kubeconfig=kube-zhangsan |
|   | NAME   READY  STATUS  RESTARTS  AGE |
|   | test01  1/1   Running  0     9m |
|   |# 可以看到pod,我們嘗試一下能否創(chuàng)建pod |
|   | [root@node1 ~]# kubectl run test02 --image nginx --kubeconfig=kube-zhangsan |
|   | Error from server (Forbidden): pods is forbidden: User"zhangsan"cannot create resource"pods"inAPI group""inthe namespace"zhangsan"|
|   |# 我們看報(bào)錯(cuò)信息,用戶zhangsan是不能創(chuàng)建的,我們來(lái)看看除了pod之外的其他資源是否可見(jiàn) |
|   | [root@node1 ~]# kubectl get ns --kubeconfig=kube-zhangsan |
|   | Error from server (Forbidden): namespaces is forbidden: User"zhangsan"cannot list resource"namespaces"inAPI group""at the cluster scope |

現(xiàn)在這個(gè)文件符合我們預(yù)期的權(quán)限,那么這就是創(chuàng)建一個(gè)用戶并授權(quán)的過(guò)程

靜態(tài)token登錄

這個(gè)方法用人話來(lái)講就是,賬號(hào)密碼登錄
靜態(tài)的方式就是創(chuàng)建一個(gè)csv文件,csv文件的格式是
token,user,id
token這一欄我們可以使用openssl生成

1. 生成token

|   |   |
| --- | --- |
|   |# 注意文件位置,最好放在/etc/kubernetes/pki下,因?yàn)閗8s默認(rèn)只對(duì)/etc/kubernetes這個(gè)目錄有權(quán)限操作,放在其他位置可能會(huì)產(chǎn)生權(quán)限錯(cuò)誤 |
|   | [root@master pki]# openssl rand -hex 10 > jerry.csv |
|   | [root@master pki]#catjerry.csv |
|   |# 這里的用戶名和id可以自己改動(dòng) |
|   | 3127c2e2b863d4c23878a,jerry,2000 |

在apiserver加入?yún)?shù)

|   |   |
| --- | --- |
|   |# 默認(rèn)情況下你剛剛寫的文件與集群是沒(méi)有任何關(guān)聯(lián)的,如果想要產(chǎn)生作用需要在kube-apiserver文件加入?yún)?shù) |
|   | [root@master manifests]# vim /etc/kubernetes/manifests/kube-apiserver.yaml |
|   | spec: |
|   | containers: |
|   | -command: |
|   | - kube-apiserver |
|   |# 在這里加上 --token-auth-file后面就是你剛剛的那個(gè)文件 |
|   | - --token-auth-file=/etc/kubernetes/pki/jerry.csv |
|   | - --advertise-address=192.168.200.200 |
|   | - --allow-privileged=true|
|   |# 然后重啟kubelet |
|   | [root@master pki]# systemctl restart kubelet |

2. 嘗試登錄集群

|   |   |
| --- | --- |
|   | [root@node1 pki]# kubectl --server="https://192.168.200.200:6443"--token="3127c2e2b863d4c23878a"get pod -n default |
|   | Unable to connect to the server: x509: certificate signed by unknown authority |

他會(huì)有一個(gè)報(bào)錯(cuò),但是我們現(xiàn)在沒(méi)有使用x509的證書啊,所以我們需要讓他跳過(guò)安全認(rèn)證

3. 帶上參數(shù)再次嘗試

|   |   |
| --- | --- |
|   | [root@node1 pki]# kubectl --server="https://192.168.200.200:6443"--token="3127c2e2b863d4c23878a"get pod --insecure-skip-tls-verify=true-n zhangsan |
|   | Error from server (Forbidden): pods is forbidden: User"jerry"cannot list resource"pods"inAPI group""inthe namespace"zhangsan"|

現(xiàn)在我們?cè)賮?lái)看,他報(bào)的錯(cuò)是不是跟剛剛不一樣了,這個(gè)報(bào)錯(cuò)說(shuō)的是jerry這個(gè)用戶沒(méi)有權(quán)限
能看到這個(gè)其實(shí)就說(shuō)明我們已經(jīng)可以登錄了,只是沒(méi)有權(quán)限看到一些信息罷了

2. 角色授權(quán)

上面我們提到了用戶的登錄,提到了一點(diǎn)點(diǎn)授權(quán),現(xiàn)在開始聊授權(quán)的那些事
默認(rèn)情況下k8s采用的是Node和RBAC的鑒權(quán)模式
RBAC就是基于角色的訪問(wèn)控制 R就是role嘛
我們可以在kube-apiserver文件里面看到

|   |   |
| --- | --- |
|   | spec: |
|   | containers: |
|   | -command: |
|   | - kube-apiserver |
|   | - --token-auth-file=/etc/kubernetes/pki/jerry.csv |
|   | - --advertise-address=192.168.200.200 |
|   | - --allow-privileged=true|
|   |# 就是這一行 |
|   | - --authorization-mode=Node,RBAC |

剛剛我們不是使用jerry用戶登錄但是沒(méi)有任何權(quán)限嗎?我們現(xiàn)在將這一行參數(shù)改掉

|   |   |
| --- | --- |
|   |# 將之前的注釋掉,然后寫一行新的 |
|   |# - --authorization-mode=Node,RBAC |
|   |# 這個(gè)是總是允許,不會(huì)鑒權(quán),你能登錄就有權(quán)限,這個(gè)模式僅用于測(cè)試 |
|   | - --authorization-mode=AlwaysAllow |
|   |# 重啟kubelet |
|   | [root@master manifests]# systemctl restart kubelet |

然后我們來(lái)到node節(jié)點(diǎn)再嘗試一下jerry用戶

|   |   |
| --- | --- |
|   | [root@node1 manifests]# kubectl --server="https://192.168.200.200:6443"--token="3127c2e2b863d4c23878a"get pod --insecure-skip-tls-verify=true-n zhangsan |
|   | NAME   READY  STATUS  RESTARTS  AGE |
|   | test01  1/1   Running  0     56m |

我們發(fā)現(xiàn)他確實(shí)有權(quán)限查看了,好了但是我們的重點(diǎn)并不是這個(gè),我們將他改回來(lái)

role與rolebinding

是通過(guò)命名空間來(lái)授權(quán)的,你在哪個(gè)命名空間創(chuàng)建的角色,那么這個(gè)角色只有這個(gè)命名空間下的權(quán)限
rolebinding就是將角色與用戶進(jìn)行綁定

1. 創(chuàng)建角色

剛剛我們不是有一個(gè)Jerry用戶可以登錄集群,但是沒(méi)有任何權(quán)限嗎?
那我們現(xiàn)在來(lái)授權(quán)

|   |   |
| --- | --- |
|   |# 不知道參數(shù)是怎么來(lái)的可以使用kubectl create role --help 里面有示例 |
|   | [root@master role]# kubectl create role jerry --verb=get --verb=list --verb=watch --resource=pods --dry-run=client -o yaml > jerry.yaml |
|   | [root@master role]# kubectl apply -f jerry.yaml |
|   | role.rbac.authorization.k8s.io/jerry created |
|   | [root@master role]# kubectl get role |
|   | NAME     CREATED AT |
|   | jerry    2024-02-20T0935Z |
|   | pod-reader  2024-02-20T0530Z |

我們現(xiàn)在有2個(gè)role一個(gè)是之前的,一個(gè)jerry就是剛剛我們創(chuàng)建出來(lái)的
現(xiàn)在我們角色有了,但是jerry用戶依舊是查不到任何信息的,因?yàn)槲覀儧](méi)有對(duì)他進(jìn)行綁定

2. rolebinding

|   |   |
| --- | --- |
|   |# 注意一個(gè)坑,當(dāng)這個(gè)用戶是token登錄的時(shí)候必須指定他的token,老版本不會(huì)有這個(gè)問(wèn)題,新版本不指定的話依然是沒(méi)有權(quán)限的,注意一下 |
|   | [root@master role]# kubectl create rolebinding jerry --role=jerry --user=jerry --token="3127c2e2b863d4c23878a"--dry-run=client -o yaml > rolebinding.yaml |
|   | [root@master role]# kubectl apply -f rolebinding.yaml |
|   | rolebinding.rbac.authorization.k8s.io/jerry created |
|   | [root@master role]# kubectl get rolebindings.rbac.authorization.k8s.io |
|   | NAME    ROLE       AGE |
|   | jerry   Role/jerry    5s |
|   | zhangsan  Role/pod-reader  4h3m |

這里的每一步操作都應(yīng)該能看懂吧,然后我們回到node節(jié)點(diǎn)上使用jerry來(lái)查一下zhangsan命名空間下的pod

3. 驗(yàn)證權(quán)限

|   |   |
| --- | --- |
|   | [root@node1 manifests]# kubectl --server="https://192.168.200.200:6443"--token="3127c2e2b863d4c23878a"get pod --insecure-skip-tls-verify=true-n zhangsan |
|   | NAME   READY  STATUS  RESTARTS  AGE |
|   | test01  1/1   Running  0     4h24m |

我們可以看到,他現(xiàn)在就可以看到pod的信息了,但是我們?cè)谥付?quán)限的時(shí)候是沒(méi)有給他創(chuàng)建的權(quán)限的,那么他肯定不能創(chuàng)建pod,但是我們現(xiàn)在想要他可以創(chuàng)建pod怎么辦呢?
也是很簡(jiǎn)單,只需要給角色加上一個(gè)權(quán)限就可以了

4. 修改權(quán)限

修改權(quán)限我們只需要修改jerry.yaml

|  |  |
|---|---|
|  |apiVersion:rbac.authorization.k8s.io/v1|
|  |kind:Role|
|  |metadata:|
|  |creationTimestamp:null|
|  |name:jerry|
|  |rules:|
|  |-apiGroups:|
|  |-""|
|  |resources:|
|  |-pods|
|  |verbs:|
|  |-get|
|  |-list|
|  |-watch|
|  |# 加上這個(gè)他就可以創(chuàng)建pod了,如果加上delete那么他就可以刪除 |
|  |-create|

然后我們?cè)賏pply這個(gè)文件

|   |   |
| --- | --- |
|   | [root@master role]# kubectl apply -f jerry.yaml |
|   | role.rbac.authorization.k8s.io/jerry configured |

5. 驗(yàn)證是否成功增加權(quán)限

|   |   |
| --- | --- |
|   | [root@node1 manifests]# kubectl --server="https://192.168.200.200:6443"--token="3127c2e2b863d4c23878a" --insecure-skip-tls-verify=true-n zhangsan run test02 --image nginx |
|   | pod/test02 created |

我們可以看到pod被創(chuàng)建出來(lái)了,說(shuō)明剛剛的權(quán)限已經(jīng)增加上了
這里我們僅僅只是針對(duì)pod的操作,如果我要?jiǎng)?chuàng)建一個(gè)deployment控制器呢?
上操作

6. deploymentde的操作

我們仔細(xì)觀察一下jerry.yaml這個(gè)文件,發(fā)現(xiàn)里面有一行寫的是pods,那我們是不是直接在這里加上deployments就好了呢?
我們來(lái)試試

|  |  |
|---|---|
|  |# 修改yaml文件 |
|  |apiVersion:rbac.authorization.k8s.io/v1|
|  |kind:Role|
|  |metadata:|
|  |creationTimestamp:null|
|  |name:jerry|
|  |rules:|
|  |-apiGroups:|
|  |-""|
|  |resources:|
|  |-pods|
|  |-deployments|
|  |verbs:|
|  |-get|
|  |-list|
|  |-watch|
|  |-create|

然后我們apply這個(gè)文件

|   |   |
| --- | --- |
|   | [root@master role]# kubectl apply -f jerry.yaml |
|   | role.rbac.authorization.k8s.io/jerry configured |

我們來(lái)看看是不是能夠創(chuàng)建deployment了

|   |   |
| --- | --- |
|   | [root@node1 manifests]# kubectl --server="https://192.168.200.200:6443"--token="3127c2e2b863d4c23878a" --insecure-skip-tls-verify=true-n zhangsan create deployment test03 --image nginx |
|   | error: failed to create deployment: deployments.apps is forbidden: User"jerry"cannot create resource"deployments"inAPI group"apps"inthe namespace"zhangsan"|

喔嚯,報(bào)錯(cuò)了,我們不是加上了deployment嗎?
這其實(shí)是因?yàn)槲覀冞€需要給他指定apiGroup,光指定資源是不行的,能創(chuàng)建pod是因?yàn)閜od他的apiVersion就是v1,而deployment的apiVersion是apps/v1所以他會(huì)報(bào)錯(cuò),那我們?cè)賮?lái)修改一下文件

|  |  |
|---|---|
|  |apiVersion:rbac.authorization.k8s.io/v1|
|  |kind:Role|
|  |metadata:|
|  |creationTimestamp:null|
|  |name:jerry|
|  |rules:|
|  |-apiGroups:|
|  |-""|
|  |# 加上這個(gè),如果你想要?jiǎng)?chuàng)建其他的資源,那么你也要在這里寫上 |
|  |# 查詢apiVersion很簡(jiǎn)單,你可以使用kubectl create xxx --dry-run 的方式,也可以直接 kubectl api-version去查,查到之后填到這里 |
|  |-"apps"|
|  |resources:|
|  |-pods|
|  |-deployments|
|  |verbs:|
|  |-get|
|  |-list|
|  |-watch|
|  |-create|

然后我們apply之后再來(lái)創(chuàng)建

|   |   |
| --- | --- |
|   | [root@node1 manifests]# kubectl --server="https://192.168.200.200:6443"--token="3127c2e2b863d4c23878a" --insecure-skip-tls-verify=true-n zhangsan create deployment test03 --image nginx |
|   | deployment.apps/test03 created |

我們現(xiàn)在是可以創(chuàng)建deployment了,那我們想更新他的副本數(shù)量也是可以的嘛?來(lái)看看

|   |   |
| --- | --- |
|   | [root@node1 manifests]# kubectl --server="https://192.168.200.200:6443"--token="3127c2e2b863d4c23878a" --insecure-skip-tls-verify=true-n zhangsan scale deployment test03 --replicas 3 |
|   | Error from server (Forbidden): deployments.apps"test03"is forbidden: User"jerry"cannot patch resource"deployments/scale"inAPI group"apps"inthe namespace"zhangsan"|

他又報(bào)錯(cuò)了,他說(shuō)不能patch,那我們?cè)趘erb里面加上個(gè)試試看呢,等一下,注意看完報(bào)錯(cuò),他說(shuō)resource里面是deployments/scale我們好像也沒(méi)有給他這個(gè)資源,一并加上
最終的yaml文件是這樣的

|  |  |
|---|---|
|  |apiVersion:rbac.authorization.k8s.io/v1|
|  |kind:Role|
|  |metadata:|
|  |creationTimestamp:null|
|  |name:jerry|
|  |rules:|
|  |-apiGroups:|
|  |-""|
|  |-"apps"|
|  |resources:|
|  |-pods|
|  |-deployments/scale|
|  |-deployments|
|  |verbs:|
|  |-get|
|  |-patch|
|  |-list|
|  |-watch|
|  |-create|

我們apply之后再來(lái)試試看呢

|   |   |
| --- | --- |
|   | [root@master role]# kubectl apply -f jerry.yaml |
|   | role.rbac.authorization.k8s.io/jerry configured |
|   |# 修改副本數(shù) |
|   | [root@node1 manifests]# kubectl --server="https://192.168.200.200:6443"--token="3127c2e2b863d4c23878a" --insecure-skip-tls-verify=true-n zhangsan scale deployment test03 --replicas 3 |
|   | deployment.apps/test03 scaled |

我們可以看到現(xiàn)在他可以了
這個(gè)yaml文件還可以有另外一種格式

|  |  |
|---|---|
|  |apiVersion:rbac.authorization.k8s.io/v1|
|  |kind:Role|
|  |metadata:|
|  |creationTimestamp:null|
|  |name:jerry|
|  |rules:|
|  |-apiGroups:["","apps"]|
|  |resources:["pods","deployments"]|
|  |verbs:["get","delete","watch"]|

這種方式也可以,喜歡用哪種就用哪種,無(wú)所謂的嘛
這個(gè)就是role和rolebinding

clusterrole和clusterrolebinding

clusterrole對(duì)于role來(lái)說(shuō),role是屬于某個(gè)命名空間的,而clusterrole是屬于整個(gè)集群的,clusterrole可以進(jìn)行clusterrolebinding,也可以進(jìn)行rolebinding,rolebinding的時(shí)候指定一下命名空間就可以了
使用rolebinding的時(shí)候它就相當(dāng)于是將clusterrole的權(quán)限模板給了某個(gè)命名空間下的某個(gè)用戶,也就是說(shuō)在你進(jìn)行rolebinding的時(shí)候你就當(dāng)這個(gè)clusterrole就是一個(gè)普通的沒(méi)有指定特定命名空間的role
我們可以這樣想一下,我們有很多個(gè)命名空間,然后每個(gè)命名空間里的用戶權(quán)限其實(shí)都是差不多的,那么如果我要是使用role的話,我就需要每個(gè)命名空間下都要去創(chuàng)建role,費(fèi)時(shí)費(fèi)力
但是我們使用clusterrole的話,所有命名空間都可以看到這個(gè)clusterrole,那么就無(wú)需每個(gè)命名空間都去創(chuàng)建role了,直接rolebingding就好了

1. 創(chuàng)建一個(gè)新的用戶,使用token

|   |   |
| --- | --- |
|   | [root@master pki]# openssl rand -hex 10 >> /etc/kubernetes/pki/jerry.csv |
|   | [root@master pki]#catjerry.csv |
|   |# 這里的token不一樣長(zhǎng)可能是因?yàn)槲野碼插入的時(shí)候多按了一下,沒(méi)什么太大的問(wèn)題,token是可以自己寫的 |
|   | 3127c2e2b863d4c23878a,jerry,2000 |
|   | 958a15cfa9431e088e0b,tom,2001 |

2. 創(chuàng)建clusterrole

這個(gè)創(chuàng)建方法與role是一樣的

|   |   |
| --- | --- |
|   | [root@master role]# kubectl create clusterrole cluster-pod --verb=get,list,watch --resource=pods --dry-run=client -o yaml > clusterrole.yaml |
|   | [root@master role]#catclusterrole.yaml |
|   | apiVersion: rbac.authorization.k8s.io/v1 |
|   | kind: ClusterRole |
|   | metadata: |
|   | creationTimestamp: null |
|   | name: cluster-pod |
|   | rules: |
|   | - apiGroups: |
|   | -""|
|   | resources: |
|   | - pods |
|   | verbs: |
|   | - get |
|   | - list |
|   | - watch |

3. clusterrolebinding

|   |   |
| --- | --- |
|   | [root@master role]# kubectl create clusterrolebinding cluster-tom --clusterrole=cluster-pod --user=tom --token="958a15cfa9431e088e0b"|

4. 驗(yàn)證權(quán)限

在驗(yàn)證權(quán)限之前我建議退出shell重新登錄一下,或者重啟一下節(jié)點(diǎn),因?yàn)槟阒苯拥卿浀脑捤赡軙?huì)報(bào)錯(cuò)
error: You must be logged in to the server (Unauthorized)
我就遇到這個(gè)問(wèn)題了,我的解決方式是將kube-system里面的apiserver這個(gè)pod重啟了

|   |   |
| --- | --- |
|   |# 查看pod |
|   | [root@node1 manifests]# kubectl --server="https://192.168.200.200:6443"--token="958a15cfa9431e088e0bb" --insecure-skip-tls-verify=true-n zhangsan get pods |
|   | NAME           READY  STATUS  RESTARTS  AGE |
|   | test01          1/1   Running  0     6h29m |
|   | test03-6484c64bb6-88xlr  1/1   Running  0     81m |
|   | test03-6484c64bb6-9hf4l  1/1   Running  0     75m |
|   | test03-6484c64bb6-w4zwk  1/1   Running  0     75m |
|   |# 查看其他命名空間的pod |
|   | [root@node1 manifests]# kubectl --server="https://192.168.200.200:6443"--token="958a15cfa9431e088e0bb" --insecure-skip-tls-verify=true-n kube-system get pods |
|   | NAME               READY  STATUS  RESTARTS    AGE |
|   | coredns-5bbd96d687-9tsbb     1/1   Running  38 (7h6m ago)  42d |
|   | coredns-5bbd96d687-q6dl8     1/1   Running  38 (7h6m ago)  42d |
|   | etcd-master           1/1   Running  42 (7h6m ago)  44d |
|   | kube-apiserver-master      1/1   Running  0        13m |
|   | kube-controller-manager-master  1/1   Running  63 (3h1m ago)  44d |
|   | kube-proxy-mp98s         1/1   Running  40 (7h6m ago)  44d |
|   | kube-proxy-snk8k         1/1   Running  46 (7h6m ago)  44d |
|   | kube-proxy-xmxpj         1/1   Running  38 (7h6m ago)  44d |
|   | kube-scheduler-master      1/1   Running  61 (3h1m ago)  44d |
|   | metrics-server-54b5b8fb6-v4cqx  1/1   Running  29 (7h4m ago)  7d1h |

我們可以看到,他可以看到其他命名空間下的pod,這就是role和clusterrole的區(qū)別了
至于他能不能創(chuàng)建pod,能不能創(chuàng)建deployment,這些東西就是跟role是一樣的了

鏈接:https://www.cnblogs.com/fsdstudy/p/18023589

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 節(jié)點(diǎn)
    +關(guān)注

    關(guān)注

    0

    文章

    224

    瀏覽量

    25285
  • 集群
    +關(guān)注

    關(guān)注

    0

    文章

    129

    瀏覽量

    17553
  • 命令
    +關(guān)注

    關(guān)注

    5

    文章

    745

    瀏覽量

    23280

原文標(biāo)題:【Kubernetes】 權(quán)限完全指南:從基礎(chǔ)到企業(yè)級(jí)權(quán)限管控實(shí)戰(zhàn)

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    什么是 K8S,如何使用 K8S

    Kubernetes(簡(jiǎn)稱K8S)是一個(gè)用于管理容器化應(yīng)用程序的開源平臺(tái)。以下是關(guān)于K8S及其使用方法的介紹: 一、什么是 K8S 核心特點(diǎn) 自動(dòng)化容器編排:自動(dòng)處理容器的部署、擴(kuò)展
    發(fā)表于 06-25 06:45

    k8s核心原理學(xué)習(xí)指南3

    k8s學(xué)習(xí)3 - 核心原理
    發(fā)表于 09-25 16:37

    OpenStack與K8s結(jié)合的兩種方案的詳細(xì)介紹和比較

    OpenStack與K8S結(jié)合主要有兩種方案。一是K8S部署在OpenStack平臺(tái)之上,二是K8S和OpenStack組件集成。
    的頭像 發(fā)表于 10-14 09:38 ?2.8w次閱讀

    Docker不香嗎為什么還要用K8s

    。 關(guān)于 K8s 的基本概念我們將會(huì)圍繞如下七點(diǎn)展開: Docker 的管理痛點(diǎn) 什么是 K8s? 云架構(gòu) 云原生 K8s 架構(gòu)原理 K8s
    的頭像 發(fā)表于 06-02 11:56 ?3856次閱讀

    簡(jiǎn)單說(shuō)明k8s和Docker之間的關(guān)系

    這篇文章主要介紹了k8s和Docker關(guān)系簡(jiǎn)單說(shuō)明,本文利用圖文講解的很透徹,有需要的同學(xué)可以研究下 最近項(xiàng)目用到kubernetes(以下簡(jiǎn)稱k8sk
    的頭像 發(fā)表于 06-24 15:48 ?3903次閱讀

    K8S集群服務(wù)訪問(wèn)失敗怎么辦 K8S故障處理集錦

    問(wèn)題1:K8S集群服務(wù)訪問(wèn)失??? ? ? 原因分析:證書不能被識(shí)別,其原因?yàn)椋鹤远x證書,過(guò)期等。 解決方法:更新證書即可。 問(wèn)題2:K8S集群服務(wù)訪問(wèn)失?。?curl: (7) Failed
    的頭像 發(fā)表于 09-01 11:11 ?1.7w次閱讀
    <b class='flag-5'>K8S</b>集群服務(wù)訪問(wèn)失敗怎么辦 <b class='flag-5'>K8S</b>故障處理集錦

    K8S(kubernetes)學(xué)習(xí)指南

    K8S(kubernetes)學(xué)習(xí)指南
    發(fā)表于 06-29 14:14 ?0次下載

    mysql部署在k8s上的實(shí)現(xiàn)方案

    的 RDBMS (Relational Database Management System,關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)) 應(yīng)用軟件之一。這里主要講 mysql 部署在 k8s 上,mysql 部署在 k8s 上的優(yōu)勢(shì)主要有以下幾點(diǎn)。
    的頭像 發(fā)表于 09-26 10:39 ?3009次閱讀

    k8s是什么意思?kubeadm部署k8s集群(k8s部署)|PetaExpres

    k8s是什么意思? kubernetes簡(jiǎn)稱K8s,是一個(gè)開源的,用于管理云平臺(tái)中多個(gè)主機(jī)上的容器化的應(yīng)用,Kubernetes的目標(biāo)是讓部署容器化的應(yīng)用簡(jiǎn)單并且高效(powerful
    發(fā)表于 07-19 13:14 ?1461次閱讀

    什么是K3sK8s?K3sK8s有什么區(qū)別?

    Kubernetes,通??s寫為 K8s,是領(lǐng)先的容器編排工具。該開源項(xiàng)目最初由 Google 開發(fā),幫助塑造了現(xiàn)代編排的定義。該系統(tǒng)包括了部署和運(yùn)行容器化系統(tǒng)所需的一切。
    的頭像 發(fā)表于 08-03 10:53 ?8865次閱讀

    k8s生態(tài)鏈包含哪些技術(shù)

    1. Apache APISIX Ingress 定義 ? 在 K8s 生態(tài)中,Ingress 作為表示 K8s 流量入口的一種資源,想要讓其生效,就需要有一個(gè) Ingress Controller
    的頭像 發(fā)表于 08-07 10:56 ?1788次閱讀
    <b class='flag-5'>k8s</b>生態(tài)鏈包含哪些技術(shù)

    K8s多集群管理:為什么需要多集群、多集群的優(yōu)勢(shì)是什么

    隨著K8s和云原生技術(shù)的快速發(fā)展,以及各大廠商在自己的數(shù)據(jù)中心使用K8s的API進(jìn)行容器化應(yīng)用編排和管理,讓應(yīng)用交付本身變得越來(lái)越標(biāo)準(zhǔn)化和統(tǒng)一化,并且實(shí)現(xiàn)了與底層基礎(chǔ)設(shè)施的完全解耦,為多集群和混合云提供了一個(gè)堅(jiān)實(shí)技術(shù)基礎(chǔ)。
    發(fā)表于 09-14 10:48 ?2356次閱讀
    <b class='flag-5'>K8s</b>多集群<b class='flag-5'>管理</b>:為什么需要多集群、多集群的優(yōu)勢(shì)是什么

    K8S落地實(shí)踐經(jīng)驗(yàn)分享

    k8s 即 Kubernetes,是一個(gè)開源的容器編排引擎,用來(lái)對(duì)容器化應(yīng)用進(jìn)行自動(dòng)化部署、 擴(kuò)縮和管理。
    的頭像 發(fā)表于 01-02 11:45 ?1882次閱讀
    <b class='flag-5'>K8S</b>落地實(shí)踐經(jīng)驗(yàn)分享

    k8s和docker區(qū)別對(duì)比,哪個(gè)更強(qiáng)?

    Docker和Kubernetes(K8s)是容器化技術(shù)的兩大流行工具。Docker關(guān)注構(gòu)建和打包容器,適用于本地開發(fā)和單主機(jī)管理;而K8s則提供容器編排和管理平臺(tái),適用于多主機(jī)或云環(huán)
    的頭像 發(fā)表于 12-11 13:55 ?984次閱讀

    解析K8S實(shí)用命令

    前言: 作為運(yùn)維工程師,掌握 Kubernetes 命令行工具是日常工作的核心技能。本文將深入解析 K8S 最實(shí)用的命令,從基礎(chǔ)操作到高級(jí)技巧,助你成為容器化集群管理專家。
    的頭像 發(fā)表于 07-24 14:07 ?377次閱讀