当前位置: 首页 > news >正文

立即关注公众号宁波seo排名优化培训

立即关注公众号,宁波seo排名优化培训,个人网站可以做信息网站吗,php开发系统网站建设K8s 的鉴权管理(一):基于角色的访问控制(RBAC 鉴权) 1.Kubernetes 的鉴权管理1.1 审查客户端请求的属性1.2 确定请求的操作 2.基于角色的访问控制(RBAC 鉴权)2.1 基于角色的访问控制中的概念2.1…

K8s 的鉴权管理(一):基于角色的访问控制(RBAC 鉴权)

  • 1.Kubernetes 的鉴权管理
    • 1.1 审查客户端请求的属性
    • 1.2 确定请求的操作
  • 2.基于角色的访问控制(RBAC 鉴权)
    • 2.1 基于角色的访问控制中的概念
      • 2.1.1 角色
      • 2.1.2 角色绑定
      • 2.1.3 主体
    • 2.2 实现基于角色的访问控制

1.Kubernetes 的鉴权管理

客户端请求通过认证阶段后,将进入鉴权阶段。这个阶段将包含两个内容:

  • 1️⃣ 审查客户端请求的属性
  • 2️⃣ 确定请求的操作

1.1 审查客户端请求的属性

Kubernetes 审查客户端请求的属性 主要包括以下几个方面。

  • 用户与组:经过认证的用户名和所属组名的列表。
  • API 和动作:对 Kubernetes 资源的操作,如 createlistget 等请求动词。
  • 请求路径和动作:指示各种非 Kubernetes 资源的路径(如 /api),以及对该路径执行的 HTTP 操作(如 GET、POST、PUT 等)。
  • 命名空间:正在访问的 Kubernetes 对象的命名空间。

1.2 确定请求的操作

确定请求的操作 是指,确定对 Kubernetes 资源对象的请求动词或 HTTP 操作,以及该动词或 HTTP 操作是针对单个资源还是一组资源。

下表列举常见的请求动词与 HTTP 操作,以及它们的对应关系。

请求动词HTTP 操作
createPOST
getlistGET、HEAD
updatePUT
patchPATCH
deletedeletecollectionDELETE

根据 Kubernetes 鉴权时使用的模块,可以将 Kubernetes 的鉴权分为以下 4 4 4 种方式:

  • 基于 角色 的访问控制(RBAC 鉴权)
  • 基于 属性 的访问控制(ABAC 鉴权)
  • 基于 节点 的访问控制(Node 鉴权)
  • 基于 Webhook 的访问控制

基于角色的访问控制(RBAC 鉴权)是最重要的鉴权方式。

2.基于角色的访问控制(RBAC 鉴权)

基于角色的访问控制Role-Based Access ControlRBAC),通过为用户赋予不同的角色来控制其访问 Kubernetes 集群资源。它允许用户动态配置不同的角色策略。基于角色的访问控制需要使用 rbac.authorization.k8s.io API 组来执行。

2.1 基于角色的访问控制中的概念

在基于角色的访问控制中涉及 3 3 3 个非常重要的概念:角色角色绑定主体

2.1.1 角色

角色 是一组权限的集合。Kubernetes 中的角色分为两种:Role 和 ClusterRole。

  • Role 是某个命名空间中对象访问权限的集合。因此,在创建 Role 时,必须指定 Role 所属的命名空间。
  • ClusterRole 是访问某个命名空间的权限的集合。

2.1.2 角色绑定

将包含各种权限的角色授予给一个主体,这个过程被叫作 角色绑定。因为角色分为 Role 和 ClusterRole,所以角色绑定分为 RoleBindingClusterRoleBinding

2.1.3 主体

使用角色的用户被叫作 主体Subject)。它可以是一个用户(User)、一个用户组(Group),也可以是一个服务账号(ServiceAccount)。

角色与角色绑定存在 3 3 3 种关系:RoleBind-RoleClusterRoleBind-ClusterRoleRoleBind-ClusterRole,如下图所示。
在这里插入图片描述
下面解释了这 3 3 3 种关系的区别:

  • User A 通过 RoleBinding 绑定到了 Role 上。因此,它就拥有了命名空间 A 的操作权限。
  • 在集群 B 上有两个命名空间:命名空间 A 和命名空间 B。User B 通过 ClusterRolebinding 绑定到 ClusterRole 上,因此它拥有了集群的操作权限(即访问命名空间 A 和命名空间 B)。
  • User C 在使用 RoleBind 和 ClusterRole 进行绑定时,仅能获取当前名称空间的所有权限(即 User C 只能访问命名空间 A)。

角色角色绑定主体 之间的约束关系如下图所示。
在这里插入图片描述

2.2 实现基于角色的访问控制

下面来演示如何实现基于角色的访问控制。这里将实现 Jerry 用户只能对 mydemo 命名空间拥有读取 Pod 的权限。

创建 mydemo 命名空间,并在该命名空间中创建 Pod。

kubectl create ns mydemo
kubectl create deployment nginx --image=nginx --replicas=3 -n mydemo

查看 mydemo 命名空间中的 Pod 信息。

kubectl get pods -n mydemo

输出的信息如下:

在这里插入图片描述

生成 只有读取 Pod 权限的角色 的描述信息。

kubectl create role mydemo-pod-reader-role --verb=get,list,watch --resource=pods --dry-run -o yaml

在生成的描述信息中增加 namespace: mydemo 字段,并将描述信息保存为 mydemo-pod-reader-role.yaml 文件。

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:creationTimestamp: nullname: mydemo-pod-reader-rolenamespace: mydemo
rules:
- apiGroups:- ""resources:- podsverbs:- get- list- watch

创建 mydemo-pod-reader-role 角色。

kubectl apply -f mydemo-pod-reader-role.yaml

查看 mydemo 命名空间中的角色信息。

kubectl get role -n mydemo

输出的信息如下:

在这里插入图片描述

编辑 mydemo-pod-reader-rolebinding.yaml 文件进行角色绑定,将主体与角色进行绑定。

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: mydemo-pod-reader-rolebindingnamespace: mydemo
subjects:
- kind: User#名字大小写敏感name: JerryapiGroup: rbac.authorization.k8s.io
roleRef:kind: Role #this must be Role or ClusterRole# 名字必须与Role或者ClusterRole的名字一致name: mydemo-pod-reader-role apiGroup: rbac.authorization.k8s.io

🚀 这里的主体是用户名称(即 Jerry),绑定的角色是 mydemo-pod-reader-role

执行 kubectl apply -f 命令。

kubectl apply -f mydemo-pod-reader-rolebinding.yaml

查看 mydemo 命名空间中的角色信息与角色绑定信息。

kubectl get role,rolebinding -n mydemo

输出的信息如下:

在这里插入图片描述

创建 Jerry 用户和认证证书。

# 生成用户的私钥
openssl genrsa -out Jerry.key 2048# 使用刚生成的私钥创建证书,并在 -subj 中指定用户和组。证书文件格式: 用户名.csr
openssl req -new -key Jerry.key -out Jerry.csr -subj "/CN=Jerry/O=mydemo"# 在 /etc/kubernetes/pki 目录下,找到 Kubernetes 集群的证书 ca.crt 和 ca.key
# 生成最终的证书 Jerry.crt,有效期为 30 天
openssl x509 -req -in Jerry.csr -CA /etc/kubernetes/pki/ca.crt \
-CAkey /etc/kubernetes/pki/ca.key -CAcreateserial \
-out Jerry.crt -days 30

在这里插入图片描述

Jerry 用户的凭证加入 kubeconfig

kubectl config set-credentials Jerry --client-key=Jerry.key --client-certificate=Jerry.crt

在这里插入图片描述

查看 config 文件,看是否把密钥的内容写进去了,以便在命令行中切换用户。

tail ~/.kube/config

输出的信息如下:

在这里插入图片描述

创建用户上下文对象 Jerry-contex

kubectl config set-context Jerry-context --cluster=kubernetes --namespace=mydemo --user=Jerry

切换到 Jerry 用户。

kubectl config use-context Jerry-context

输出的信息如下:

在这里插入图片描述

🚀 在 Kubernetes 中进行用户切换的常用命令有:

  • 回到管理员:kubectl config use-context kubernetes-admin@kubernetes
  • 获取所有用户的 context 列表:kubectl config get-contexts
  • 获取当前用户的 context 信息:kubectl config current-context

测试 Jerry 用户能否读取 mydemo 命名空间中的 Pod 信息。

kubectl get pod -n mydemo

如果能够正常读取 mydemo 命名空间中的 Pod 信息,则输出如下信息:

在这里插入图片描述

执行以下命令测试 Jerry 用户能否在 mydemo 命名空间中创建 Pod:

kubectl create deployment Jerry-nginx --image=nginx --replicas=3 -n mydemo

这时将出现以下错误信息:

error: failed to create deployment: 
deployments.apps is forbidden: 
User "Jerry" cannot create resource "deployments" in API group "apps" in the namespace "mydemo"

在这里插入图片描述

按照相同的方法创建 Tom 用户和认证证书,并切换到 Tom 用户,测试 Tom 用户能否读取 mydemo 命名空间中的 Pod 信息。

http://www.dinnco.com/news/8976.html

相关文章:

  • 优秀品牌企业网站建设案例盘多多百度网盘搜索引擎
  • 做网站最低多少钱今日小说搜索风云榜
  • php动态网站教程怎么看关键词的搜索量
  • 南汇做网站广州竞价外包
  • 西安做网站那家公司好河北seo基础
  • 徐州做汽车销售的公司网站谷歌seo网站优化
  • 网站建设与功能模块怎样才能在百度上发布信息
  • 网站备案提示怎么创建网址
  • 嘉兴市建设监理协会网站软服业营收破334亿
  • 上海哪个网站最好用广州网站推广
  • 大连商城网站建设地推接单平台网
  • 做网站大作业的心得体会电子商务网站建设多少钱
  • qq钓鱼网站生成器手机版安徽网络建站
  • 发布做任务网站app广告联盟
  • 惠阳网站设计开发优化大师下载旧版本安装
  • 高端设计参考网站网站查询平台
  • 有趣的网站初音社会化媒体营销
  • 国内网站设计欣赏活动策划
  • 建设局网站查询个人信息关键词优化推广公司哪家好
  • 中介做网站的别打电话站长工具seo综合查询问题
  • 怎么用vs2017做网站企业建站免费模板
  • 谷歌浏览器官网重庆seo优化公司
  • 亿网科技有限公司福州seo管理
  • 网站建设工具如何在百度发视频推广
  • 地信的网站建设如何推广自己的业务
  • 网站建设增值税佛山seo技术
  • 做宣传册模板的网站关键词指数查询工具
  • 济南网络营销公司推荐seo外包优化网站
  • 网站搭建心得体会关键词挖掘爱网站
  • 国外的电商网站百度指数教程