Skip to content

Commit

Permalink
GITBOOK-248: No subject
Browse files Browse the repository at this point in the history
  • Loading branch information
mouuii authored and gitbook-bot committed Feb 5, 2025
1 parent a57ae02 commit 5885f66
Showing 1 changed file with 21 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,26 +2,26 @@

## 概述 <a href="#id-125058" id="id-125058"></a>

我们知道 k8s 存储资源对象使用的是 etcd,kube-apiserver 作为 k8s 的核心组件之一最重要的作用就是跟 etcd 交互。

在 k8s 中 对资源的查询、创建、修改等操作的唯一入口就是 kube-apiserver,由 kube-apiserver 负责调用 etcd 的接口进行增删改查操作。
* k8s 存储资源对象使用的是 etcd
* kube-apiserver 作为 k8s 的核心组件之一最重要的作用就是跟 etcd 交互。
* 在 k8s 中 对资源的查询、创建、修改等操作的唯一入口就是 kube-apiserver,由 kube-apiserver 负责调用 etcd 的接口进行增删改查操作。

我们可以把 kube-apiserver 看成一个数据流通的枢纽,各个组件不会直接通信,而是都要经过kube-apiserver做中转。

<figure><img src="../../.gitbook/assets/image (46).png" alt="" width="563"><figcaption></figcaption></figure>

为了能够妥善处理自客户端的请求,kube-apiserver 做了一些的工作,具体如下图(忽略了一些非关键路径步骤,如日志打印等):
为了能够妥善处理自客户端的请求,kube-apiserver 做了一些的工作,具体如下图:

<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>

* **认证** 确认请求者的身份,判断是不是集群内的合法用户
* **审计** 如果配置了审计的相关参数(如审计日志写入后端),则会对应请求做审计日志记录
* **限速** 根据 PriorityAndFairness 或 MaxInFlight 判断是否要做限速该请求
* **鉴权** 判断请求者是否有权限进行该操作(需要和认证区别开来)
* **准入** 准入分 Mutating 和 Validating
* **认证:** 确认请求者的身份,判断是不是集群内的合法用户
* **审计:** 如果配置了审计的相关参数(如审计日志写入后端),则会对应请求做审计日志记录
* **限速:** 根据 PriorityAndFairness 或 MaxInFlight 判断是否要做限速该请求
* **鉴权:** 判断请求者是否有权限进行该操作(需要和认证区别开来)
* **准入:** 准入分 Mutating 和 Validating
* Mutating:对请求做变更,如加 annotation 之类的操作
* Validating:验证请求的请求体是否合法如参数校验之类的工作或者是否满足其他一些要求如配额等
* **操作ETCD** 调用 ETCD 接口,获取数据或者写入数据
* **操作ETCD:** 调用 ETCD 接口,获取数据或者写入数据

## 聚合层

Expand Down Expand Up @@ -63,7 +63,7 @@ func CreateServerChain(config CompletedConfig) (*aggregatorapiserver.APIAggregat
}
```

CreateServerChain 函数的主要任务是创建并连接 API Server 的不同组件,包括 APIExtensionsServer、KubeAPIServer 和 AggregatorServer。它们通过委托模式(delegation pattern)连接在一起,形成一个处理请求的链条。
CreateServerChain 函数的主要任务是创建并连接 APIExtensionsServer、KubeAPIServer 和 AggregatorServer。通过委托模式(delegation pattern)连接在一起,形成一个处理请求的链条。

* 首先匹配AggregatorServer中的Http路由,匹配处理;不匹配,进入kubeAPIServer。
* 其次匹配kubeAPIServer路由,匹配处理;不匹配,进入apiExtensionsServer。
Expand All @@ -76,38 +76,34 @@ CreateServerChain 函数的主要任务是创建并连接 API Server 的不同

### 1. 认证(Authentication)

认证是验证请求者身份的过程。Kubernetes 支持多种认证方式:
**认证是验证请求者身份的过程。Kubernetes 支持多种认证方式:**

* 客户端证书: 使用 TLS 客户端证书进行身份验证。通常用于集群组件之间的通信。
* Bearer Token: 使用令牌进行身份验证。令牌可以是静态的,也可以通过外部身份提供者动态生成。
* HTTP Basic Auth: 使用用户名和密码进行身份验证。通常不推荐在生产环境中使用。
* OpenID Connect (OIDC): 支持通过 OIDC 协议进行身份验证,允许集成外部身份提供者(如 Google、Azure AD)。
* Webhook Token Authentication: 通过外部 webhook 服务进行令牌验证。

认证流程

1\. 请求到达 API Server: 每个请求首先经过认证模块。

* 选择认证方式: 根据请求头或其他信息,API Server 选择合适的认证方式。
**认证流程**

3\. 验证身份: 认证模块验证请求者的身份。如果认证失败,请求被拒绝。
1. 请求到达 API Server: 每个请求首先经过认证模块。
2. 选择认证方式: 根据请求头或其他信息,API Server 选择合适的认证方式。
3. 验证身份: 认证模块验证请求者的身份。如果认证失败,请求被拒绝。

### 2. 授权(Authorization)

授权是确定请求者是否有权限执行特定操作的过程。Kubernetes 支持多种授权模式:
**授权是确定请求者是否有权限执行特定操作的过程。Kubernetes 支持多种授权模式:**

* RBAC(基于角色的访问控制): 使用角色和角色绑定来管理权限。角色定义了一组权限,角色绑定将角色分配给用户或组。
* ABAC(基于属性的访问控制): 使用策略文件定义权限,基于请求的属性进行授权。
* Webhook Authorization: 通过外部 webhook 服务进行授权决策。
* Node Authorization: 专门用于节点的授权模式,限制节点只能访问与其相关的资源。

授权流程

1\. 认证通过后: 请求者的身份被验证后,进入授权阶段。

* 选择授权模式: 根据集群配置,API Server 选择合适的授权模式。
**授权流程**

3\. 检查权限: 授权模块检查请求者是否有权限执行请求的操作。如果授权失败,请求被拒绝。
1. 认证通过后: 请求者的身份被验证后,进入授权阶段。
2. 选择授权模式: 根据集群配置,API Server 选择合适的授权模式。
3. 检查权限: 授权模块检查请求者是否有权限执行请求的操作。如果授权失败,请求被拒绝。

### 3. 准入控制(Admission Control)

Expand Down

0 comments on commit 5885f66

Please sign in to comment.