带你读《云原生应用开发: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搭建和管理企业级网站应用
相关文章
|
27天前
|
Kubernetes 监控 Cloud Native
云原生时代下的应用开发与部署实践
【10月更文挑战第4天】在云原生的浪潮中,开发者和运维人员面临着新的挑战和机遇。本文将通过实际案例,展示如何在云平台上高效地开发、部署和管理应用,同时确保系统的可扩展性和高可用性。我们将深入探讨容器化技术、微服务架构以及持续集成/持续部署(CI/CD)流程的实施策略,旨在为读者提供一套完整的云原生解决方案框架。
|
2月前
|
Kubernetes Cloud Native 持续交付
云原生技术在现代应用开发中的角色与实践
【9月更文挑战第9天】 随着云计算技术的飞速发展,云原生(Cloud Native)已经成为推动企业数字化转型的核心力量。本文将深入探讨云原生的基本概念、关键技术及其在实际开发中的应用案例,旨在为读者提供一条清晰的云原生技术学习路径和应用指南。通过实例分析,我们将揭示云原生如何优化资源管理、提升应用性能及加快部署速度,进而帮助企业构建更加灵活、可靠和高效的软件系统。
|
5天前
|
监控 Cloud Native 持续交付
云原生技术深度解析:重塑现代应用开发与部署范式####
本文深入探讨了云原生技术的核心概念、关键技术组件及其在现代软件开发中的重要性。通过剖析容器化、微服务架构、持续集成/持续部署(CI/CD)等关键技术,本文旨在揭示云原生技术如何促进应用的敏捷性、可扩展性和高可用性,进而推动企业数字化转型进程。不同于传统摘要仅概述内容要点,本部分将融入具体案例分析,直观展示云原生技术在实际应用中的显著成效与挑战应对策略,为读者提供更加丰富、立体的理解视角。 ####
|
16天前
|
Kubernetes Cloud Native 持续交付
云原生技术:重塑现代应用开发与部署模式####
本文深入探讨了云原生技术的核心概念、发展历程及其在现代软件开发和部署中的关键作用。通过分析云原生架构的特点,如容器化、微服务、持续集成与持续部署(CI/CD),以及它如何促进应用的可伸缩性、灵活性和效率,本文旨在为读者提供一个关于云原生技术全面而深入的理解。此外,还将探讨实施云原生策略时面临的挑战及应对策略,帮助组织更好地把握数字化转型的机遇。 ####
|
16天前
|
人工智能 Serverless API
云原生应用开发平台CAP:一站式应用开发及生命周期管理解决方案
阿里云的云应用开发平台CAP(Cloud Application Platform)是一款一站式应用开发及应用生命周期管理平台。它提供丰富的Serverless与AI应用模板、高效的开发者工具链及企业级应用管理功能,帮助开发者快速构建、部署和管理云上应用,大幅提升研发、部署和运维效能。
44 1
|
24天前
|
Kubernetes Cloud Native 持续交付
云原生技术在现代应用开发中的实践与展望
【10月更文挑战第7天】随着技术的不断演进,云计算已从简单的资源租用模式转变为支持复杂、高效、灵活的云原生应用架构。本文将深入探讨云原生技术的核心概念及其在现代应用开发中的应用,通过分析Kubernetes容器编排和微服务架构的实践案例,揭示云原生技术如何推动软件开发的现代化进程。文章旨在为开发者和架构师提供一套实用的云原生应用开发指南,同时展望未来云原生技术的发展方向。
27 8
|
1月前
|
Cloud Native 测试技术 云计算
云原生技术在现代应用开发中的角色与实践
【9月更文挑战第31天】本文深入探讨了云原生技术如何革新现代应用开发流程,通过实际案例分析,揭示了其对提高开发效率、确保系统可扩展性和可靠性的显著影响。文章不仅介绍了云原生的核心概念,还提供了实施策略和最佳实践,旨在为开发者提供一条清晰的云原生转型之路。
|
2月前
|
Kubernetes Cloud Native 持续交付
云原生技术在现代应用开发中的实践与思考
【9月更文挑战第23天】本文将深入探讨云原生技术如何革新现代应用的开发流程。通过分析云原生的核心概念、优势以及实际应用案例,我们旨在揭示这一新兴技术范式如何助力开发者和企业更高效、灵活地构建和部署应用程序。文章还将提供具体代码示例,展示云原生技术在实际项目中的应用,帮助读者更好地理解和掌握该技术。
|
2月前
|
Cloud Native 持续交付 开发者
云原生技术在现代应用开发中的应用与实践
【9月更文挑战第22天】本文将深入探讨云原生技术如何革新现代应用开发,通过实际案例分析其对提高开发效率、促进持续集成与交付的显著影响。我们将从云原生的基本概念出发,逐步展开到容器化、微服务架构、自动化管理的实践操作,以及这些技术如何协同工作以支持复杂应用的快速迭代和扩展。文章旨在为开发者提供一套云原生技术的实践框架,帮助他们构建更加灵活、可维护的应用系统。
|
2月前
|
Cloud Native 持续交付 云计算
云原生技术在现代应用开发中的应用与实践
【9月更文挑战第12天】随着云计算技术的飞速发展,云原生已成为推动企业数字化转型的关键技术之一。本文将深入探讨云原生的基本概念、核心价值及其在现代应用开发中的实际应用案例,旨在为读者提供一套清晰的云原生应用开发指南。通过分析容器化、微服务架构、持续部署等核心技术的实践过程,我们将揭示云原生如何助力开发者高效构建、部署和管理可扩展的应用。你将看到代码示例,这些示例均选自真实世界的开发场景,帮助你理解云原生技术的强大功能和灵活性。

热门文章

最新文章