带你读《云原生应用开发:Operator原理与实践》——2.3.1 Kubernetes API 访问控制

简介: 带你读《云原生应用开发:Operator原理与实践》——2.3.1 Kubernetes API 访问控制

2.3  Kube-APIServer 介绍


Kube-APIServer 组件负责对外暴露资源的 API,也包括自定义资源。外部访问和操作 Kubernetes 资源会经过哪些流程呢?下面介绍 Kubernetes API 的访问控制。


2.3.1 Kubernetes API 访问控制

在 Kubernetes 集群中,Kube-APIServer 是控制面的一个组件,它对外暴露 Kubernetes的 API,通常这个服务使用 6443 端口。集群控制面之外的组件要访问这个服务有两种情况。

(1)用户可以使用 Kubectl、客户端库或 REST 风格的请求去访问 Kube-APIServer。

(2)用户运行在集群中的服务使用 ServiceAccount 去访问 Kube-APIServer。一个请求到达 API 要经过多个阶段,如图 2-9 所示。

image.png

图 2-9 Kubernetes API 请求处理步骤

1. 认证

如图 2-9 中的步骤①,客户端(Kubectl 工具、REST 请求或集群中的 Pod 等)在集群内应用访问 Kube-APIServer 的 HTTP 请求首先会进入认证这步。我们在创建集群时可以配置一个或者多个认证模块。

认证模块的工作过程:请求会依次通过每个认证模块,只要有一个模块通过则进入下一步。如果所有的认证模块都没有通过,就会给客户端返回一个 401 的 HTTP 状态码。认证通过后会解析认证信息中对应的用户,这个用户会作为后续步骤决策的依据。

需要注意的是,虽然 Kubernetes 通过用户来对访问 Kube-APIServer 的请求进行访问控制决策和访问日志记录,但 Kubernetes 中没有用户这个对象,也没有在 API 中存储用户和用户相关的信息。

2. 鉴权

图 2-9 中的步骤②是根据上一步的用户对请求进行鉴权操作。鉴权过程是判断当前用户是否有权限去操作 HTTP 请求中的资源对象,判断的依据是存储在集群中的策略声明。Kubernetes 中支持多种鉴权模块,比如 ABAC、RBAC 和 WebHook。鉴权模块是在创建集群时配置的,如果配置了多种鉴权模块,Kubernetes 会检查每个模块。如果有一个模块通过鉴权,那么该请求鉴权通过;如果所有的模块都拒绝了该请求,就会给客户端返回一个 403 的 HTTP 状态码。

3. 准入控制

请求经过认证和鉴权之后会被准入控制器拦截,如图 2-9 中的步骤③所示,准入控制器可以修改或拒绝请求。准入控制器只对创建、修改或删除对象的请求起作用,对只读请求不起作用。当配置了多个准入控制器时,会按照顺序进行调用。与认证或鉴权模块不同的是,如果有任何一个准入控制器拒绝了请求,那么请求会立马被其他准入控制器拒绝。除了拒绝请求之外,准入控制器还可以为请求中的字段设置一些默认值。

一旦请求通过所有的准入控制器,就会使用相应的验证逻辑对 API 对象进行验证,之后会将对象写入存储中,即图 2-9 中的步骤④。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
1月前
|
运维 Kubernetes Cloud Native
探索Kubernetes的大二层网络:原理、优势与挑战🚀
在云原生领域,Kubernetes (K8s) 已经成为容器编排的事实标准☁️📦。为了支撑其灵活的服务发现和负载均衡🔍🔄,K8s采用了大二层网络的设计理念🕸️。本文将深入探讨大二层网络的工作原理、带来的好处✨,以及面临的挑战和解决方案❗🛠️。
探索Kubernetes的大二层网络:原理、优势与挑战🚀
|
2天前
|
运维 Kubernetes Cloud Native
构建高效云原生运维体系:Kubernetes最佳实践
【5月更文挑战第9天】 在动态和快速演变的云计算环境中,高效的运维是确保应用稳定性与性能的关键。本文将深入探讨在Kubernetes环境下,如何通过一系列最佳实践来构建一个高效且响应灵敏的云原生运维体系。文章不仅涵盖了容器化技术的选择与优化、自动化部署、持续集成/持续交付(CI/CD)流程的整合,还讨论了监控、日志管理以及灾难恢复策略的重要性。这些实践旨在帮助运维团队有效应对微服务架构下的复杂性,确保系统可靠性及业务的连续性。
|
4天前
|
Kubernetes Cloud Native 持续交付
【Docker专栏】Kubernetes与Docker:协同构建云原生应用
【5月更文挑战第7天】本文探讨了Docker和Kubernetes如何协同构建和管理云原生应用。Docker提供容器化技术,Kubernetes则负责容器的部署和管理。两者结合实现快速部署、自动扩展和高可用性。通过编写Dockerfile创建镜像,然后在Kubernetes中定义部署和服务进行应用暴露。实战部分展示了如何部署简单Web应用,包括编写Dockerfile、构建镜像、创建Kubernetes部署配置以及暴露服务。Kubernetes还具备自动扩展、滚动更新和健康检查等高级特性,为云原生应用管理提供全面支持。
【Docker专栏】Kubernetes与Docker:协同构建云原生应用
|
5天前
|
Kubernetes Cloud Native 持续交付
构建高效云原生应用:Kubernetes与微服务架构的融合
【5月更文挑战第6天】 在数字化转型的浪潮中,企业正迅速采纳云原生技术以实现敏捷性、可扩展性和弹性。本文深入探讨了如何利用Kubernetes这一领先的容器编排平台,结合微服务架构,构建和维护高效、可伸缩的云原生应用。通过分析现代软件设计原则和最佳实践,我们提出了一个综合指南,旨在帮助开发者和系统架构师优化云资源配置,提高部署流程的自动化水平,并确保系统的高可用性。
27 1
|
6天前
|
Kubernetes Cloud Native Go
Golang深入浅出之-Go语言中的云原生开发:Kubernetes与Docker
【5月更文挑战第5天】本文探讨了Go语言在云原生开发中的应用,特别是在Kubernetes和Docker中的使用。Docker利用Go语言的性能和跨平台能力编写Dockerfile和构建镜像。Kubernetes,主要由Go语言编写,提供了方便的客户端库与集群交互。文章列举了Dockerfile编写、Kubernetes资源定义和服务发现的常见问题及解决方案,并给出了Go语言构建Docker镜像和与Kubernetes交互的代码示例。通过掌握这些技巧,开发者能更高效地进行云原生应用开发。
48 1
|
14天前
|
Kubernetes Cloud Native 持续交付
构建高效云原生应用:以Kubernetes为核心
【4月更文挑战第27天】 在当今数字化转型的浪潮中,企业急需构建灵活、可扩展的应用来应对不断变化的市场需求。云原生技术以其独特的优势应运而生,成为推动现代应用开发和部署的重要力量。本文深入探讨了云原生的核心组件之一——Kubernetes,解析其如何通过容器编排优化资源利用,提高应用的弹性和可维护性。同时,文章将展示如何在云平台上实现高效的服务发现、自动扩缩容以及持续集成和持续部署(CI/CD),进一步阐述云原生架构下的最佳实践和面临的挑战。
|
17天前
|
安全 Java API
Spring工厂API与原理
Spring工厂API与原理
35 10
|
20天前
|
XML JSON API
api接口的使用原理是什么?
总之,API接口的使用原理基于协议、规范和约定,允许不同的应用程序或系统之间进行通信和交互。这种通信方式使得开发人员能够轻松地利用外部服务或资源,从而实现更丰富的功能和服务。
15 0
|
22天前
|
XML JSON API
深入了解API:详解应用程序接口的作用和原理
在现代软件开发领域中,API(Application Programming Interface,应用程序接口)扮演着至关重要的角色。无论是在Web开发、移动应用还是大型软件系统中,API都是不可或缺的组成部分。本文将深入探讨API的作用和原理,帮助读者更好地理解和应用API
|
28天前
|
Kubernetes 监控 Cloud Native
构建高效云原生应用:基于Kubernetes的微服务治理实践
【4月更文挑战第13天】 在当今数字化转型的浪潮中,企业纷纷将目光投向了云原生技术以支持其业务敏捷性和可扩展性。本文深入探讨了利用Kubernetes作为容器编排平台,实现微服务架构的有效治理,旨在为开发者和运维团队提供一套优化策略,以确保云原生应用的高性能和稳定性。通过分析微服务设计原则、Kubernetes的核心组件以及实际案例,本文揭示了在多变的业务需求下,如何确保系统的高可用性、弹性和安全性。
23 4

热门文章

最新文章