25-k8s集群中-RBAC用户角色资源权限
一、RBAC概述
1,k8s集群的交互逻辑(简单了解)
我们通过k8s各组件架构,知道各个组件之间是使用https进行数据加密及交互的,那么同理,我们作为“使用”k8s的各种资源的使用者,也是通过https进行数据加密的;
k8s通过我们家目录下的证书来判断我们是谁?通过证书内容来认定我们的权限;
用户证书的位置
[root@k8s231 ~]# ll -a .kube/config
-rw------- 1 root root 5634 Jan 1 19:40 .kube/config
2,k8s的安全架构(简单了解)
3,RBAC用户授权的逻辑(重要)
用户/主题Topic
1,User
2,SerciceAccount
3,Group
用户角色:
1,Role:局部资源角色
2,ClusterRole:全局资源角色
角色绑定:
1,RoleBinding
2,ClusterRoleBinding
4,查看现有的集群默认角色
[root@k8s231 ~]# kubectl get clusterrole | grep -v system
admin:主要用于授权命名空间所有读写的权限
cluster-admin:超级管理员,由集群所有权限
edit:允许对大多数对象进行读写操作,不允许查看或者修改角色、角色绑定;
view:允许对命名空间大多数对象进行读写,不允许查看角色、角色绑定、secret;
#####
kubeadm用户,只有使用kubeadm部署k8s时才会出现,不用关心它;
二、流程介绍
1,用户的创建流程
1,User
2,SerciceAccount
3,Group
本质上讲,在k8s系统中,用户,就是一个文件,这个文件在当前登录用户的家目录下;
这个文件config,就代表“我”是谁;
这里面并没有角色、权限信息,角色和权限信息,在其他位置;
[root@k8s231 ~]# ll .kube/config
-rw------- 1 root root 5634 Jan 1 19:40 .kube/config
所以,要创建用户,就是要创建这个文件;
那么如何创建这个文件呐?
· ssl流程介绍
知道了ssl原理,https请求过程,我们就了解了,ssl的安全机制;
实际上k8s当中“根证书”早就生成好了,在我们kubeadm部署的时候,就自动帮我们生成了;
k8s是模拟ca机构,给自己颁发证书,自己验证自己,所以,整数中有私钥、公钥等;
[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机构的私钥
-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
· 生成用户证书
一个用户一个证书,这个用户证书,就是用来生成,用户文件的(也就是家目录下的config)
· 生成kubeconfig用户授权文件
有了这个授权文件,我们就拥有了一个用户了;
但是,还没有任何权限,还无法使用;
2,创建角色和规则
通过资源清单的方式,创建角色和规则;
角色就是:
1,Role:局部资源角色
2,ClusterRole:全局资源角色
规则就是:这个角色的权限;能使用什么资源、不能使用什么资源,,,,
3,角色与用户的绑定
根据角色的不同,创建资源清单,对应不同的绑定资源清单的编写;
1,RoleBinding
2,ClusterRoleBinding
只要角色和用户绑定完成,那么,RBAC的整个流程就结束了;
我们就成功创建了一个带有特定权限的用户;就可以分发给“同事”进行使用了;
4,逻辑流程的总结
三、RBAC创建初体验
1,创建用户【user】
· 生成用户ssl证书
以往我们使用openssl的工具命令生成证书,比较繁琐,本次学习,我给大家介绍一个证书生成工具,叫做cfssl证书生成工具;
1,上传/下载cfssl证书生成工具
cfssl工具百度网盘地址:
链接: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文件改名
为什么改名?为了便于使用~如果你不嫌费力,可以不改~
[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文件编程全局命令
将这三个文件,移动到/usr/local/bin目录下,编程全局命令~
[root@k8s231 rbac]# mv ./* /usr/local/bin/
5,给cfssl执行文件加执行权限
[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"
}
}
}
}
客户端验证签名证书
[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
参数解释:
#使用k8s自带的证书来签发客户端证书(位置就在/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证书申请完毕了;
· 生成用户kubeconfig文件
1,编辑生成kubeconfig文件的执行脚本
[root@k8s231 rbac]# cat kubeconfig.sh
#!/bin/bash# 配置集群;
# --certificate-authority:指定K8s的ca根证书文件路径
# --embed-certs:
# 1,true,表示将根证书文件的内容写入到配置文件中,
# 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
# 设置客户端认证,客户端将来需要携带证书让服务端验证
kubectl config set-credentials xinjizhiwa-client \
--client-key=xinjizhiwa-key.pem \
--client-certificate=xinjizhiwa.pem \
--embed-certs=true \
--kubeconfig=xinjizhiwa.kubeconfig# 设置默认上下文,可以用于绑定多个客户端和服务端的对应关系(客户端和服务端绑定)。
kubectl config set-context xinjizhiwa \
--cluster=xinjizhiwa-cluster \
--user=xinjizhiwa-client \
--kubeconfig=xinjizhiwa.kubeconfig# 设置当前使用的上下文(正式生效)
kubectl config use-context xinjizhiwa --kubeconfig=xinjizhiwa.kubeconfig
2,执行生成kubeconfig用户文件的执行脚本
正式生成用户
[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
拓展知识:也可以使用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)
此时使用这个用户,取查看pod,会提示你没有权限,因为咱们还没有创建、绑定角色;
[root@k8s231 rbac]# kubectl get pods --kubeconfig=xinjizhiwa.kubeconfig
至此,我们用户“xinjizhiwa”就创建完成了;
2,创建角色编写规则
· 编辑角色资源清单
上述内容中,我们知道,角色有两种,一种是全局角色ClusterRole,另一种是局部角色Role;
我们先创建一个局部的Role角色作为学习;
[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组下面的资源类型(不支持简写,只能写全称)
resources: ["pods","deployments","services"]
#声明使用方式(动作增删改查、、)
verbs: ["get","list","delete"]
· 创建角色
[root@k8s231 rbac]# kubectl apply -f role.yaml
查看角色
[root@k8s231 rbac]# kubectl get role
NAME CREATED AT
xinjizhiwa-role 2024-02-21T13:19:34Z
至此,用户和角色及规则都创建成功了;
3,绑定用户与角色
· 编辑绑定资源清单
[root@k8s231 rbac]# cat bind.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: xinjizhiwa-bind
namespace: default
#声明用户主体(绑定的用户是哪个)
subjects:
#由于我们用户类型有三种,所以需要写明用户类型;
- kind: User
#用户名称
name: xinjizhiwa
apiGroup: rbac.authorization.k8s.io
#声明角色主体(绑定的角色是哪个?)
roleRef:
#角色类型
kind: Role
#角色名称
name: xinjizhiwa-role
apiGroup: rbac.authorization.k8s.io
· 创建绑定资源
[root@k8s231 rbac]# kubectl apply -f bind.yaml
4,测试用户
协议个pod资源,使用用户“xinjizhiwa”创建,发现创建不了,提示权限不够;
因为,我们在创建角色规则的时候,只给了删除、和查看的能力,没有给create创建能力;
[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
因为我们有default默认名称空间的查看、删除权限,所以我们可以进行查看;
测试查看功能
[root@k8s231 rbac]# kubectl get pods --kubeconfig=xinjizhiwa.kubeconfig
测试删除功能
[root@k8s231 rbac]# kubectl delete deploy --all --kubeconfig=xinjizhiwa.kubeconfig
到此,普通用户的创建、角色绑定、角色配置就学习完毕了;
四、其他节点使用用户登录操作k8s
我们有了用户文件,将用户文件发送给“同事”,同事直接使用这个文件,就可以按照绑定的规则,操作k8s资源了;
1,模拟将用户文件发给同事
比如,同事正在使用k8s233,我们把用户文件发给他
[root@k8s231 rbac]# scp xinjizhiwa.kubeconfig k8s233:/root/
2,同事在k8s233使用用户文件操作k8s资源
[root@k8s233 ~]# kubectl get pods --kubeconfig=xinjizhiwa.kubeconfig
3,操作资源不指定文件,默认指定设置
[root@k8s233 ~]# cp xinjizhiwa.kubeconfig ./.kube/config
[root@k8s233 ~]# kubectl get pods
五、用户组Group案例
1,用户组的概念
1,用户组的好处在于,无需单独为一个用户创建权限和绑定了,只需要统一把一个组进行授权,然后,将该组的用户加入进去,就没一个用户都拥有该组的权限了;
2,APIserver会优先校验用户名(ssl证书中的CN字段),若用户名没有对应的权限,则再去校验用户组(o)的权限;
k8s中的用户、用户组都是提取ssl证书签名字段中的一个字段,不是在集群中创建的;
--证书签名中的CN字段:代表用户
--证书签名中的o字段:代表用户组
2,创建用户组Group
· 编辑cfssl证书请求文件
[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"
}
]
}
· 生成用户组证书
再次声明,你创建的是用户、还是用户组,取决于你的证书名称选择的签名字段,选择的是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/bashkubectl 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
# 设置客户端认证
kubectl config set-credentials xinjizhiw-client \
--client-key=xinjizhiwa-group-key.pem \
--client-certificate=xinjizhiwa-group.pem \
--embed-certs=true \
--kubeconfig=xinjizhiwa-group.kubeconfig# 设置默认上下文
kubectl config set-context xinjizhiwa-group \
--cluster=xinjizhiwa-cluster \
--user=xinjizhiw-client \
--kubeconfig=xinjizhiwa-group.kubeconfig# 设置当前使用的上下文
kubectl config use-context xinjizhiwa-group --kubeconfig=xinjizhiwa-group.kubeconfig
· 执行脚本生成用户组文件
[root@k8s231 group]# bash kubeconfig.sh
3,创建角色、绑定用户组
· 编辑资源清单
[root@k8s231 group]# cat rbac.yaml
#创建角色
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
# 组名(对应的O字段)
name: xinjizhiwa-group
apiGroup: rbac.authorization.k8s.io
roleRef:
# 角色类型
kind: Role
# 绑定角色名称
name: role-group
apiGroup: rbac.authorization.k8s.io
· 创建用户组kubeconfig文件
[root@k8s231 group]# kubectl apply -f rbac.yaml
此时,我们就拥有了xinjizhiwa-group这个用户组了;
4,创建用户加入用户组
· 创建用户
[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
· xjzw用户加入用户组
1,编辑生成kubeconfig用户文件的执行脚本
[root@k8s231 user]# ca kubeconfig.sh
-bash: ca: command not found
[root@k8s231 user]# cat kubeconfig.sh
#!/bin/bashkubectl 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
# 设置客户端认证
kubectl config set-credentials xjzw-client \
--client-key=xjzw-key.pem \
--client-certificate=xjzw.pem \
--embed-certs=true \
--kubeconfig=xjzw.kubeconfig# 设置默认上下文
kubectl config set-context xinjizhiwa-contest \
--cluster=xinjizhiwa-cluster \
--user=xjzw-client \
--kubeconfig=xjzw.kubeconfig# 设置当前使用的上下文
kubectl config use-context xinjizhiwa-contest --kubeconfig=xjzw.kubeconfig
2,执行脚本
[root@k8s231 user]# bash kubeconfig.sh
5,测试用户是否拥有用户组的权限
[root@k8s231 user]# kubectl get pods --kubeconfig=xjzw.kubeconfig
总结,只要拥有了用户组,我们创建用户的时候,签名中“O”字段,与用户组名相同,那么创建出来的用户,就拥有了用户组的权限,就不在需要配置角色、绑定了;方便了很多;
六、基于【服务账号serviceaccount】授权
serviceaccount用户,简称sa资源,用于自动化程序的用户创建;
创建sa用户,就不需要使用证书来创建了,它是k8s集群中的一个资源,sa资源;
1,创建sa资源
· 声明式创建
[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服务账号
[root@k8s231 sa]# kubectl get sa
NAME SECRETS AGE
default 1 51d
py01 1 4s
· 响应式创建
[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,授权python程序对k8s-API的访问权限
· 创建用户
[root@k8s231 sa]# kubectl create serviceaccount py02
· 创建角色
[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账号和角色
[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,部署一个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账号,指定sa的名称,请确认该账号是有权限访问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,进入pod中执行python代码
[root@k8s231 sa]# kubectl exec -it dm-py-64975879c8-b9sxg -- sh
/ # python --version
Python 3.9.16#写一个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 # 启用证书验证
> 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("没有权限访问Deployment资源!")
>
> try:
> #列出default命名空间所有pod名称
> print("###### Pod列表 ######")
> for po in core_api.list_namespaced_pod("default").items:
> print(po.metadata.name)
> except:
> print("没有权限访问Pod资源!")
> EOF
/ #####安装py使用k8s的插件########
/ # pip install kubernetes -i https://pypi.tuna.tsinghua.edu.cn/simple/#执行python脚本
/ # python3 view-k8s-resources.py
###### Deployment列表 ######
没有权限访问Deployment资源!
###### Pod列表 ######
dm-py-64975879c8-b9sxg
dm-py-64975879c8-z76fp
pod-nginx
至此,关于k8s的RBAC的学习,就此结束;
相关文章:
25-k8s集群中-RBAC用户角色资源权限
一、RBAC概述 1,k8s集群的交互逻辑(简单了解) 我们通过k8s各组件架构,知道各个组件之间是使用https进行数据加密及交互的,那么同理,我们作为“使用”k8s的各种资源的使用者,也是通过https进行数…...
Android 面试问题 2024 版(其二)
Android 面试问题 2024 版(其二) 六、多线程和并发七、性能优化八、测试九、安全十、Material设计和 **UX/UI** 六、多线程和并发 Android 中的进程和线程有什么区别? 答:进程是在自己的内存空间中运行的应用程序的单独实例&…...
SpringMVC的异常处理
异常分类 : 预期异常(检查型异常)和运行时异常 1、使用@ExceptionHandle注解处理异常 @ExceptionHandle(value={***.class} 异常类型) public modelandview handelException(){} 仅限当前类使用 2、全局处理方式 @ControllerAdvice + @ExceptionHandle 新建类 @Cont…...
【计算机网络】1 因特网概述
一.网络、互联网和因特网 1.网络(network),由若干结点(node)和连接这些结点的链路(link)组成。 2.多个网络还可以通过路由器互联起来,这样就构成了一个覆盖范围更大的网络…...
【Ubuntu】Anaconda的安装和使用
目录 1 安装 2 使用 1 安装 (1)下载安装包 官网地址:Unleash AI Innovation and Value | Anaconda 点击Free Download 按键。 然后 点击下图中的Download开始下载安装包。 (2)安装 在安装包路径下打开终端&#…...
OpenAI推出首个AI视频模型Sora:重塑视频创作与体验
链接:华为OD机考原题附代码 Sora - 探索AI视频模型的无限可能 随着人工智能技术的飞速发展,AI视频模型已成为科技领域的新热点。而在这个浪潮中,OpenAI推出的首个AI视频模型Sora,以其卓越的性能和前瞻性的技术,引领着…...
mybatis总结传参三
十、(不推荐)多个参数-按位置传参 参数位置从 0 开始, 引用参数语法 #{ arg 位置 } , 第一个参数是 #{arg0}, 第二个是 #{arg1} 注意: mybatis-3.3 版本和之前的版本使用 #{0},#{1} 方式, 从 myba…...
JSONVUE
1.JSON学习 1.概念: JSON是把JS对象变成字符串. 2.作用: 多用于网络中数据传输. JavaScript对象 let person{name:"张三",age:18}//将JS对象转换为 JSON数据let person2JSON{"name":"张三","age":18}; 3.JS对象与JSON字符串转换…...
OSCP靶机--Medjed
OSCP靶机–Medjed 考点:(1.ftp文件上传 2.sql注入写shell 3.第三软件提权) 1.nmap ┌──(root㉿kali)-[~/Desktop] └─# nmap 192.168.200.127 -sV -sC -p- --min-rate 5000 Starting Nmap 7.92 ( https://nmap.org ) at 2024-02-25 19:42 EST Nmap scan repo…...
【Unity】Unity与安卓交互
问题描述 Unity和安卓手机进行交互,是我们开发游戏中最常见的场景。本教程将从一个简单的例子来演示一下。 本教程需要用到Android Studio2021.1.1 1.Android Studio新建一个工程 2.选择Empty Activity 然后点击Next 3.点击Finish完成创建 4.选择File-New-New Mo…...
QYFB-02 无线风力报警仪 风速风向超限声光报警
产品概述 无线风力报警仪是由测控报警仪、无线风速风向传感器和太阳能供电盒组成,可观测大气中的瞬时风速,具有风速报警设定和报警输出控制功能;风力报警仪采用无线信号传输、显示屏输出,风速显示采用高亮LED数码管显示ÿ…...
css知识:盒模型盒子塌陷BFC
1. css盒模型 标准盒子模型,content-box 设置宽度即content的宽度 width content 总宽度content(width设定值) padding border IE/怪异盒子模型,border-box width content border padding 总宽度 width设定值 2. 如何…...
Nginx的反向代理:实现灵活的请求转发和内容缓存
一、引言:代理服务器的简介 本节介绍代理服务器的基本配置。学习如何通过不同协议将 NGINX 请求传递给代理的服务器,修改发送到代理服务器的客户端请求标头,以及配置来自代理服务器的响应缓冲。 代理通常用于在多个服务器之间分配负载&…...
免费享受企业级安全:雷池社区版WAF,高效专业的Web安全的方案
网站安全成为了每个企业及个人不可忽视的重要议题。 随着网络攻击手段日益狡猾和复杂,选择一个强大的安全防护平台变得尤为关键。 推荐的雷池社区版——一个为网站提供全面安全防护解决方案的平台,它不仅具备高效的安全防护能力,还让网站安…...
基于SpringBoot的航班进出港管理系统
文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式 🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 &…...
Odoo系统安装部署并结合内网穿透实现固定域名访问本地ERP系统
文章目录 前言1. 下载安装Odoo:2. 实现公网访问Odoo本地系统:3. 固定域名访问Odoo本地系统 前言 Odoo是全球流行的开源企业管理套件,是一个一站式全功能ERP及电商平台。 开源性质:Odoo是一个开源的ERP软件,这意味着企…...
幻兽帕鲁(Palworld 1.4.1)私有服务器搭建(docker版)
文章目录 说明客户端安装服务器部署1Panel安装和配置docker服务初始化设置设置开机自启动设置镜像加速 游戏服务端部署游戏服务端参数可视化配置 Palworld连接服务器问题总结 说明 服务器硬件要求:Linux系统/Window系统(x86架构,armbian架构…...
好书推荐丨细说Python编程:从入门到科学计算
文章目录 写在前面Python简介推荐图书内容简介编辑推荐作者简介 推荐理由粉丝福利写在最后 写在前面 本期博主给大家推荐一本Python基础入门的全新正版书籍,对Python、机器学习、人工智能感兴趣的小伙伴们快来看看吧~ Python简介 Python 是一种广泛使用的高级、解…...
智慧城市与数字孪生:共创未来城市新篇章
一、引言 随着科技的飞速发展,智慧城市与数字孪生已成为现代城市建设的核心议题。智慧城市注重利用先进的信息通信技术,提升城市治理水平,改善市民生活品质。而数字孪生则通过建立物理城市与数字模型之间的连接,为城市管理、规划…...
Java数据结构---初识集合框架
目录 一、什么是集合框架 二、集合框架的重要性 三、背后涉及的数据结构及算法 1.什么是数据结构 2.容器背后对应的数据结构 3.相关的Java知识 4.什么是算法 一、什么是集合框架 Java 集合框架 Java Collection Framework ,又被称为容器 container ࿰…...
Spring Cloud学习
1、什么是SpringCloud Spring cloud 流应用程序启动器是基于 Spring Boot 的 Spring 集成应用程序,提供与外部系统的集成。Spring cloud Task,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用程序。Spring cloud 流应用程…...
【计算机网络】1.4 接入网和物理媒体
1.4 接入网和物理媒体 问题:怎样将端系统和边缘路由器连接? 答:有线方式(住宅接入网络、单位接入网络等)或无线方式(无线接入网络)。 有线接入方式 光纤同轴混合网是基于已有的有线电视网开发的…...
关于螺栓的基本拧紧技术了解多少——SunTorque智能扭矩系统
螺栓是机械中常见的紧固件之一,用于将两个或多个部件连接在一起,并保持它们之间的紧密配合。拧紧螺栓是一项基本的技术,但在实际操作中,许多工人并不了解正确的拧紧方法,从而导致螺栓松动、连接失效等问题的出现。因此…...
C# .Net 发布后,把dll全部放在一个文件夹中,让软件目录更整洁
PublishFolderCleaner – Github 测试环境: .Net 8 Program.cs 代码 // https://github.com/dotnet-campus/dotnetcampus.DotNETBuildSDK/tree/master/PublishFolderCleanerusing System.Diagnostics; using System.Text;// 名称, 不用写 .exe var exeName "AbpDemo&…...
[更新]ARCGIS之土地耕地占补平衡、进出平衡系统报备坐标txt格式批量导出工具(定制开发版)
序言 之前开发的耕地占补平衡报备格式,现在之前的基础上集成了耕地进出平衡报备格式导出。 之前版本软件详见:软件介绍 一、软件简介 本软件是基于arcgis二次开发的工具(插件),需要授权后才能使用; 本软件…...
todolist
一开始想自己写个todolist的网页,一直没时间,直接拿这个博客记录了,因为仅我可见比较麻烦,就放在全部可见记录了 目录 2024年3月todoes了解一下深入学习k8s,比如pod运行多个容器 ,编写自己的镜像 2024年2月…...
【Java程序设计】【C00307】基于Springboot的基Hadoop的物品租赁管理系统(有论文)
基于Springboot的基Hadoop的物品租赁管理系统(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的基于 Hadoop的物品租赁系统的设计与实现,本系统有管理员、用户二种角色权限; 前台首页&#…...
GIT中对子仓库的使用方法介绍
git 子仓库 主仓库中添加子仓库 git submodule add <url> <path>更新子代码代码 git submodule update --init克隆含有子仓库的仓库 git clone --recurse-submodules <url>主仓库中删除子仓库 1、进入包含子仓库的父仓库的根目录 2、使用以下命令将子仓…...
ClickHouse 指南(三)最佳实践 -- 跳数索引
Data Skipping Indexes Data Skipping Indexes 2 1、简介 影响ClickHouse查询性能的因素很多。在大多数情况下,关键因素是ClickHouse在计算查询WHERE子句条件时是否可以使用主键。因此,选择适用于最常见查询模式的主键对于有效的表设计至关重要。 然…...
Mybatis总结--传参二
#叫做占位符 Mybatis是封装的JDBC 增强版 内部还是用的jdbc 每遇到一个#号 这里就会变为?占位符 一个#{}就是对应一个问号 一个占位符 用这个对象执行sql语句没有sql注入的风险 八、多个参数-使用Param 当 Dao 接口方法有多个参数,需要通过名称使…...
上海宝山区做网站的/产品推广方式
今天在使用jee的eclipse的时候打开提示 解决办法在网上搜寻了一下,有两种方式 1、关闭360相关的软件 2、将eclipse中的配置文件eclipse.ini改变如下 -startupplugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar--launcher.libraryplugins/org.eclipse.equi…...
网站原型设计和版式设计/百度手机助手下载2022官方正版
文章目录一、克隆表二、清空表三、创建临时表总结1.删除类型2.删除一、克隆表 将数据表的数据记录生成到新的表中 方法一: create table yaling like xcf; #复制格式,通过LIKE方法,复制xcf表结构生成yaling表方法二: create ta…...
网站建设分工明细表/百度宣传推广费用
导读 这篇文章主要介绍了如何在 Python 中注释,帮助其他开发者理解你的代码,以及代码的目的。感兴趣的朋友可以了解下 在写 Python 代码的时候,一个很好的编码实践就是使得你的代码简洁,易懂。组织代码,设置变量&#…...
已认证网站服务费怎么做/舆情通
某大公司有这么一个规定:只要有一个员工过生日,当天所有员工全部放假一天。但在其余时候,所有员工都没有假期,必须正常上班。这个公司需要雇用多少员工,才能让公司一年内所有员工的总工作时间期望值最大? …...
社区门户网站建设招标公告/整合营销策划名词解释
要求: R4为ISP,其上只能配置IP地址;R4与其他所有直连设备间使用公有IP;R3–R5/R6/R7为MGRE环境,R3为中心站点;整个OSPF环境IP地址为172.16.0.0/16;所有设备均可以访问R4的环回;减少…...
官方网站找oem做洗发水厂家/最新seo操作
公共管理是公权力的行使者决定公共资源在公共领域配置的过程。公权力配置公共资源并不是随意性的,科学配置公共资源必须建立在对公共领域详细了解的基础上;否则,公共资源的配置就会出现扭曲,最终导致公共资源的浪费和无效配置。传…...