作者记录了2024年9月3日至9月8日期间的生活和思考,参加了Rust Conf 2024活动,重构了用Rust编写的Api Server,玩了Lake游戏,体验了滑板课程,并迁移了RSSHub部署。作者分享了个人生活中的趣事和有趣的输入。最后,作者提供了10个Follow应用的邀请码给读者。
本文介绍了kubernetes中kube-apiserver的限流机制。在kubernetes 1.18版本之前,kube-apiserver只能根据请求类型进行限流,容易导致系统阻塞。而在1.18版本后,引入了APIPriorityAndFairness(APF)作为默认的限流方式,可以根据请求对象、请求者身份、命名空间等更细粒度地进行限流。APF通过FlowSchema和PriorityLevelConfiguration两个资源配置限流策略。FlowSchema用于匹配请求,PriorityLevelConfiguration用于定义限流细节。文章还介绍了APF的处理过程和实战操作。
本文介绍了如何通过Kube-apiserver访问K8s集群中的App。首先启动App,然后设置svc访问,最后通过token或证书方式访问App。Kube-apiserver提供代理URL格式,可以附加url后缀和参数。通过管理面访问App可以提供默认访问能力,无需额外绑定EIP。
本文介绍了kube-apiserver的认证鉴权能力,包括HTTPS身份验证、三种认证方式和RBAC配置。
本文介绍了 kube-apiserver 的钩子函数和 bootstrap-controller 的创建和启动逻辑,以及 Runner 对象和函数的实现。kube-apiserver 的 controller 通过注册钩子函数实现监控和操作资源。
介绍Kube-apiserver内部三个组件及APIService作用,APIService是k8s资源和CRD资源的注册中心,可通过http://{server_ip}/apis获取APIGroup对象。详细讲解核心资源和CRD资源的注册逻辑,实时同步CRD资源更新。
本文介绍了 kube-apiserver 中的准入控制参数初始化和应用参数的过程,以及两个插件的实现:ServiceAccount 和 NamespaceLifecycle。准入控制可以通过 MutatingAdmissionWebhook 和 ValidatingAdmissionWebhook 的方式扩展。
本文介绍了 kube-apiserver 后端存储的实现方式,包括 Storage、REST 和 Store 三个对象的构造和关系,以及 handler 对象处理请求的方法。同时,文章详细介绍了创建资源的具体实现,包括获取注册的默认 GVR、构造 reqscope 变量、创建 decoder、获取请求体等步骤。最后,文章介绍了将对象持久化到 ETCD 的过程。
介绍了Kubernetes中default ServiceAccount的权限和鉴权逻辑,default ServiceAccount属于两个用户组,具有get所有资源的权限,鉴权逻辑委托给authorizationRuleResolver匹配用户组,匹配规则后允许访问。
本文介绍了Kubernetes中请求链的工作原理,包括构造过程、认证和鉴权处理函数。认证通过TLS证书和ServiceAccount Token进行,鉴权根据用户权限判断。通用处理函数WithRequestInfo提供了请求信息的上下文对象RequestInfo。
本文介绍了Kubernetes中的GenericAPIServer对象以及其在Kubernetes代码版本v1.20.2中的构建过程。GenericAPIServer是一个抽象的HTTP服务器,提供了注册路由和钩子函数的功能。文章还介绍了GenericAPIServer的构建过程,包括创建apiExtensionsServer对象、构造处理链、构建apiServerHandler等。文章还提到了nonGoRestfulMux和gorestfulContainer两个对象,用于注册非RESTful和RESTful风格的路由。最后,文章简要介绍了PrepareRun和Run方法的实现,以及GenericAPIServer.Handler的处理过程。
Kubernetes代码版本为v1.20.2。kube-apiserver是Kubernetes中最核心的组件,负责接受请求并将数据持久化到后端存储。apiserver提供增删改查以及监听的接口,包括认证、鉴权、准入控制、内部资源转发、外部资源转发、后端持久化和响应。启动流程包括创建Options对象、解析命令行参数、校验、补全Options对象、生成server、启动前准备和启动。CreateServerChain用于分配请求和服务发现,包括创建Config对象和三个组件:apiExtensionsServer、kubeAPIServer和aggregatorServer。PrepareRun方法准备运行APIAggregator和GenericAPIServer。
1. 本地怎么访问远程集群 在研发时,需要直接连接远端 Kubernetes 集群。通常的做法是,将 /etc/kubernetes/admin.conf 拷贝到本地 ~/.kube/kubeconfig。 但是 kubeconfig 的 server 地址是 kubernetes.default.svc。因此,我们需要配置一个 hosts: 1 1.1.1.1...
PDF 文件在此: apiserver 起因是因为一个要做一个新的项目,在综合考量 kubernetes 的各个库之后,发现 kubernetes 已经从主项目中把很多可以复用的项目都单独移出来了。而且包含了很多通用性很强的代码。作为以 Golang + Kubernetes...
基于版本 1.6.7 前面介绍了, api注册过程 问题: go-restful github的route中, handler和path是如何绑定在一起的? handler在哪里定义
基于版本 1.6.7 k8s使用了go-restful github, 在前面, 已经介绍了container如何初始化的. 这里, 需要关注, api是如何注册进来的. 即, route
基于版本 1.6.7 启动流程 cmd/kube-apiserver/apiserver.go func main() { app.Run(s) } cmd/kube-apiserver/app/server.go func Run(s *options.ServerRunOptions) error { // 构建master配置信息 config, sharedInformers,...
基于版本 1.6.7 k8s的APIServer, 使用了go-restful作为其处理框架, 注册资源并接收处理 HTTP 请求. 在阅读APIServer源码之前,
完成下面两步后,将自动完成登录并继续当前操作。