随着Kubernetes被广泛使用,成为业界公认的容器编排管理的标准框架,许多开发人员以及管理员对部署、弹性伸缩以及管理容器化应用程序等Kubernetes的关键概念都十分熟悉。而对于生产部署而言,Kubernetes的安全性至关重要。因此,了解平台如何管理用户和应用程序的身份认证和授权十分必要。
我们将推出一系列文章,以一种实践性的视角来了解平台内部的Kubernetes和Pod外部用户的身份认证和授权。我也会解释如何使用角色以及角色绑定来允许或限制资源访问。
API Server——Kubernetes网关
API为Kubernetes各类资源对象(如节点、标签、Pod、服务、部署、secrets、configmaps以及ingress等)提供访问接口。这些资源对象通过简单的REST API执行基本的CRUD(增删改查)操作。
Kubernetes的核心构建块之一是API Server,它作为Kubernetes的网关,是访问和管理资源对象的唯一入口。内部组件(如kubelet、调度程序和控制器)通过API Server访问API以进行编排和协调。分布式键/值数据库、etcd只能通过API Server访问。

通常我们可以通过命令行工具kubectl来与API Server进行交互。从kubectl发送的任何内容最终都会被API Server所接收。因此,多个工具和插件会直接或间接地使用相同的API。
即使在Kubernetes集群中访问或者操作对象之前,该请求也需要由API Server进行身份验证。REST路径使用基于X.509证书的TLS协议来保护和加密流量。Kubectl在编码和发送请求之前查找文件〜/ .kube / config以检索CA证书和客户端证书。
apiVersion: v1
clusters:
- cluster:
certificate-authority: /Users/janakiramm/.minikube/ca.crt
server: https://192.168.99.100:8443
name: minikube
contexts:
- context:
cluster: minikube
user: minikube
name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
user:
client-certificate: /Users/janakiramm/.minikube/client.crt
client-key: /Users/janakiramm/.minikube/client.key
文件ca.crt表示集群使用的CA证书,文件client.crt和client.key映射到用户minikube。Kubectl使用上下文中的这些证书和密钥对请求进行编码。
我们可以通过curl命令访问API Server吗?答案是肯定的。
即使最常见的操作是通过运行kubectl proxy来使用tunnel协议,我们依然可以通过计算机上的可用证书来访问路径。除了CA证书之外,我们还需要在头部嵌入base64编码的令牌(token)。
如何检索令牌(token)以及从curl调用API的命令如下:
kubectl config view -o jsonpath='{"Cluster name\tServer\n"}{range .clusters[*]}{.name}{"\t"}{.clu
Cluster name Server
minikube https://192.168.99.100:8443
export CLUSTER_NAME="minikube"
APISERVER=$(kubectl config view -o jsonpath="{.clusters[?(@.name==\"$CLUSTER_NAME\")].cluster.server}")
接下来,一个重要的任务就是获取与默认service account关联的令牌。无需担心这一实体,我们将在之后的文章中更好地理解它。
TOKEN=$(kubectl get secrets -o jsonpath="{.items[?(@.metadata.annotations['kubernetes\.io/service-a
现在我们拥有调用curl的所有数据了:
curl -X GET \
--cacert ~/.minikube/ca.crt \
--header "Authorization: Bearer $TOKEN" \
$APISERVER/version

Kubernetes访问控制的三个层次
如上文所述,用户和Pod在访问或操作对象之前都要由API Server进行身份认证。
当一个有效的请求发送到API Server时,在它被允许或被拒绝之前将经历3个步骤。

- 身份认证
一旦TLS连接建立,请求就进入到身份认证阶段,在这一阶段,请求有效负载由一个或多个认证器模块检查。
认证模块时管理员在集群创建过程中配置的,一个集群可能有多个认证模块配置,每个模块会依次尝试认证, 直到其中一个认证成功。
在主流的认证模块中会包括客户端证书、密码、plain tokens、bootstrap tokens以及JWT tokens(用于service account)。客户端证书的使用是默认的并且是最常见的方案。有关认证模块的详细列表,请参阅:
https://kubernetes.io/docs/reference/access-authn-authz/authentication/
请注意,Kubernetes是没有用于验证用户身份的典型用户数据库或者配置文件。但是它使用从X.509证书以及令牌中提取的字符串,将它们传递到身份认证模块。OpenID,Github甚至LDAP提供的外部认证机制可以通过其中一个认证模块与Kubernetes集成。
- 授权
一旦API请求得到认证,下一步就是确认这一操作是否被允许执行。这是访问控制流程中的第二个步骤。
对于授权一个请求,Kubernetes主要关注三个方面——请求者的用户名、请求动作以及该动作影响的对象。用户名从嵌入token的头部中提取,动作是映射到CRUD操作的HTTP动词之一(如 GET、POST、PUT、DELETE),对象是其中一个有效的Kubernetes对象,如pod或者service。
Kubernetes基于一个存在策略来决定授权。默认情况下,Kubernetes遵循封闭开放的理念,这意味着需要一个明确的允许策略才可以访问资源。
与身份认证类似,授权也是基于一个或多个模块配置的,如ABAC模式、RBAC模式以及Webhook模式。当管理员创建集群时,他们配置与API sever集成的授权模块。如果多个模块都在使用,Kubernetes会检查每个模块并且如果其中任一模块授权了请求,则请求授权通过。如果所有模块全部拒绝请求,则请求被拒绝(HTTP状态码403)。如果想了解详细的受支持的模块列表,请参阅:
https://kubernetes.io/docs/reference/access-authn-authz/authorization/#authorization-modules
当您使用默认配置的kubectl时,所有的请求都会通过,因此此时您被认为时集群管理员。但当我们添加新的用户,默认状态下他们会限制访问权限。
- 准入控制
通过准入控制是请求的最后一个步骤。与前两个步骤类似,准入控制也有许多模块。
但与前两个步骤不同的是,最后的阶段可以修改目标对象。准入控制模块作用于对象的创建、删除、更新和连接(proxy)阶段,但不包括对象的读取。举个例子,例如,准入控制模块可用于修改创建持久卷声明(PVC)的请求以使用特定存储类。模块可以实施的另一个策略是每次创建容器时提取镜像。更多关于准入控制模块的详情,请参阅:
https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/
在这一过程中,如果任一准入控制模块拒绝,那么请求立刻被拒绝。一旦请求通过所有的准入控制器,将使用对应API对象的验证流程对其进行验证,然后写入对象存储。
在下一部分的文章中,我们将更进一步了解创建用户以及为其配置身份认证。保持关注哟~
相关推荐
Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 适用人群 零基础以及有一定运维...
在Kubernetes(K8S)环境中,存储管理是至关重要的,因为它涉及到如何持久化和管理容器中的数据。本实训课程主要关注K8S的存储管理,特别是存储卷的使用和持久化存储卷的管理。 首先,我们需要理解为何需要存储卷。在...
"Kubernetes(K8s)入门文档" Kubernetes 是什么? Kubernetes 是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。通过 Kubernetes 你可以快速部署应用、快速扩展应用...
本资源包含2020版的Kubernetes入门笔记和相关资料,对于初学者或希望深入理解k8s的IT从业者来说极具价值。 资料.zip可能包含了丰富的Kubernetes教程、实战案例和官方文档,帮助用户快速掌握k8s的基本概念、架构和...
kubernetes/k8s自动安装程序,版本对应:v1.18.2,linux环境 使用kubeadm安装,改程序若环境不符合要求,是不能一键安装的,需按照程序指示分布安装,该程序是为了搭建测试环境时,简化繁琐的配置时所用,不能用作...
在Kubernetes(K8S)集群管理中,日志和监控是至关重要的环节,它们帮助管理员了解系统的运行状态,及时发现并解决问题。本课程主要聚焦于K8S的日志收集、监控集群组件、应用管理和弹性伸缩等方面。 首先,监控集群...
### Kubernetes (K8S) 超详细安装部署手册知识点概览 #### 一、Kubernetes简介与核心功能 Kubernetes(简称K8S)是一个开源的容器编排平台,旨在自动化容器化应用的部署、扩展和管理。通过提供一系列核心功能,K8S...
⽬前使⽤容器打包和运⾏应⽤程序,已经是业界主流的⼀种⽅式,在⽣产环境中,我们需要管理运⾏大量应⽤程序的容器,同时还要确保它不会停机,而kubernetes就是一个⽤来管理我们容器化应⽤的统一管理系统。Kubernetes...
在现代云计算领域,Kubernetes(简称K8s)已经成为容器编排和管理的首选平台,为企业和开发者提供了高效、可扩展且可靠的基础设施。本实践案例将深入探讨K8S的高级概念和技术,帮助读者理解如何在实际环境中部署、...
### 标题知识点:K8s入门及操作大全.pdf 该标题表明文件内容旨在为初学者提供Kubernetes的入门知识与操作指南,涵盖了Kubernetes的基本概念、核心组件以及常用操作命令。 ### 描述知识点:本人整理的k8s初级一些...
K8s Kubernetes从入门到集群架构视频教程,集群搭建,教程,教学资料,Kubernetes视频教程
分享课程——【2022】云原生Kubernetes全栈架构师:基于世界500强的k8s实战课程,2022年最新版,基于V1.23版本,完整版提供文档和软件下载! 课程适合人群: 1、准备学习k8s的运维、开发、测试、架构师; 2、k8s...
│ └ Kubernetes管理员实训 第1课:CKA考纲与K8S基础概念解读-v0.2.pdf ├ 华为云CKA第七课 │ │ cka07.mkv │ └ 【Cloud Native Lives】Kubernetes管理员实训 第7课:K8S集群运维实训.pdf ├ 华为云CKA第三课 │...
内容概要:这是一份介绍 Kubernetes (k8s)的教程。首先提供了关于 Kubernetes 平台的基础认知,其次详述了构建 Kubernetes 运行环境所需要的硬件设备和系统软件条件,接着讲解了使用 kubectl 和 Minikube 工具的...
"K8S(kubernetes)学习指南.pdf" Kubernetes是当前最流行的容器编排系统,它提供了自动化部署、扩展和管理容器化应用程序的功能。本文档将指导读者一步步学习Kubernetes的核心概念和实现机制。 首先,Kubernetes的...
Kubernetes,又被称为k8s,是Google开源的一款强大的容器编排工具,旨在自动化容器化应用程序的部署、扩展和管理。Kubernetes的出现是基于应用程序部署方式的演变,从早期的直接部署在物理机上,到虚拟化部署,再到...
ETCD(持久化数据存储),Auth N/Z(身份验证和授权),scheduler(负责调度Pod到合适的节点),以及kube-proxy(实现服务发现和网络策略)。此外,主节点上还有controller-manager,负责处理副本控制器(如...
本“K8S入门基础课件docx版本”旨在帮助初学者快速理解和掌握Kubernetes的基础知识和操作技能。 在K8S中,有几个关键概念是必须理解的: 1. **Pod**: Pod是K8S的基本执行单元,它可以包含一个或多个紧密相关的容器...
CKA(Certified Kubernetes Administrator)认证是针对Kubernetes管理者的专业认证,旨在验证个人在Kubernetes集群安装、配置、操作和故障排除等方面的能力。该认证由Cloud Native Computing Foundation (CNCF) 主导...
K8s CKA 认证实战班】是专为Kubernetes运维工程师设计的一门实战课程,旨在帮助学员深入理解Kubernetes (K8s) 的核心概念、架构和管理技巧,并通过CKA(Certified Kubernetes Administrator)认证考试。课程针对v...