K8s-kube-apiserver(授权)
K8s-kube-apiserver(授权) 基于1.25 kube-apiserver的授权客户端请求通过认证之后,进入授权阶段,校验对应用户是否具有对应数据读写的权限 支持多种授权机制,并且支持开启多个授权功能 如果开启多个授权,按照授权顺序执行 只要有一个授权器通过,授权就成功 目前支持六种授权模式: AlwaysAllow:允许所有请求 AlwaysDeny:阻止所有请求 ABAC:基于属性的访问控制 Webhook:基于Webhook的一种HTTP回调,远程授权管理 RBAC:基于角色的访问控制 Node:节点模式,专门授权kubelet发出的API请求 集群默认开启Node和RBAC模式 在kube-apiserver中,Authorization授权有三个概念,分别是Decision决策状态、授权器接口和Rule Resolver规则解析器 Decision决策状态 Decision决策状态类似于身份认证中的true和false,用来表示授权是否成功 Ref:https://github.com/kubernetes/apiserver/blob/ba...
K8s-kube-apiserver(请求与认证)
K8s-kube-apiserver(请求与认证) 基于1.25 kube-apiserver请求处理流程: 权限控制体系 认证kube-apiserver支持多种认证机制,并且支持同时开启多个认证功能,组成认证链路 目前支持8种: RequestHeader ClientCA TokenAuth ServiceAccountAuht BootstrrapToken OIDC WebHookTokenAuth Anonymous RequestHeader认证kubeapiserver通过制定以下参数开启RequestHeader认证 --requestheader-client-ca-file制定认证代理客户端证书签发所使用的CA证书,必选 --requestheader-allowed-names:指定允许的通用名称(CN)列表。如果设置则客户端中列表中,不然任选 --requestheader-username-headers:指定HTTP Header中用于设置用户名的字段名称列表,API Server按照顺序检查用户身份,第一个匹配结果作为用户名,必选 --r...
基于OpenVPN建立局域网
基于OpenVPN建立局域网搭建Server安装依赖1234// curl 下载centos7依赖// curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repoyum updateyum install epel-release 官方一键安装123456789101112131415wget https://raw.githubusercontent.com/Angristan/openvpn-install/master/openvpn-install.shsudo chmod +x openvpn-install.shsudo ./openvpn-install.shsystemctl start openvpn@serversystemctl status openvpn@servervim /etc/openvpn/server.conf // 监听网卡tcpdump -i tun0 选择绑定公网IP 选择协议UDP/TCP,记得打开对应端...
K8s-kube-apiserver(启动流程)
K8s-kube-apiserver(启动流程) 基于1.25 APIServer启动流程: Schema资源注册 Cobra命令桉树解析 创建API Server通用配置 创建API EXtensionsServer 创建KubeAPIServer 创建AggregatorServer GenericAPIServer初始化 准备和启动HTTPS服务 Scheme资源注册使用Scheme所有资源注册到APIServer中 Scheme资源注册不算使用显式代码触发,通过init注册。 初始化Scheme资源注册表 Ref:https://github.com/kubernetes/kubernetes/blob/88e994f6bf8fc88114c5b733e09afea339bea66d/pkg/api/legacyscheme/scheme.go#L24 1234567891011121314151617var ( // Scheme is the default instance of runtime.Scheme to which types in the Ku...
K8s-kube-apiserver(Overview)
K8s-kube-apiserver(Overview) 基于1.25 什么是Kube-apiserverkube-apiserver是K8s控制面的组件之一 主要提供集群管理的RESTAPI接口,包括认证授权、数据校验、配置变更 只有kube-apiserver才能直接操作etcd集群中的数据 Pod创建的关键流程: 用户通过客户端向kube-apiserver发起Pod请求 kube-apiserver验证请求的有效性,并将其持久化保存到etcd集群 kube- schedule基于Watch机制感知到新Pod创建的事件 kube- schedule执行调度算法 kube-apiserver验证Bind请求,将结果持久化道etcd集群 kubelet基于Watch机制感知到Pod完成绑定事件 kubelet对应节点的容器运行时交互,启动容器,并向kube-apiserver上报Pod的运行状态 kube-apiserver将Pod的最新状态持久化到etcd集群 用户通过客户端向kube-apiserver发起Pod查询请求 网络通信框架kube-apiserver...
K8s-etcd核心存储实现
K8s-etcd核心存储实现 基于1.25 什么是Etcdetcd是K8s默认的数据持久化端存储,主要用于保存集群配置和状态 etcd是分布式键值存储集群 基于Raft协议提供可靠强一致性数据存取服务 架构设计REST Storage genericregistory.Storegenericregistory.Store封装了资源对象的CRUD操作,并且支持资源版本ResourceVersion的冲突检查 在存储资源对象前执行Beofre Func,存储资源对象后执行(After Func),以及处理DryRun storage.Interface底层通用存储接口,定义了资源的操作方法,Create|Delete|Watch|Get|Count|GETList|GuranteedUpdate|Versioner cachestorage.Cacher为了减轻etcd读取压力和提供了Cache,可以通过设置kube-apiserver的–watch-cache启动或者关闭Cacher,默认开启 Underlying Storage后端存储,默认K8s使用etcd3,使用...
K8s-kubectl(变更对比策略和拓展命令)
K8s-kubectl(变更对比策略和拓展命令) 基于1.25 什么是变更对比策略 kuebctl apply 通过JSON/YAML,标准输入输出获取K8s集群进行配置更新 Kubectl edit 实时编辑K8s资源对象 kubectl patch 提供更新资源对象 kubectl diff 本地文件和实时资源对比 所以存在了不同的对比策略场景: 变更对比逻辑在哪进行(服务端还是客户端) 针对什么资源对象可以进行变更对象 使用说明变更对比算法 服务端应用和客户端应用服务端应用通过声明式的方法,kuebctl 发送完整的对象描述去创建和更新对象。 kubectl提供了俩个命令参数实现支持服务端: server-side:服务端应用的开关,当设置为true时,开启并使用服务端应用 force-conflicts:冲突解决策略,当设置为true;会强制应用变更 kubectl apply 和kubectl diff 都支持启用服务端应用 kubectl patch 值提供服务端应用的变更方式 客户端应用与服务端不同,客户端在处理变更和冲突逻辑之后...
K8s-kubectl(缓存机制)
K8s-kubectl(缓存机制) 基于1.25 kubectl的关键步骤是构造操作/查询资源的请求 kubectl为了减小kube-apiserver的压力,使用Client-go中的CacheDisoveryClient提供的本地磁盘能力。 缓存数据结构kubectl使用servergroups.json文件缓存从kube-apiserver获取所有的资源信息 缓存文件存在$KUBECACHEDIR/disocvery中 没有设置环境变量KUBECACHEDIR,默认位置$HOME/.kube/cache 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108...
K8s-kubectl(执行流程)
K8s-kubectl(执行流程) 基于1.25 什么是kubectlkubectl是kube-apiserver的客户端,通过向kube-apiserver发送HTTP请求,实现对K8s集群的控制 初始化命令对象kubectl使用NewCmdXX 进行初始化,主要有俩类对象: cobra.Command:提供命令对象 XXXoptions:Options命令参数对象 补全命令参数支持补全成命令执行的相关工具类,形成完整的Options,主要工具包含三种 Genericclioptions.Recorder:用于记录资源对象发生变化的原因,对于由kubectl触发的变更,genericclioptions.Recoder会将完整的命令记录到资源对象的kubernetes.io/change-cause注解中 resource.QueryParamVerifier:用于检查资源对象是否支持DryRun和资源对象娇艳 options.ToPrinter/options.PrintObj:打印相关函数,用于获取命令执行结果之后,执行结果打印到终端 校验命令...
K8s-client-go(常用工具类:事件管理机制+Leader选举机制)
K8s-client-go(常用工具类:事件管理机制+Leader选举机制) 基于1.25 事件管理机制Event是一种对象资源,展示集群中发生的事件,包含调度器的操作、Pod为什么被驱逐 存储在kube-apiserver的Pod中,有强制保留策略,在最后一次事件发生之后,删除一个小时之前的事件 Ref:https://github.com/kubernetes/api/blob/f7b7ea4f0fcc6cb8c8dd42eb46a94c7e163d1b9d/core/v1/types.go#L5776 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162type Event struct { // metav1.TypeMeta 嵌入类型,包含 APIVersion 和 Kind 字段,用于标识对象的 API 版本和类型 metav1.TypeMeta `...