国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

25-k8s集群中-RBAC用戶角色資源權(quán)限

這篇具有很好參考價(jià)值的文章主要介紹了25-k8s集群中-RBAC用戶角色資源權(quán)限。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、RBAC概述

1,k8s集群的交互邏輯(簡(jiǎn)單了解)

? ? ? ? 我們通過(guò)k8s各組件架構(gòu),指導(dǎo)各個(gè)組件之間是使用https進(jìn)行數(shù)據(jù)加密及交互的,那么同理,我們作為“使用”k8s的各種資源,也是通過(guò)https進(jìn)行數(shù)據(jù)加密的;

? ? ? ? k8s通過(guò)我們家目錄下的證書來(lái)判斷我們是誰(shuí)?通過(guò)證書內(nèi)容,認(rèn)定我們的權(quán)限;

25-k8s集群中-RBAC用戶角色資源權(quán)限,k8s系列,kubernetes,docker,云原生,容器

用戶證書的位置

[root@k8s231 ~]# ll -a .kube/config?
-rw------- 1 root root 5634 Jan ?1 19:40 .kube/config

2,k8s的安全架構(gòu)(簡(jiǎn)單了解)

25-k8s集群中-RBAC用戶角色資源權(quán)限,k8s系列,kubernetes,docker,云原生,容器

3,RBAC用戶授權(quán)的邏輯(重要)

25-k8s集群中-RBAC用戶角色資源權(quán)限,k8s系列,kubernetes,docker,云原生,容器

用戶/主題Topic

? ? ? ? 1,User

? ? ? ? 2,SerciceAccount

? ? ? ? 3,Group

用戶角色:

? ? ? ? 1,Role:局部資源角色

? ? ? ? 2,ClusterRole:全局資源角色

角色綁定:

? ? ? ? 1,RoleBinding

? ? ? ? 2,ClusterRoleBinding

4,查看現(xiàn)有的集群默認(rèn)角色

[root@k8s231 ~]# kubectl get clusterrole | grep -v system

25-k8s集群中-RBAC用戶角色資源權(quán)限,k8s系列,kubernetes,docker,云原生,容器

admin:主要用于授權(quán)命名空間所有讀寫的權(quán)限

cluster-admin:超級(jí)管理員,由集群所有權(quán)限

edit:允許對(duì)大多數(shù)對(duì)象進(jìn)行讀寫操作,不允許查看或者修改角色、角色綁定;

view:允許對(duì)命名空間大多數(shù)對(duì)象進(jìn)行讀寫,不允許查看角色、角色綁定、secret;

#####

kubeadm用戶,只有使用kubeadm部署k8s時(shí)才會(huì)出現(xiàn),不用關(guān)心它;

二、流程介紹

1,用戶的創(chuàng)建流程

1,User

2,SerciceAccount

3,Group

? ? ? ? 本質(zhì)上講,在k8s系統(tǒng)中,用戶,就是一個(gè)文件,這個(gè)文件在當(dāng)前登錄用戶的家目錄下;

這個(gè)文件config,就代表“我”是誰(shuí);

????????這里面并沒有角色、權(quán)限信息,角色和權(quán)限信息,在其他位置;

[root@k8s231 ~]# ll .kube/config?
-rw------- 1 root root 5634 Jan ?1 19:40 .kube/config

????????所以,要?jiǎng)?chuàng)建用戶,就是要?jiǎng)?chuàng)建這個(gè)文件;

? ? ? ? 那么如何創(chuàng)建這個(gè)文件吶?

· ssl流程介紹

25-k8s集群中-RBAC用戶角色資源權(quán)限,k8s系列,kubernetes,docker,云原生,容器

? ? ? ? 知道了ssl原理,https請(qǐng)求過(guò)程,我們就了解了,ssl的安全機(jī)制;

? ? ? ? 實(shí)際上k8s當(dāng)中“根證書”早就生成好了,在我們kubeadm部署的時(shí)候,就自動(dòng)幫我們生成了;

? ? ? ? k8s是模擬ca機(jī)構(gòu),給自己頒發(fā)證書,自己驗(yàn)證自己,所以,整數(shù)中有私鑰、公鑰等;

[root@k8s231 ~]# ll /etc/kubernetes/pki/
total 56
-rw-r--r-- 1 root root 1281 Jan ?1 19:39 apiserver.crt
-rw-r--r-- 1 root root 1155 Jan ?1 19:39 apiserver-etcd-client.crt
-rw------- 1 root root 1679 Jan ?1 19:39 apiserver-etcd-client.key
-rw------- 1 root root 1675 Jan ?1 19:39 apiserver.key
-rw-r--r-- 1 root root 1164 Jan ?1 19:39 apiserver-kubelet-client.crt
-rw------- 1 root root 1679 Jan ?1 19:39 apiserver-kubelet-client.key

#根證書
-rw-r--r-- 1 root root 1099 Jan ?1 19:39 ca.crt

#ca機(jī)構(gòu)的私鑰
-rw------- 1 root root 1679 Jan ?1 19:39 ca.key
drwxr-xr-x 2 root root ?162 Jan ?1 19:39 etcd
-rw-r--r-- 1 root root 1115 Jan ?1 19:39 front-proxy-ca.crt
-rw------- 1 root root 1675 Jan ?1 19:39 front-proxy-ca.key
-rw-r--r-- 1 root root 1119 Jan ?1 19:39 front-proxy-client.crt
-rw------- 1 root root 1679 Jan ?1 19:39 front-proxy-client.key
-rw------- 1 root root 1675 Jan ?1 19:39 sa.key
-rw------- 1 root root ?451 Jan ?1 19:39 sa.pub

· 生成用戶證書

? ? ? ? 一個(gè)用戶一個(gè)證書,這個(gè)用戶證書,就是用來(lái)生成,用戶文件的(也就是家目錄下的config)

· 生成kubeconfig用戶授權(quán)文件

? ? ? ? 有了這個(gè)授權(quán)文件,我們就擁有了一個(gè)用戶了;

? ? ? ? 但是,還沒有任何權(quán)限,還無(wú)法使用;

2,創(chuàng)建角色和規(guī)則

? ? ? ? 通過(guò)資源清單的方式,創(chuàng)建角色和規(guī)則;

? ? ? ? 角色就是:

1,Role:局部資源角色

2,ClusterRole:全局資源角色

? ? ? ? 規(guī)則就是:這個(gè)角色的權(quán)限;能使用什么資源、不能使用什么資源,,,,

3,角色與用戶的綁定

? ? ? ? 根據(jù)角色的不同,創(chuàng)建資源清單,對(duì)應(yīng)不同的綁定資源清單的編寫;

1,RoleBinding

2,ClusterRoleBinding

? ? ? ? 只要角色和用戶綁定完成,那么,RBAC的整個(gè)流程就結(jié)束了;

? ? ? ? 我們就成功創(chuàng)建了一個(gè)帶有特定權(quán)限的用戶;就可以分發(fā)給“同事”進(jìn)行使用了;

4,邏輯流程的總結(jié)

25-k8s集群中-RBAC用戶角色資源權(quán)限,k8s系列,kubernetes,docker,云原生,容器

三、RBAC創(chuàng)建初體驗(yàn)

1,創(chuàng)建用戶【user】

· 生成用戶ssl證書

? ? ? ? 以往我們使用openssl的工具命令生成證書,比較繁瑣,本次學(xué)習(xí),我給大家介紹一個(gè)證書生成工具,叫做cfssl證書生成工具;

1,上傳/下載cfssl證書生成工具

cfssl工具百度網(wǎng)盤地址:

鏈接:https://pan.baidu.com/s/1gDRQuxekvgInplLkpjvhQw?pwd=f31x?
提取碼:f31x

或者去github地址下載:Releases · cloudflare/cfssl · GitHub

[root@k8s231 rbac]# rz -E
[root@k8s231 rbac]# ll
-rw-r--r-- 1 root root 10808877 Nov ?8 00:30 cfssl.zip

2,解壓cfssl工具壓縮包

[root@k8s231 rbac]# unzip cfssl.zip?
[root@k8s231 rbac]# ll
-rw-r--r-- 1 root root 12054528 Aug 30 15:46 cfssl_1.6.4_linux_amd64
-rw-r--r-- 1 root root ?9560064 Aug 30 15:45 cfssl-certinfo_1.6.4_linux_amd64
-rw-r--r-- 1 root root ?7643136 Aug 30 15:48 cfssljson_1.6.4_linux_amd64
-rw-r--r-- 1 root root 10808877 Nov ?8 00:30 cfssl.zip

3,刪除壓縮包,將cfssl文件改名

? ? ? ? 為什么改名?為了便于使用~如果你不嫌費(fèi)力,可以不改~

[root@k8s231 rbac]# rm -rf cfssl.zip?
[root@k8s231 rbac]# rename _1.6.4_linux_amd64 "" *
[root@k8s231 rbac]# ll
-rw-r--r-- 1 root root 12054528 Aug 30 15:46 cfssl
-rw-r--r-- 1 root root ?9560064 Aug 30 15:45 cfssl-certinfo
-rw-r--r-- 1 root root ?7643136 Aug 30 15:48 cfssljson

4,將cfssl文件編程全局命令

? ? ? ? 將這三個(gè)文件,移動(dòng)到/usr/local/bin目錄下,編程全局命令~

[root@k8s231 rbac]# mv ./* /usr/local/bin/

5,給cfssl執(zhí)行文件加執(zhí)行權(quán)限

[root@k8s231 rbac]# chmod +x /usr/local/bin/cfssl*

6,編輯cfssl工具的生成用戶ssl證書的配置文件

? ? ? ? 根證書

[root@k8s231 rbac]# cat ca-config.json?
{
? "signing": {
? ? "default": {
? ? ? "expiry": "87600h"
? ? },
? ? "profiles": {
? ? ? "kubernetes": {
? ? ? ? "usages": [
? ? ? ? ? ? "signing",
? ? ? ? ? ? "key encipherment",
? ? ? ? ? ? "server auth",
? ? ? ? ? ? "client auth"
? ? ? ? ],
? ? ? ? "expiry": "87600h"
? ? ? }
? ? }
? }
}

? ? ? ? 客戶端驗(yàn)證簽名證書

[root@k8s231 rbac]# cat csr.json?
{
? "CN": "xinjizhiwa",
? "hosts": [],
? "key": {
? ? "algo": "rsa",
? ? "size": 2048
? },
? "names": [
? ? {
? ? ? "C": "CN",
? ? ? "ST": "BeiJing",
? ? ? "L": "BeiJing",
? ? ? "O": "k8s",
? ? ? "OU": "System"
? ? }
? ]
}

7,使用cfssl工具生成用戶的ssl證書

[root@k8s231 rbac]# cfssl gencert -ca=/etc/kubernetes/pki/ca.crt -ca-key=/etc/kubernetes/pki/ca.key -config=ca-config.json -profile=kubernetes csr.json | cfssljson -bare xinjizhiwa

參數(shù)解釋:

#使用k8s自帶的證書來(lái)簽發(fā)客戶端證書(位置就在/etc/kubernetes/pki/下面);
-ca=/etc/kubernetes/pki/ca.crt?
-ca-key=/etc/kubernetes/pki/ca.key?
-config=ca-config.json?
-profile=kubernetes csr.json | cfssljson -bare xinjizhiwa

查看證書

[root@k8s231 rbac]# ll
total 20
-rw-r--r-- 1 root root ?292 Feb 21 20:06 ca-config.json
-rw-r--r-- 1 root root ?223 Feb 21 20:07 csr.json
-rw-r--r-- 1 root root 1001 Feb 21 20:11 xinjizhiwa.csr
-rw------- 1 root root 1675 Feb 21 20:11 xinjizhiwa-key.pem
-rw-r--r-- 1 root root 1285 Feb 21 20:11 xinjizhiwa.pem

至此,我們用戶的ssl證書申請(qǐng)完畢了;

· 生成用戶kubeconfig文件

1,編輯生成kubeconfig文件的執(zhí)行腳本

[root@k8s231 rbac]# cat kubeconfig.sh?
#!/bin/bash

# 配置集群;
# --certificate-authority:指定K8s的ca根證書文件路徑
# --embed-certs:
# ? 1,true,表示將根證書文件的內(nèi)容寫入到配置文件中,
# ? 2,false,則只是引用配置文件,將kubeconfig
# --server:指定APIServer的地址。
# --kubeconfig:指定kubeconfig的配置文件名稱
kubectl config set-cluster xinjizhiwa-cluster \
? --certificate-authority=/etc/kubernetes/pki/ca.crt \
? --embed-certs=true \
? --server=https://10.0.0.231:6443 \
? --kubeconfig=xinjizhiwa.kubeconfig
?
# 設(shè)置客戶端認(rèn)證,客戶端將來(lái)需要攜帶證書讓服務(wù)端驗(yàn)證
kubectl config set-credentials xinjizhiwa-client \
? --client-key=xinjizhiwa-key.pem \
? --client-certificate=xinjizhiwa.pem \
? --embed-certs=true \
? --kubeconfig=xinjizhiwa.kubeconfig

# 設(shè)置默認(rèn)上下文,可以用于綁定多個(gè)客戶端和服務(wù)端的對(duì)應(yīng)關(guān)系(客戶端和服務(wù)端綁定)。
kubectl config set-context xinjizhiwa \
? --cluster=xinjizhiwa-cluster \
? --user=xinjizhiwa-client \
? --kubeconfig=xinjizhiwa.kubeconfig

# 設(shè)置當(dāng)前使用的上下文(正式生效)
kubectl config use-context xinjizhiwa --kubeconfig=xinjizhiwa.kubeconfig

2,執(zhí)行生成kubeconfig用戶文件的執(zhí)行腳本

? ? ? ? 正式生成用戶

[root@k8s231 rbac]# bash kubeconfig.sh?
Cluster "xinjizhiwa-cluster" set.
User "xinjizhiwa-client" set.
Context "xinjizhiwa" created.
Switched to context "xinjizhiwa".

查看生成的kubeconfig用戶文件

[root@k8s231 rbac]# ll
......
-rw------- 1 root root 5802 Feb 21 20:24 xinjizhiwa.kubeconfig

拓展知識(shí):也可以使用config資源清單編寫生成用戶kubeconfig文件

[root@k8s231 rbac]# cat xinjizhiwa.kubeconfig?
apiVersion: v1
clusters:
- cluster:
? ? certificate-authority-data: ......(/etc/kubernetes/pki/ca.crt)
? ? server: https://10.0.0.231:6443
? name: xinjizhiwa-cluster
contexts:
- context:
? ? cluster: xinjizhiwa-cluster
? ? user: xinjizhiwa-client
? name: xinjizhiwa
current-context: xinjizhiwa
kind: Config
preferences: {}
users:
- name: xinjizhiwa-client
? user:
? ? client-certificate-data: .......(xinjizhiwa.pem或者寫入公鑰串,pem記得base64 -d之后使用)
? ? client-key-data: ......(xinjizhiwa-key.pem)

此時(shí)使用這個(gè)用戶,取查看pod,會(huì)提示你沒有權(quán)限,因?yàn)樵蹅冞€沒有創(chuàng)建、綁定角色;

[root@k8s231 rbac]# kubectl get pods --kubeconfig=xinjizhiwa.kubeconfig

25-k8s集群中-RBAC用戶角色資源權(quán)限,k8s系列,kubernetes,docker,云原生,容器

至此,我們用戶“xinjizhiwa”就創(chuàng)建完成了;

2,創(chuàng)建角色編寫規(guī)則

· 編輯角色資源清單

? ? ? ? 上述內(nèi)容中,我們知道,角色有兩種,一種是全局角色ClusterRole,另一種是局部角色Role;

? ? ? ? 我們先創(chuàng)建一個(gè)局部的Role角色作為學(xué)習(xí);

[root@k8s231 rbac]# cat role.yaml?
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
? name: xinjizhiwa-role
? namespace: default
rules:
? #聲明API組;[""]代表v1;["apps"]代表apps/v1
- apiGroup: ["","apps"]
? #聲明API組下面的資源類型(不支持簡(jiǎn)寫,只能寫全稱)
? resources: ["pods","deployments","services"]
? #聲明使用方式(動(dòng)作增刪改查、、)
? verbs: ["get","list","delete"]

· 創(chuàng)建角色

[root@k8s231 rbac]# kubectl apply -f role.yaml

查看角色

[root@k8s231 rbac]# kubectl get role
NAME ? ? ? ? ? ? ?CREATED AT
xinjizhiwa-role ? 2024-02-21T13:19:34Z

至此,用戶和角色及規(guī)則都創(chuàng)建成功了;

3,綁定用戶與角色

· 編輯綁定資源清單

[root@k8s231 rbac]# cat bind.yaml?
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
? name: xinjizhiwa-bind
? namespace: default
#聲明用戶主體(綁定的用戶是哪個(gè))
subjects:
#由于我們用戶類型有三種,所以需要寫明用戶類型;
- kind: User
? #用戶名稱
? name: xinjizhiwa
? apiGroup: rbac.authorization.k8s.io
#聲明角色主體(綁定的角色是哪個(gè)?)
roleRef:?
? #角色類型
? kind: Role
? #角色名稱
? name: xinjizhiwa-role
? apiGroup: rbac.authorization.k8s.io

· 創(chuàng)建綁定資源

[root@k8s231 rbac]# kubectl apply -f bind.yaml

4,測(cè)試用戶

協(xié)議個(gè)pod資源,使用用戶“xinjizhiwa”創(chuàng)建,發(fā)現(xiàn)創(chuàng)建不了,提示權(quán)限不夠;

因?yàn)椋覀冊(cè)趧?chuàng)建角色規(guī)則的時(shí)候,只給了刪除、和查看的能力,沒有給create創(chuàng)建能力;

[root@k8s231 rbac]# cat pod.yaml?
apiVersion: v1
kind: Pod
metadata:
? name: pod-nginx
spec:
? containers:
? - name: c1
? ? image: nginx:1.20.1-alpine

[root@k8s231 rbac]# kubectl apply -f pod.yaml --kubeconfig=xinjizhiwa.kubeconfig

25-k8s集群中-RBAC用戶角色資源權(quán)限,k8s系列,kubernetes,docker,云原生,容器

因?yàn)槲覀冇衐efault默認(rèn)名稱空間的查看、刪除權(quán)限,所以我們可以進(jìn)行查看;

測(cè)試查看功能

[root@k8s231 rbac]# kubectl get pods --kubeconfig=xinjizhiwa.kubeconfig

25-k8s集群中-RBAC用戶角色資源權(quán)限,k8s系列,kubernetes,docker,云原生,容器

測(cè)試刪除功能

[root@k8s231 rbac]# kubectl delete deploy --all --kubeconfig=xinjizhiwa.kubeconfig

25-k8s集群中-RBAC用戶角色資源權(quán)限,k8s系列,kubernetes,docker,云原生,容器

到此,普通用戶的創(chuàng)建、角色綁定、角色配置就學(xué)習(xí)完畢了;

四、其他節(jié)點(diǎn)使用用戶登錄操作k8s

? ? ? ? 我們有了用戶文件,將用戶文件發(fā)送給“同事”,同事直接使用這個(gè)文件,就可以按照綁定的規(guī)則,操作k8s資源了;

1,模擬將用戶文件發(fā)給同事

? ? ? ? 比如,同事正在使用k8s233,我們把用戶文件發(fā)給他

[root@k8s231 rbac]# scp xinjizhiwa.kubeconfig k8s233:/root/

2,同事在k8s233使用用戶文件操作k8s資源

[root@k8s233 ~]# kubectl get pods --kubeconfig=xinjizhiwa.kubeconfig

25-k8s集群中-RBAC用戶角色資源權(quán)限,k8s系列,kubernetes,docker,云原生,容器

3,操作資源不指定文件,默認(rèn)指定設(shè)置

[root@k8s233 ~]# cp xinjizhiwa.kubeconfig ./.kube/config

[root@k8s233 ~]# kubectl get pods

25-k8s集群中-RBAC用戶角色資源權(quán)限,k8s系列,kubernetes,docker,云原生,容器

五、用戶組Group案例

1,用戶組的概念

1,用戶組的好處在于,無(wú)需單獨(dú)為一個(gè)用戶創(chuàng)建權(quán)限和綁定了,只需要統(tǒng)一把一個(gè)組進(jìn)行授權(quán),然后,將該組的用戶加入進(jìn)去,就沒一個(gè)用戶都擁有該組的權(quán)限了;

2,APIserver會(huì)優(yōu)先校驗(yàn)用戶名(ssl證書中的CN字段),若用戶名沒有對(duì)應(yīng)的權(quán)限,則再去校驗(yàn)用戶組(o)的權(quán)限;

? ? ? ? k8s中的用戶、用戶組都是提取ssl證書簽名字段中的一個(gè)字段,不是在集群中創(chuàng)建的;

--證書簽名中的CN字段:代表用戶

--證書簽名中的o字段:代表用戶組

2,創(chuàng)建用戶組Group

· 編輯cfssl證書請(qǐng)求文件

[root@k8s231 group]# cat ca-group.json?
{
? "signing": {
? ? "default": {
? ? ? "expiry": "87600h"
? ? },
? ? "profiles": {
? ? ? "kubernetes": {
? ? ? ? "usages": [
? ? ? ? ? ? "signing",
? ? ? ? ? ? "key encipherment",
? ? ? ? ? ? "server auth",
? ? ? ? ? ? "client auth"
? ? ? ? ],
? ? ? ? "expiry": "87600h"
? ? ? }
? ? }
? }
}

[root@k8s231 group]# cat xinjizhiwa-csr.json?
{
? "CN": "xinjizhiwa",
? "hosts": [],
? "key": {
? ? "algo": "rsa",
? ? "size": 2048
? },
? "names": [
? ? {
? ? ? "C": "CN",
? ? ? "ST": "BeiJing",
? ? ? "L": "BeiJing",
? ? ? "O": "xinjizhiwa-group",
? ? ? "OU": "System"
? ? }
? ]
}

· 生成用戶組證書

再次聲明,你創(chuàng)建的是用戶、還是用戶組,取決于你的證書名稱選擇的簽名字段,選擇的是CN還是o;

[root@k8s231 group]# cfssl gencert -ca=/etc/kubernetes/pki/ca.crt -ca-key=/etc/kubernetes/pki/ca.key -config=ca-group.json -profile=kubernetes xinjizhiwa-csr.json | cfssljson -bare xinjizhiwa-group

· 編輯腳本生成用戶組kubeconfig用戶組文件

[root@k8s231 group]# cat kubeconfig.sh?
#!/bin/bash

kubectl config set-cluster xinjizhiwa-cluster \
? --certificate-authority=/etc/kubernetes/pki/ca.crt \
? --embed-certs=true \
? --server=https://10.0.0.231:6443 \
? --kubeconfig=xinjizhiwa-group.kubeconfig
?
# 設(shè)置客戶端認(rèn)證
kubectl config set-credentials xinjizhiw-client \
? --client-key=xinjizhiwa-group-key.pem \
? --client-certificate=xinjizhiwa-group.pem \
? --embed-certs=true \
? --kubeconfig=xinjizhiwa-group.kubeconfig

# 設(shè)置默認(rèn)上下文
kubectl config set-context xinjizhiwa-group \
? --cluster=xinjizhiwa-cluster \
? --user=xinjizhiw-client \
? --kubeconfig=xinjizhiwa-group.kubeconfig

# 設(shè)置當(dāng)前使用的上下文
kubectl config use-context xinjizhiwa-group --kubeconfig=xinjizhiwa-group.kubeconfig

· 執(zhí)行腳本生成用戶組文件

[root@k8s231 group]# bash kubeconfig.sh

3,創(chuàng)建角色、綁定用戶組

· 編輯資源清單

[root@k8s231 group]# cat rbac.yaml?
#創(chuàng)建角色
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
? namespace: default
? name: role-group
rules:
- apiGroups: ["","apps"] ?
? resources: ["pods","nodes","services","deployments"] ?
? verbs: ["get", "watch", "list","create"] ?

---
#綁定用戶組與角色
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
? name: group-rolebinding
? namespace: default
#聲明要綁定的用戶/用戶組
subjects:
? # 聲明主體類型:組
- kind: Group
? # 組名(對(duì)應(yīng)的O字段)
? name: xinjizhiwa-group ?
? apiGroup: rbac.authorization.k8s.io
roleRef:
? # 角色類型
? kind: Role ?
? # 綁定角色名稱
? name: role-group
? apiGroup: rbac.authorization.k8s.io

· 創(chuàng)建用戶組kubeconfig文件

[root@k8s231 group]# kubectl apply -f rbac.yaml

此時(shí),我們就擁有了xinjizhiwa-group這個(gè)用戶組了;

4,創(chuàng)建用戶加入用戶組

· 創(chuàng)建用戶

[root@k8s231 user]# cat ca-config.json?
{
? "signing": {
? ? "default": {
? ? ? "expiry": "87600h"
? ? },
? ? "profiles": {
? ? ? "kubernetes": {
? ? ? ? "usages": [
? ? ? ? ? ? "signing",
? ? ? ? ? ? "key encipherment",
? ? ? ? ? ? "server auth",
? ? ? ? ? ? "client auth"
? ? ? ? ],
? ? ? ? "expiry": "87600h"
? ? ? }
? ? }
? }
}
?

[root@k8s231 user]# cat group-user-xjzw.json?
{
? "CN": "xjzw",
? "hosts": [],
? "key": {
? ? "algo": "rsa",
? ? "size": 2048
? },
? "names": [
? ? {
? ? ? "C": "CN",
? ? ? "ST": "BeiJing",
? ? ? "L": "BeiJing",
? ? ? "O": "xinjizhiwa-group",
? ? ? "OU": "System"
? ? }
? ]
}

生成用戶證書

[root@k8s231 user]# cfssl gencert -ca=/etc/kubernetes/pki/ca.crt -ca-key=/etc/kubernetes/pki/ca.key -config=ca-config.json -profile=kubernetes group-user-xjzw.json | cfssljson -bare xjzw

25-k8s集群中-RBAC用戶角色資源權(quán)限,k8s系列,kubernetes,docker,云原生,容器

· xjzw用戶加入用戶組

1,編輯生成kubeconfig用戶文件的執(zhí)行腳本

[root@k8s231 user]# ca kubeconfig.sh?
-bash: ca: command not found
[root@k8s231 user]# cat kubeconfig.sh?
#!/bin/bash

kubectl config set-cluster xinjizhiwa-cluster \
? --certificate-authority=/etc/kubernetes/pki/ca.crt \
? --embed-certs=true \
? --server=https://10.0.0.231:6443 \
? --kubeconfig=xjzw.kubeconfig
?
# 設(shè)置客戶端認(rèn)證
kubectl config set-credentials xjzw-client \
? --client-key=xjzw-key.pem \
? --client-certificate=xjzw.pem \
? --embed-certs=true \
? --kubeconfig=xjzw.kubeconfig

# 設(shè)置默認(rèn)上下文
kubectl config set-context xinjizhiwa-contest \
? --cluster=xinjizhiwa-cluster \
? --user=xjzw-client \
? --kubeconfig=xjzw.kubeconfig

# 設(shè)置當(dāng)前使用的上下文
kubectl config use-context xinjizhiwa-contest --kubeconfig=xjzw.kubeconfig

2,執(zhí)行腳本

[root@k8s231 user]# bash kubeconfig.sh

5,測(cè)試用戶是否擁有用戶組的權(quán)限

[root@k8s231 user]# kubectl get pods --kubeconfig=xjzw.kubeconfig

25-k8s集群中-RBAC用戶角色資源權(quán)限,k8s系列,kubernetes,docker,云原生,容器

總結(jié),只要擁有了用戶組,我們創(chuàng)建用戶的時(shí)候,簽名中“O”字段,與用戶組名相同,那么創(chuàng)建出來(lái)的用戶,就擁有了用戶組的權(quán)限,就不在需要配置角色、綁定了;方便了很多;

六、基于【服務(wù)賬號(hào)serviceaccount】授權(quán)

? ? ? ? serviceaccount用戶,簡(jiǎn)稱sa資源,用于自動(dòng)化程序的用戶創(chuàng)建;

? ? ? ? 創(chuàng)建sa用戶,就不需要使用證書來(lái)創(chuàng)建了,它是k8s集群中的一個(gè)資源,sa資源;

1,創(chuàng)建sa資源

· 聲明式創(chuàng)建

[root@k8s231 sa]# vim sa01.yaml
apiVersion: v1
kind: ServiceAccount
metadata:?
? name: py01

[root@k8s231 sa]# kubectl apply -f sa01.yaml?
serviceaccount/py01 created

查看sa服務(wù)賬號(hào)

[root@k8s231 sa]# kubectl get sa
NAME ? ? ?SECRETS ? AGE
default ? 1 ? ? ? ? 51d
py01 ? ? ?1 ? ? ? ? 4s

· 響應(yīng)式創(chuàng)建

[root@k8s231 sa]# kubectl create serviceaccount py02

查看sa用戶

[root@k8s231 sa]# kubectl get sa
NAME ? ? ?SECRETS ? AGE
default ? 1 ? ? ? ? 51d
py01 ? ? ?1 ? ? ? ? 2m4s
py02 ? ? ?1 ? ? ? ? 4s

2,授權(quán)python程序?qū)8s-API的訪問權(quán)限

· 創(chuàng)建用戶

[root@k8s231 sa]# kubectl create serviceaccount py02

· 創(chuàng)建角色

[root@k8s231 sa]# vim role.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
? name: python-role
rules:
- apiGroups: [""]
? resources: ["pods"]
? verbs: ["get","watch","list"]

[root@k8s231 sa]# kubectl apply -f role.yaml

· 綁定sa賬號(hào)和角色

[root@k8s231 sa]# vim bind.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
? name: python-role-sa
subjects:
- kind: ServiceAccount?
? name: py02
roleRef:
? kind: Role
? name: python-role
? apiGroup: rbac.authorization.k8s.io

[root@k8s231 sa]# kubectl apply -f bind.yaml

3,部署一個(gè)python的pod資源

[root@k8s231 sa]# vim pod.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
? name: dm-py
spec:
? replicas: 2
? selector:
? ? matchLabels:
? ? ? apps: python
? template:
? ? metadata:
? ? ? labels:
? ? ? ? ?apps: python
? ? spec:
? ? ? #這里就是sa賬號(hào),指定sa的名稱,請(qǐng)確認(rèn)該賬號(hào)是有權(quán)限訪問K8S集群的喲!
? ? ? serviceAccountName: py02
? ? ? containers:
? ? ? - image: python:3.9.16-alpine3.16
? ? ? ? name: py
? ? ? ? command:
? ? ? ? - tail?
? ? ? ? - -f
? ? ? ? - /etc/hosts

[root@k8s231 sa]# kubectl apply -f pod.yaml

4,進(jìn)入pod中執(zhí)行python代碼

[root@k8s231 sa]# kubectl exec -it dm-py-64975879c8-b9sxg -- sh
/ # python --version
Python 3.9.16

#寫一個(gè)python腳本
/ # cat > view-k8s-resources.py <<EOF
> from kubernetes import client, config
>?
> with open('/var/run/secrets/kubernetes.io/serviceaccount/token') as f:
> ? ? ?token = f.read()
>?
> configuration = client.Configuration()
> configuration.host = "https://kubernetes" ?# APISERVER地址
> configuration.ssl_ca_cert="/var/run/secrets/kubernetes.io/serviceaccount/ca.crt" ?# CA證書?
> configuration.verify_ssl = True ? # 啟用證書驗(yàn)證
> configuration.api_key = {"authorization": "Bearer " + token} ?# 指定Token字符串
> client.Configuration.set_default(configuration)
> apps_api = client.AppsV1Api()?
> core_api = client.CoreV1Api()?
> try:
> ? print("###### Deployment列表 ######")
> ? #列出default命名空間所有deployment名稱
> ? for dp in apps_api.list_namespaced_deployment("default").items:
> ? ? print(dp.metadata.name)
> except:
> ? print("沒有權(quán)限訪問Deployment資源!")
>?
> try:
> ? #列出default命名空間所有pod名稱
> ? print("###### Pod列表 ######")
> ? for po in core_api.list_namespaced_pod("default").items:
> ? ? print(po.metadata.name)
> except:
> ? print("沒有權(quán)限訪問Pod資源!")
> EOF
/ #?

####安裝py使用k8s的插件########
/ # pip install kubernetes -i https://pypi.tuna.tsinghua.edu.cn/simple/

#執(zhí)行python腳本

/ # python3 view-k8s-resources.py
###### Deployment列表 ######
沒有權(quán)限訪問Deployment資源!
###### Pod列表 ######
dm-py-64975879c8-b9sxg
dm-py-64975879c8-z76fp
pod-nginx

至此,關(guān)于k8s的RBAC的學(xué)習(xí),就此結(jié)束;文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-835535.html

到了這里,關(guān)于25-k8s集群中-RBAC用戶角色資源權(quán)限的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • K8s攻擊案例:RBAC配置不當(dāng)導(dǎo)致集群接管

    K8s攻擊案例:RBAC配置不當(dāng)導(dǎo)致集群接管

    01、概述 Service Account本質(zhì)是服務(wù)賬號(hào),是Pod連接K8s集群的憑證。在默認(rèn)情況下,系統(tǒng)會(huì)為創(chuàng)建的Pod提供一個(gè)默認(rèn)的Service Account,用戶也可以自定義Service Account,與Service Account關(guān)聯(lián)的憑證會(huì)自動(dòng)掛載到Pod的文件系統(tǒng)中。 當(dāng)攻擊者通過(guò)某個(gè)web應(yīng)用獲取到一個(gè)Pod權(quán)限時(shí),如果RBAC權(quán)

    2024年02月02日
    瀏覽(23)
  • Kubernetes技術(shù)--k8s核心技術(shù)集群的安全機(jī)制RBAC

    1.引入 我們?cè)谠L問k8s的集群的時(shí)候,需要經(jīng)過(guò)一下幾個(gè)步驟: -a: 認(rèn)證 ?? -1 ). 傳輸安全:對(duì)外是不暴露端口:8080,只能夠在內(nèi)部訪問,對(duì)外使用的是6443端口。 ?? -2). 客戶端認(rèn)證的常用幾種方式: -https 證書 基于ca證書 -https token 認(rèn)證 通過(guò)token識(shí)別用戶 -https

    2024年02月10日
    瀏覽(31)
  • k8s通過(guò)sa和自建角色實(shí)現(xiàn)權(quán)限精細(xì)化分配

    角色role-sa 具有的權(quán)限僅僅是namespace planck內(nèi)的所有pod的查看權(quán)限,以及deployment的查看權(quán)限,無(wú)權(quán)刪除修改這些資源 為什么要授權(quán)是因?yàn)閟a內(nèi)的secrets里的token只有在dashboard內(nèi)使用,而上面的角色和角色綁定都是dev這個(gè)namespace內(nèi)的,這樣綁定后,拿到token才可以登錄到dashboard的首

    2024年02月13日
    瀏覽(27)
  • 高可用containerd搭建K8s集群【v1.25】

    [toc] 在開始之前,部署Kubernetes集群機(jī)器需要滿足以下幾個(gè)條件: 一臺(tái)或多臺(tái)機(jī)器,操作系統(tǒng) CentOS7.x-86_x64 硬件配置:2GB或更多RAM,2個(gè)CPU或更多CPU,硬盤30GB或更多 集群中所有機(jī)器之間網(wǎng)絡(luò)互通 可以訪問外網(wǎng),需要拉取鏡像 禁止swap分區(qū) 角色 IP k8s-master1 192.168.4.114 k8s-master2

    2024年02月09日
    瀏覽(24)
  • 【Kubernetes】kubeadm安裝k8s1.25.0高可用集群

    【Kubernetes】kubeadm安裝k8s1.25.0高可用集群

    詳情請(qǐng)參考 : 【Kubernetes】kubeadm安裝k8s穩(wěn)定版(1.23.1)高可用集群 這里不再贅述 這部分內(nèi)容還沒發(fā)布。。。后續(xù)有空再整理更新啦。 master、node節(jié)點(diǎn)都需要操作 docker也要安裝,docker跟containerd不沖突,安裝docker是為了能基于dockerfile構(gòu)建鏡像。 master、node節(jié)點(diǎn)都需要操作 3臺(tái)機(jī)

    2024年01月16日
    瀏覽(28)
  • yum部署kubernetes(k8s)集群、k8s常用資源管理

    目錄 一、環(huán)境搭建 1、準(zhǔn)備環(huán)境 1)計(jì)算機(jī)說(shuō)明,建議系統(tǒng)版本7.4或者7.6 2)修改所有主機(jī)的計(jì)算機(jī)名設(shè)置host文件 ?2、安裝master節(jié)點(diǎn) 1)安裝etcd配置etcd 2)安裝k8s-master節(jié)點(diǎn) 3)配置apiserver 4)配置controller和scheduler 5)啟動(dòng)k8s服務(wù) 3、安裝k8s-master上的node 1)安裝node 2)配置kube

    2024年02月13日
    瀏覽(35)
  • flink集群與資源@k8s源碼分析-集群

    flink集群與資源@k8s源碼分析-集群

    本文是flink集群與資源@k8s源碼分析系列的第二篇-集群 下面詳細(xì)分析各用例 k8s集群支持session和application模式,job模式將會(huì)被廢棄,本文分析session模式集群 Configuration作為配置容器,幾乎所有的構(gòu)建需要從配置類獲取配置項(xiàng),這里不顯示關(guān)聯(lián)關(guān)系 1. 用戶命令行執(zhí)行kubernates-ses

    2024年02月07日
    瀏覽(24)
  • ?k8s 1.24 1.25 集群使用docker作為容器

    背景 在新版本Kubernetes環(huán)境(1.24以及以上版本)下官方不在支持docker作為容器運(yùn)行時(shí)了,若要繼續(xù)使用docker 需要對(duì)docker進(jìn)行配置一番。需要安裝cri-docker作為Kubernetes容器 查看當(dāng)前容器運(yùn)行時(shí) 安裝docker 安裝cri-docker 為kubelet配置容器運(yùn)行時(shí) 關(guān)于 https://www.oiox.cn/ https://www.oiox.cn

    2024年02月12日
    瀏覽(27)
  • 統(tǒng)計(jì)k8s集群的資源使用情況

    kubectl top 命令可以很方便地查看 k8s 集群中部署應(yīng)用的實(shí)際資源使用情況。 使用 kubectl top 命令需要先部署 metrics 組件,metrics 的部署請(qǐng)參考下面文章: helm部署metrics-server 查看指定命名空間資源使用情況 查看所有命名空間的資源使用情況

    2024年02月11日
    瀏覽(40)
  • k8s配置ingress訪問集群外部資源

    使用ingress訪問外部資源,首先需要?jiǎng)?chuàng)建service指向我們需要訪問的資源 而每個(gè)service包含一個(gè)endpoint endpoint是k8s集群中的一個(gè)資源對(duì)象,存儲(chǔ)在etcd中,用來(lái)記錄一個(gè)service對(duì)應(yīng)的所有pod的訪問地址。service配置selector,endpoint controller才會(huì)自動(dòng)創(chuàng)建對(duì)應(yīng)的endpoint對(duì)象;否則,不會(huì)生

    2024年02月09日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包