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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
访问控制,不限时长
简介: 带你读《云原生应用开发: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 鉴权。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
25天前
|
Kubernetes Cloud Native 持续交付
云原生技术在现代应用开发中的角色与实践
【9月更文挑战第9天】 随着云计算技术的飞速发展,云原生(Cloud Native)已经成为推动企业数字化转型的核心力量。本文将深入探讨云原生的基本概念、关键技术及其在实际开发中的应用案例,旨在为读者提供一条清晰的云原生技术学习路径和应用指南。通过实例分析,我们将揭示云原生如何优化资源管理、提升应用性能及加快部署速度,进而帮助企业构建更加灵活、可靠和高效的软件系统。
|
3天前
|
Cloud Native 测试技术 云计算
云原生技术在现代应用开发中的角色与实践
【9月更文挑战第31天】本文深入探讨了云原生技术如何革新现代应用开发流程,通过实际案例分析,揭示了其对提高开发效率、确保系统可扩展性和可靠性的显著影响。文章不仅介绍了云原生的核心概念,还提供了实施策略和最佳实践,旨在为开发者提供一条清晰的云原生转型之路。
|
11天前
|
Kubernetes Cloud Native 持续交付
云原生技术在现代应用开发中的实践与思考
【9月更文挑战第23天】本文将深入探讨云原生技术如何革新现代应用的开发流程。通过分析云原生的核心概念、优势以及实际应用案例,我们旨在揭示这一新兴技术范式如何助力开发者和企业更高效、灵活地构建和部署应用程序。文章还将提供具体代码示例,展示云原生技术在实际项目中的应用,帮助读者更好地理解和掌握该技术。
|
12天前
|
Cloud Native 持续交付 开发者
云原生技术在现代应用开发中的应用与实践
【9月更文挑战第22天】本文将深入探讨云原生技术如何革新现代应用开发,通过实际案例分析其对提高开发效率、促进持续集成与交付的显著影响。我们将从云原生的基本概念出发,逐步展开到容器化、微服务架构、自动化管理的实践操作,以及这些技术如何协同工作以支持复杂应用的快速迭代和扩展。文章旨在为开发者提供一套云原生技术的实践框架,帮助他们构建更加灵活、可维护的应用系统。
|
22天前
|
Cloud Native 持续交付 云计算
云原生技术在现代应用开发中的应用与实践
【9月更文挑战第12天】随着云计算技术的飞速发展,云原生已成为推动企业数字化转型的关键技术之一。本文将深入探讨云原生的基本概念、核心价值及其在现代应用开发中的实际应用案例,旨在为读者提供一套清晰的云原生应用开发指南。通过分析容器化、微服务架构、持续部署等核心技术的实践过程,我们将揭示云原生如何助力开发者高效构建、部署和管理可扩展的应用。你将看到代码示例,这些示例均选自真实世界的开发场景,帮助你理解云原生技术的强大功能和灵活性。
|
21天前
|
运维 Cloud Native 持续交付
云原生技术:探索现代应用开发的新纪元
本文深入探讨了云原生技术的崛起,以及它如何彻底改变现代应用开发和部署的方式。我们将从云原生的基本概念入手,逐步解析其核心技术如容器化、微服务架构及自动化运维,并展示这些技术如何帮助开发者和企业实现更高效、更灵活的应用管理。通过实际案例分析,我们将揭示云原生技术在提升开发效率、优化资源利用和增强系统可扩展性方面的巨大潜力。
|
22天前
|
Cloud Native 持续交付 开发者
云原生技术在现代应用开发中的角色与实践
【9月更文挑战第12天】本文将探索云原生技术的核心概念及其在现代软件开发中的应用。通过分析容器化、微服务架构、持续集成/持续部署(CI/CD)和DevOps文化的融合,我们旨在揭示如何利用这些技术提升软件的可靠性、可扩展性和交付速度。同时,文章还将展示一个简化的代码示例,以直观地说明云原生技术的实际应用。
|
2月前
|
运维 Cloud Native Android开发
云原生之旅:容器化与微服务架构的融合之道安卓应用开发入门指南
本文将深入探讨云原生技术的核心要素——容器化和微服务架构,并揭示它们如何共同推动现代软件的开发与部署。通过实际案例分析,我们将看到这两种技术如何相辅相成,助力企业实现敏捷、可扩展的IT基础设施。文章旨在为读者提供一条清晰的道路,指引如何在云原生时代利用这些技术构建和优化应用。 本文将引导初学者了解安卓应用开发的基本概念和步骤,从安装开发环境到编写一个简单的“Hello World”程序。通过循序渐进的讲解,让读者快速掌握安卓开发的核心技能,为进一步深入学习打下坚实基础。
43 1
|
2月前
|
Kubernetes Cloud Native 持续交付
云原生技术在现代应用开发中的应用
【8月更文挑战第29天】本文将探讨云原生技术在现代应用开发中的重要性,包括其概念、优势和实践。我们将通过代码示例来展示如何在云平台上构建和部署云原生应用。
|
4月前
|
存储 Kubernetes 安全
云上攻防-云原生篇&K8s安全&Config泄漏&Etcd存储&Dashboard鉴权&Proxy暴露
云上攻防-云原生篇&K8s安全&Config泄漏&Etcd存储&Dashboard鉴权&Proxy暴露
100 5
下一篇
无影云桌面