带你读《云原生应用开发:Operator原理与实践》——2.3.3 鉴权

简介: 带你读《云原生应用开发:Operator原理与实践》——2.3.3 鉴权

2.3.3 鉴权


在 Kubernetes 中,请求在到达鉴权步骤之前要经过认证。鉴权功能模块决定是接受还是拒绝请求。一个请求必须满足一些策略要求才能进入下一步,默认情况下请求是被禁止的。APIServer 支持多种授权机制,如果开启了多个功能,就按照顺序执行。如果执行过程中有任何一个鉴权模块拒绝或接受请求,那么会立即返回,并且不会与其他模块协商;如果所有的模块都对请求没有意见,那么请求会被拒绝。如果请求被拒绝,会返回一个403 的状态码。

Kubernetes 提供了以下几种常见的鉴权方式。

(1) Node: 一个专用的鉴权组件,为 Kubelet 发出的请求提供鉴权操作。

(2) ABAC: 基于属性的访问控制(ABAC),定义了一种访问控制范例,通过使用组合属性的策略,将访问权限授予用户。 这些策略可以使用任何类型的属性(用户属性、资源属性、对象、环境属性等)。

(3) RBAC:基于角色的访问控制(RBAC),是一种基于企业内各个用户的角色来调整访问计算机或网络资源的方法。 在这种情况下,访问权限是指单个用户执行特定任务(如查看、创建或修改文件)的能力。

(4) WebHook:WebHook 是 HTTP 回调模式,它会向远程服务器发送 POST 请求进行鉴权。

在 APIServer 的启动参数中,可以配置要使用的鉴权模块,可以选择一个或多个,运行时按照顺序检查,越靠前的模块优先级越高。

(1) --authorization-mode=ABAC:基于属性的访问控制(ABAC)模式允许使用本地文件配置策略。

(2) --authorization-mode=RBAC:基于角色的访问控制(RBAC)模式允许使用 Kubernetes API 创建和存储策略。

(3) --authorization-mode=WebHook:WebHook 是一种 HTTP 回调模式,允许使用远程 REST 端点管理鉴权。

(4) --authorization-mode=Node:节点鉴权是一种特殊用途的鉴权模式,专门对 Kubelet 发出的 API 请求执行鉴权。

(5) --authorization-mode=AlwaysDeny:此标识阻止所有请求,仅将此标识用于测试。

(6) --authorization-mode=AlwaysAllow: 此标识允许所有请求,仅在不需要 API 请求 的鉴权时才使用此标识。

1. RBAC 鉴权


RBAC 鉴权器是一种根据企业内各个用户的角色来调整访问计算机或网络资源的方法。用户可以通过 APIServer 使用 rbac.authorization.k8s.io API 组下的资源对象动态地配置规则。API 对象:RBAC 的 API 声明了 4 种对象,可以使用 Kubectl 像创建 Pod 一样创建规则。

(1) Role 和 ClusterRole

RBAC 中的 Role 和 ClusterRole 包含了一组权限规则,规则内容定义了允许用户进行的操作权限,用户可以设置多条规则,规则定义的内容取并集。Role 在一个特定的Namespace 中设置规则,Role 属于某个特定的 Namespace。相反,ClusterRole 不是一个Namespace 范围的资源。为什么会有 Role 和 ClusterRole,是因为 Kubernetes 的资源对象可能是 Namespace 范围内的也可能是非 Namespace 范围内的。代码清单 2-69 是 Role 示例。

代码清单 2-69

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
 name: ns-admin
 namespace: myspace
rules:
- apiGroups:
 - [""]
 resources:
 - pods
  - pods/log # 对子资源的引用
 verbs:
 - ["get", "watch", "list"]

ClusterRole 是集群范围的,它可以是集群范围的资源、非资源端点或是跨 Namespace 访问的 Namespace 作用域的资源,代码清单 2-70 是 Coredns 的 ClusterRole 示例。

代码清单 2-70

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
 name: system:coredns
rules:
- apiGroups:
 - ""
 resources:
 - endpoints
 - services
 - pods
 - namespaces
 verbs:
 - list
 - watch
- apiGroups:
 - ""
 resources:
 - nodes
 verbs:
 - get

(2) RoleBinding 和 ClusterRoleBinding

RoleBinding 向用户或一组用户授予在角色中定义的权限。它包含主题列表(用户、组或服务账户),以及对所授予角色的引用。 RoleBinding 授予特定 Namespace 内的权限,而 ClusterRoleBinding 授予在集群范围内访问的权限。

RoleBinding 可 以 引 用 同 一 Namespace 中 的 任 何 Role。 或 者,RoleBinding 可 以引 用 ClusterRole 并 将 该 ClusterRole 绑 定 到 RoleBinding 的 Namespace。 如 果 要 将ClusterRole 绑定到集群中的所有 Namespace,要使用 ClusterRoleBinding。 代码清单 2-71 是一个 RoleBinding 的示例。

代码清单 2-71

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
 name: ns-admin-rolebinding
 namespace: myspace
roleRef:
 apiGroup: rbac.authorization.k8s.io
 kind: Role
 name: ns-admin
subjects:
- apiGroup: rbac.authorization.k8s.io
 kind: User
 name: kcp

要在集群范围内完成访问权限的鉴权,可以使用一个 ClusterRoleBinding(见代码清单2-72)。

代码清单 2-72

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
 name: system:coredns
roleRef:
 apiGroup: rbac.authorization.k8s.io
 kind: ClusterRole
 name: system:coredns
subjects:
- kind: ServiceAccount
 name: coredns
 namespace: kube-system

2. Node 鉴权


Node 鉴权是一种专用授权模式,专门对 Kubelet 发出的 API 请求进行鉴权。Node 鉴权允许 Kubelet 对多种资源有操作权限,例如,Services、Endpoints、Nodes、Pods 等资源。使用 system:node 组对 Kubelet 组件进行权限控制,要使用 Node 鉴权,需要在APIServer 启动参数中添加 --authorization-mode=Node,RBAC。


3. WebHook 模式


WebHook 鉴权基于 HTTP 的回调机制,这个模块在做决策时,APIServer 会向远端鉴权服务器发送一个 POST 请求,请求体是一个 SubjectAccessReview 对象,这个对象中包含了描述用户请求的资源,同时也包含了被访问资源或请求的具体信息。要启用WebHook 鉴权,需要添加如下参数。

(1)--authorization-webhook-config-file=:这是一个 kubeconfig 格式的配置文件,user 字段引用的是 apiserver webhook,clusters 字段引用的是远端服务。

(2)--authorization-mode=Node,RBAC:启用 WebHook 鉴权。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
2月前
|
缓存 Java API
【云原生】Spring Cloud Gateway的底层原理与实践方法探究
【云原生】Spring Cloud Gateway的底层原理与实践方法探究
|
2月前
|
Kubernetes Cloud Native 开发工具
带你读《云原生应用开发:Operator原理与实践》精品文章合集
带你读《云原生应用开发:Operator原理与实践》精品文章合集
|
3月前
|
人工智能 缓存 Kubernetes
.NET 9 首个预览版发布:瞄准云原生和智能应用开发
.NET 9 首个预览版发布:瞄准云原生和智能应用开发
|
1月前
|
负载均衡 Cloud Native 安全
云原生最佳实践系列 6:MSE 云原生网关使用 JWT 进行认证鉴权
本文档介绍了如何在 MSE(Microservices Engine)云原生网关中集成JWT进行全局认证鉴权。
|
2月前
|
Kubernetes Cloud Native 微服务
作者推荐|剖析云原生服务框架中服务发现机制的核心原理与实现机制
作者推荐|剖析云原生服务框架中服务发现机制的核心原理与实现机制
45 0
|
2月前
|
Java fastjson 数据安全/隐私保护
【Dubbo3技术专题】「云原生微服务开发实战」 一同探索和分析研究RPC服务的底层原理和实现
【Dubbo3技术专题】「云原生微服务开发实战」 一同探索和分析研究RPC服务的底层原理和实现
44 0
|
2月前
|
运维 Cloud Native 持续交付
云原生技术的未来展望:如何塑造下一代应用开发
【2月更文挑战第30天】 随着云计算的不断发展,云原生技术已经成为推动现代应用开发的重要力量。本文将深入探讨云原生技术的核心概念,分析其在提高开发效率、降低运维成本以及支持复杂业务场景中的作用。同时,文章还将预测云原生技术的发展趋势,并讨论如何在不断变化的技术环境中保持应用的敏捷性和可靠性。
|
2月前
|
消息中间件 存储 Cloud Native
【Spring云原生系列】Spring RabbitMQ:异步处理机制的基础--消息队列 原理讲解+使用教程
【Spring云原生系列】Spring RabbitMQ:异步处理机制的基础--消息队列 原理讲解+使用教程
|
21天前
|
消息中间件 Cloud Native 开发者
电子好书发您分享《阿里云云原生开源开发者沙龙北京站 PPT 合集 》
**阿里云开源沙龙PPT合集:北京站聚焦云原生技术** 探索云原生领域的深度与广度,[阿里云](https://developer.aliyun.com/ebook/8334/116563?spm=a2c6h.26392459.ebook-detail.5.da096cf6t38G15)分享了北京开发者沙龙的精彩内容,涵盖微服务、消息队列等主题,助力开发者洞悉行业趋势。![image](https://ucc.alicdn.com/pic/developer-ecology/cok6a6su42rzm_67b12f6cad6e4b2786859b3a668b3351.png)
19 3
|
2月前
|
人工智能 监控 Cloud Native
iLogtail 2.0 来了;通义灵码下载量破百万丨阿里云云原生 2 月产品月报
iLogtail 2.0 来了;通义灵码下载量破百万丨阿里云云原生 2 月产品月报

热门文章

最新文章