K8S源码分析: API Server

简介:

基于kubernetes 1.9版本源码

启动

入口地址在\cmd\kube-apiserver\apiserver.go\main()

函数很短,里面只有三句重要的代码

s := options.NewServerRunOptions()  //新生成一个ServerRunOptions对象
s.AddFlags(pflag.CommandLine)       //ServerRunOptions填值
......
if err := app.Run(s, stopCh); err != nil {  //生成一个API Server实例

NewServerRunOptions() 调用了\cmd\kube-apiserver\app\options\options.go\NewServerRunOptions()函数, 里面做的事件很简单, 就是初始化一个ServerRunOptions结构体, 这个是API Server中的关键结构体

type ServerRunOptions struct {
   GenericServerRunOptions *genericoptions.ServerRunOptions   // 服务器通用的运行参数
   Etcd                    *genericoptions.EtcdOptions
   SecureServing           *genericoptions.SecureServingOptions
   InsecureServing         *kubeoptions.InsecureServingOptions
   Audit                   *genericoptions.AuditOptions
   Features                *genericoptions.FeatureOptions
   Admission               *genericoptions.AdmissionOptions
   Authentication          *kubeoptions.BuiltInAuthenticationOptions
   Authorization           *kubeoptions.BuiltInAuthorizationOptions
   CloudProvider           *kubeoptions.CloudProviderOptions
   StorageSerialization    *kubeoptions.StorageSerializationOptions
   APIEnablement           *kubeoptions.APIEnablementOptions
   AllowPrivileged           bool  // 是否配置超级权限,即允许Pod中运行的容器拥有系统特权
   EnableLogsHandler         bool  
   EventTTL                  time.Duration // 事件留存事件, 默认1h
   KubeletConfig             kubeletclient.KubeletClientConfig // K8S kubelet配置
   KubernetesServiceNodePort int
   MaxConnectionBytesPerSec  int64
   ServiceClusterIPRange     net.IPNet // TODO: make this a list
   ServiceNodePortRange      utilnet.PortRange
   SSHKeyfile                string    // 指定的话,可以通过SSH指定的秘钥文件和用户名对Node进行访问
   SSHUser                   string    ProxyClientCertFile string
   ProxyClientKeyFile  string    EnableAggregatorRouting bool    MasterCount            int
   EndpointReconcilerType string }

上面的genericoptions定义在\staging\src\k8s.io\apiserver\pkg\server\options里面

初始化完成之后,最重要的任务就是启动实例了。所有的操作都是在run函数中执行,app.run()接口实现在cmd/kube-apiserver/app/server.go

func Run(runOptions *options.ServerRunOptions, stopCh <-chan struct{}) error {
   // To help debugging, immediately log version
  glog.Infof("Version: %+v", version.Get())

   server, err := CreateServerChain(runOptions, stopCh)
   if err != nil {
      return err
   }

   return server.PrepareRun().Run(stopCh)
}
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
人工智能 API 开发工具
GitHub官方开源MCP服务!GitHub MCP Server:无缝集成GitHub API,实现Git流程完全自动化
GitHub MCP Server是基于Model Context Protocol的服务器工具,提供与GitHub API的无缝集成,支持自动化处理问题、Pull Request和仓库管理等功能。
3670 2
GitHub官方开源MCP服务!GitHub MCP Server:无缝集成GitHub API,实现Git流程完全自动化
|
Kubernetes API 网络安全
当node节点kubectl 命令无法连接到 Kubernetes API 服务器
当Node节点上的 `kubectl`无法连接到Kubernetes API服务器时,可以通过以上步骤逐步排查和解决问题。首先确保网络连接正常,验证 `kubeconfig`文件配置正确,检查API服务器和Node节点的状态,最后排除防火墙或网络策略的干扰,并通过重启服务恢复正常连接。通过这些措施,可以有效解决与Kubernetes API服务器通信的常见问题,从而保障集群的正常运行。
1296 17
|
人工智能 JavaScript 测试技术
构建智能 API 开发环境:在 Cursor 中连接 Apifox MCP Server
本文介绍了如何将Apifox MCP Server与Cursor结合,通过AI直接获取和理解API文档,大幅提升开发效率。首先需配置Apifox的Access Token和项目ID,并在Cursor中设置MCP连接。实际应用场景包括快速生成模型代码、同步更新接口文档与代码、生成CRUD操作、搜索API文档及自动生成测试用例。此外,还提供了管理多项目、安全性实践和优化AI响应质量的技巧。这种组合可显著减少从API规范到代码实现的时间,降低错误率并加速迭代过程,为开发者带来更高效的体验。
|
Kubernetes 安全 Cloud Native
云上攻防-云原生篇&K8s安全-Kubelet未授权访问、API Server未授权访问
本文介绍了云原生环境下Kubernetes集群的安全问题及攻击方法。首先概述了云环境下的新型攻击路径,如通过虚拟机攻击云管理平台、容器逃逸控制宿主机等。接着详细解释了Kubernetes集群架构,并列举了常见组件的默认端口及其安全隐患。文章通过具体案例演示了API Server 8080和6443端口未授权访问的攻击过程,以及Kubelet 10250端口未授权访问的利用方法,展示了如何通过这些漏洞实现权限提升和横向渗透。
2547 0
云上攻防-云原生篇&K8s安全-Kubelet未授权访问、API Server未授权访问
|
API 开发者
【API管理 APIM】APIM集成内部VNet后,自我访问出现(Unable to connect to the remote server)问题,而Remote Server正是APIM它自己
【API管理 APIM】APIM集成内部VNet后,自我访问出现(Unable to connect to the remote server)问题,而Remote Server正是APIM它自己
751 5
|
Kubernetes 负载均衡 API
在K8S中,api-service 和 kube-schedule 高可用原理是什么?
在K8S中,api-service 和 kube-schedule 高可用原理是什么?
|
10月前
|
缓存 监控 前端开发
顺企网 API 开发实战:搜索 / 详情接口从 0 到 1 落地(附 Elasticsearch 优化 + 错误速查)
企业API开发常陷参数、缓存、错误处理三大坑?本指南拆解顺企网双接口全流程,涵盖搜索优化、签名验证、限流应对,附可复用代码与错误速查表,助你2小时高效搞定开发,提升响应速度与稳定性。
|
11月前
|
数据可视化 测试技术 API
从接口性能到稳定性:这些API调试工具,让你的开发过程事半功倍
在软件开发中,接口调试与测试对接口性能、稳定性、准确性及团队协作至关重要。随着开发节奏加快,传统方式已难满足需求,专业API工具成为首选。本文介绍了Apifox、Postman、YApi、SoapUI、JMeter、Swagger等主流工具,对比其功能与适用场景,并推荐Apifox作为集成度高、支持中文、可视化强的一体化解决方案,助力提升API开发与测试效率。
|
10月前
|
JSON 算法 API
Python采集淘宝商品评论API接口及JSON数据返回全程指南
Python采集淘宝商品评论API接口及JSON数据返回全程指南
|
10月前
|
JSON API 数据安全/隐私保护
Python采集淘宝拍立淘按图搜索API接口及JSON数据返回全流程指南
通过以上流程,可实现淘宝拍立淘按图搜索的完整调用链路,并获取结构化的JSON商品数据,支撑电商比价、智能推荐等业务场景。

推荐镜像

更多