Kubernetes:kube-apiserver 之准入

前言 前两篇文章介绍了 kube-apiserver 的认证和鉴权,这里继续往下走,介绍 kube-apiserver 的准入。 准入 admission 不同于前两篇的逆序介绍,这里顺序介绍 admission 流程。从创建准入 options,到根据 options 创建准入 config,接着介绍在 kube-apiserver 的 handler 中是怎么进入准入控制,怎么执行的。 ...

2023-11-14 · xhy

Kubernetes:kube-apiserver 之鉴权

前言 上一篇文章介绍了 kube-apiserver 的认证机制。这里继续往下走,介绍 kube-apiserver 的鉴权。kube-apiserver 处理认证和鉴权非常类似,建议阅读鉴权机制前先看看 kube-apiserver 的 认证。 ...

2023-11-09 · xhy

Kubernetes:kube-apiserver 之认证

前言 kube-apiserver 不仅负责 RESTful API 路由的建立,也负责请求的认证,授权和准入。如下图所示: 本篇文章将介绍 kube-apiserver 的认证机制。 认证 Authentication 认证是对请求的认证,确认请求是否具有访问 Kubernetes 集群的权限。在 kube-apiserver 中,通过 handler 处理请求的认证,所有请求都将通过认证 handler 进行认证。可以把它理解成 Gin 框架的中间件。 ...

2023-11-08 · xhy

Kubernetes:kube-apiserver 和 etcd 的交互

前言 上几篇文章介绍了 kubernetes 的核心数据结构 scheme 和 Kubernetes:kube-apiserver 的启动流程。在启动流程篇中重点关注的是启动的核心逻辑,并没有关注 kube-apiserver 和外部组件的交互。 而交互是非常必要的,其定义了边界和依赖。 ...

2023-11-05 · xhy

Kubernetes:kube-apiserver 之启动流程(二)

接着 Kubernetes:kube-apiserver 之启动流程(一) 加以介绍。 创建 APIExtensions Server 创建完通用 APIServer 后继续创建 APIExtensions Server。 1func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget) (*CustomResourceDefinitions, error) { 2 genericServer, err := c.GenericConfig.New("apiextensions-apiserver", delegationTarget) 3 4 s := &CustomResourceDefinitions{ 5 GenericAPIServer: genericServer, 6 } 7 8 // 存储建立 REST API 到资源实体的信息 9 apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(apiextensions.GroupName, Scheme, metav1.ParameterCodec, Codecs) 10 11 // 资源实体 12 storage := map[string]rest.Storage{} 13 14 // customresourcedefinitions 15 if resource := "customresourcedefinitions"; apiResourceConfig.ResourceEnabled(v1.SchemeGroupVersion.WithResource(resource)) { 16 // 创建资源实体 17 customResourceDefinitionStorage, err := customresourcedefinition.NewREST(Scheme, c.GenericConfig.RESTOptionsGetter) 18 if err != nil { 19 return nil, err 20 } 21 storage[resource] = customResourceDefinitionStorage 22 storage[resource+"/status"] = customresourcedefinition.NewStatusREST(Scheme, customResourceDefinitionStorage) 23 } 24 if len(storage) > 0 { 25 apiGroupInfo.VersionedResourcesStorageMap[v1.SchemeGroupVersion.Version] = storage 26 } 27 28 if err := s.GenericAPIServer.InstallAPIGroup(&apiGroupInfo); err != nil { 29 return nil, err 30 } APIGroupInfo 对象用于描述资源组信息,storage 存储资源到资源实体的对应关系。 ...

2023-11-04 · xhy

Kubernetes:kube-apiserver 之启动流程(一)

前言 前面两篇文章 Kubernetes:kube-apiserver 之 scheme(一) 和 Kubernetes:kube-apiserver 之 scheme(二) 重点介绍了 kube-apiserver 中的资源注册表 scheme。这里进入正题,开始介绍 kube-apiserver 的核心实现。 kube-apiserver 启动流程 kube-apiserver 使用 Cobra 作为 CLI 框架,其初始化示意图如下。 ...

2023-10-25 · xhy

Kubernetes:kube-apiserver 之 scheme(二)

接 Kubernetes:kube-apiserver 之 scheme(一)。 资源 convert 上篇说到资源版本之间通过内部版本 __internal 进行资源转换。这里进一步扩展介绍资源转换内容,以加深理解。 同样以例子开始,通过 kubectl 将 apps/v1beta1/Deployment 转换为 apps/v1/Deployment。 ...

2023-10-19 · xhy

Kubernetes:kube-apiserver 之 scheme(一)

前言 在进入 kube-apiserver 源码分析前,有一个非常重要的概念需要了解甚至熟悉的:资源注册表(scheme)。 Kubernetes 中一切皆资源,管理的是资源,创建、更新、删除的是资源。如何对庞杂的资源进行管理就成了一件大事。Kubernetes 通过引入 scheme 资源注册表,将资源信息注册到资源注册表,各个组件通过索引资源注册表实现资源的管理。 ...

2023-10-17 · xhy