apiserver是处理请求的一个restapi
进入apiserver首先是要认证,然后是鉴权,然后是admission准入,分为mutating(加入参数生成新的request),validating,对生成的新的请求进行校验,以上几步都可以有hook来进行额外的操作,
最后持久化道etc
apiserver是挡在etcd之前的它会存在缓存,以减少etcd的压力

基于x509创建访问apiserver的user


1 生成对应的key
openssl genrsa -out myuser.key 2048
2. 生成csr certificate sign request
openssl req -new -key myuser.key -out myuser.csr
3. cat myuser.csr | base64 | tr -d “\n”
查看csr中的request 填入下方k8s csr对象中
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:
name: myuser
spec:
request: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJQzJ6Q0NBY01DQVFBdR4Q3pBSkJnTlZCQWdNQWtwVE1Rc3dDUVlEVlFRSApEQUp6YURFTU1Bb0dBMVVFQ2d3RGMyRndNUTh3RFFZRFZRUUxEQVp0ZVhWelpYSXhEekFOQmdOVkJBTU1CbTE1CmRYTmxjakVkTUJzR0NTcUdTSWIzRFFFSkFSWU9iWGwxYzJWeVFITmhjQzVqYjIwd2dnRWlNQTBHQ1NxR1NJYjMKRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFDbUZoNkxRemF0bG9BWTZ4RTFnc1BrZnUrYTk2TnlKNW9oUVNSRApIbWJWQmZmb0pXUEZ5SHBMR3REaWs2SGpuR1VkdDFpSWR1T29EcGlsQ3lxMXMydDJWZHNOVUpCcmlQWE0zZUd0CjBqcDNXZzE1YUlXRERHQ25MZm5JRkVtSytGbFREMDVKM215bDY2T1NLL0hKOE1kYko2QS9TZjJpTlhDV0lJSWoKR01iL1pvTGMxd255SWk4M1VBb0tFeHlHTGNSU1ZRUTJ1OHdoQ1RRM3VSM3VNNVJvY3M4VFROSDI4V1BweXErbQpCQlpRcWF1ZUJtK3lFNkRyaUl0NlZ6b0ExazhKanQxd2gwTVB6bi9FaXN2ZEpKSHRTOHJTWlZIWk5sWHZKbFBnCitUZFZiME50MzlWL1U1TFoyME1RdkNjY1NHYVVMSTRnUXpzMFFuQW5MaGsxY2NyQkFnTUJBQUdnSURBZUJna3EKaGtpRzl3MEJDUWN4RVF3UGRHWm5hakU1T1RJd01UQXpWMWtxTUEwR0NTcUdTSWIzRFFFQkN3VUFBNElCQVFCdwpRcUcyNTA2L2pVU0lBVkJndkdEcWlIUzRwOG5jNGFoS3FOOHFWV0g4d1pwRXJmVzZ4MXkzb1hRSm44STVvVys1Ck5UYWRnSUwvdmQ3OStpK2NsZ0tNb0hHSmtCaXJDVTVKY01QNE5qdzJiMkhIbTIwMWd5SmdqRUJiUG1CcVh5VHkKcTk2WmQ4TlhTN081RzNrR0UzV2JGNEdxWVpLY3BycXZnSWMyN2hjbXBEdjUzL3FlbVd4dDVqMk1mZElyNk9ybwowbkljbWU1MzQvY3NONEZMK2VuTjk0WUZ3cnhpdWtVS0xYcXRENkphaFJnRTRWUVNlVm8rTmZpbzFDZTYyTkl5CkdjcFlKV2Ivc2VQV25acm8rRlhuMXZHUUUyQlRlUjRpTWZINjNaRUhQSXhwaXlGc2gycUlGNUJPcU4xeVJRa3kKdE5tZmh4QlJiWFJ1Vm9LYnFJY3QKLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCg==
signerName: kubernetes.io/kube-apiserver-client
expirationSeconds: 86400 # one day
usages:

  • client auth

创建csr对象

kubectl certificate approve myuser
创建role rolebinding 关联myuser
kubectl create role developer --verb=create --verb=get --verb=list --verb=update --verb=delete --resource=pods
kubectl create rolebinding developer-binding-myuser --role=developer --user=myuser
kubectl get pods --username=myuser

准入控制

配额管理

资源是有限的
方案:
定义ns的resourcequota,把spec保存为configmap
定义每个用户可以创建多少个pod
QosPod
BestEffortPod
用户可以创建多少个service ingress serviceVIP

ResourceQuator Controller
监控ns创建事件,限制创建的service ingress等个数
apiVersion: v1
kind: ResourceQuota
metadata:
name: object-counts
namespace: default
spec:
hard:
configmaps: “1”
service: “30”
ingress: “20”

limitRanger插件为pod设置默认资源请求和限制,需要在ns中创建LimitRange对象

namespacelifecycle: ns被删除后不接受创建请求
kube-apiserver --enable-admission-plugins=NamespaceLifecycle,LimitRanger

准入支持webhook

admission
mutating webhook 变形插件
有了mutating webhook对象

 apiVersion: admissionregistration.k8s.io/v1kind: MutatingWebhookConfigurationmetadata:name: ns-mutating.webhook.iowebhooks:- clientConfig:caBundle: {{.serverca_base64}} #caBundle 是一个 PEM 编码的 CA 包,将用于验证 Webhook 的服务证书。如果未指定,则使用 apiserver 上的系统信任根。url: https://admission.local.tess.io/api/admission.k8s.io/v1alpha1/ns-mutatingfailurePolicy: Failname: ns-mutating.webhook.ionamespaceSelector: {}rules:- apiGroups:- ""apiVersions:- '*'operations:- CREATEresources:- nodessideEffects: Unknown

它这个webhook需要一个service,一个deployment,一个后台,相当于是截获的流量到你的service负载均衡到后台,然后对request进行二次加工。

validating webhook 校验插件

validating webhook对象类似

apiserver 限流
全局限流 maxinflightlimit #最大并发处理的请求个数
maxrequestflightlimit #最大处理修改的请求个数

    然后接下来就是走到flowschema,它会分不同的流,然后到queue中,通过shaffhsading到算法,使得不会被某个大用户把队列沾满proorityLevelConfiguration 它下面有queue set,相当于是一个queue的集合,一个flow过来只能到几个queue里面

flowschema

root@iZwz9b6ehvw4yhz5f1wa4uZ:~/101/module6/mutatingwebhook/admission-controller-webhook-demo/deployment# kubectl get flowschemas.flowcontrol.apiserver.k8s.io system-nodes  -oyaml
apiVersion: flowcontrol.apiserver.k8s.io/v1beta1
kind: FlowSchema
metadata:annotations:apf.kubernetes.io/autoupdate-spec: "true"creationTimestamp: "2022-10-13T07:53:51Z"generation: 1name: system-nodes. # name+ type确定一个flowresourceVersion: "60"uid: 9cc4d1b0-b0d8-4be8-b08e-4ce0d97ec6ed
spec:distinguisherMethod:type: ByUsermatchingPrecedence: 500。#规则的优先级越小等级越高priorityLevelConfiguration: #对应的优先级队列name: systemrules:- nonResourceRules:- nonResourceURLs:- '*'verbs:- '*'resourceRules:- apiGroups:- '*'clusterScope: truenamespaces:- '*'resources:- '*'verbs:- '*'subjects:- group:name: system:nodeskind: Group
status:conditions:- lastTransitionTime: "2022-10-13T07:53:51Z"message: This FlowSchema references the PriorityLevelConfiguration object named"system" and it existsreason: Foundstatus: "False"type: Dangling
apiVersion: flowcontrol.apiserver.k8s.io/v1beta1
kind: PriorityLevelConfiguration
metadata:annotations:apf.kubernetes.io/autoupdate-spec: "true"creationTimestamp: "2022-10-13T07:53:51Z"generation: 1name: systemresourceVersion: "59"uid: b97d04de-e3f3-420b-9e3a-ce62a24e4316
spec:limited:assuredConcurrencyShares: 30limitResponse:queuing:handSize: 6queueLengthLimit: 50queues: 64type: Queuetype: Limited
status: {}

调试
优先级当前状态
kubectl get --raw /debug/api_priority_and_fairness/dump_priority_levels
所有队列当前状态列表
kubectl get --raw /debug/api-priority_and_fairness/dump_queues
当前正在等待的请求
kubectl get --raw /debug/api-priority_and_fairness/dump_reqeust

apiserver 补充 限流认证 以及mutating流程相关推荐

  1. 【.NET Core项目实战-统一认证平台】第七章 网关篇-自定义客户端限流

    上篇文章我介绍了如何在网关上增加自定义客户端授权功能,从设计到编码实现,一步一步详细讲解,相信大家也掌握了自定义中间件的开发技巧了,本篇我们将介绍如何实现自定义客户端的限流功能,来进一步完善网关的基础 ...

  2. Sentinel(七)之网关限流

    转载自  网关限流 Sentinel 支持对 Spring Cloud Gateway.Zuul 等主流的 API Gateway 进行限流. Sentinel 1.6.0 引入了 Sentinel ...

  3. Sentinel 之 网关限流

    网关限流 该文档来之Sentinel官方文档 Sentinel 支持对 Spring Cloud Gateway.Zuul 等主流的 API Gateway 进行限流. Sentinel 1.6.0 ...

  4. Kubernetes APIServer 限流策略

    之前说过了,认证,鉴权,准入,这三个重要的环节.到此为止k8s apiserver就已经将请求继续往后传递了,作为rest服务器,它一定要有自我保护机制,这个自我保护的机制最核心的就是限流. 作为we ...

  5. Django Rest framework的限流实现流程

    目录 一 什么是throttle 二 Django REST framework是如何实现throttle的 三 Django REST framework中throttle源码流程 一 什么是thr ...

  6. kong 自建一个具有健康检查功能的http/tcp负载均衡器,配置流量权重,自动/手动目标健康,流量统一认证、鉴权、限流限速、修正,监控、日志等功能

    全栈工程师开发手册 (作者:栾鹏) 架构系列文章 Kong 目前kong的最新版为2.2,官方git在https://github.com/Kong/kong,下面是一个kong的简单结构 kong的 ...

  7. kong插件应用(熔断 限流,黑白名单,认证(basic,key,jwt,hmac,),授权,加密,zipkin链路跟踪,日志, prometheus可视化, 爬虫控制插件)

    全栈工程师开发手册 (作者:栾鹏) 架构系列文章 kong安装部署以及kong-dashboard参考:https://blog.csdn.net/luanpeng825485697/article/ ...

  8. APIView(认证,权限,限流,过滤,分页,序列化,排序)

    概述: 一.身份认证: 1: 配置身份认证后端:注意:只作用于DRF视图,对django视图不起作用. 主要有两个认证后端,一个是基本认证后端,一个是seesion认证后端.BasicAuthenti ...

  9. 带SN切换流程_抖音频繁切换账号会限流吗?抖音频繁切换账号会降权吗?

    抖音限流一般是因为发非原创或者广告造成的,但是也有很大一批号是没有任何原因,忽然就被限流的.第一种被限流是因为违规,这个没有办法,只能发优质内容慢慢做.如果没有因为明显的违规忽然被限流,这种情况一般申 ...

最新文章

  1. ios jenkins配置_Jenkins + TestNG 实现自助式自动化测试平台
  2. NYOJ 195 飞翔
  3. bufferedreader读取中文乱码_python字符乱码的解决小结
  4. 利用curl 多线程 模拟 并发的详解
  5. 手撸移动端轮播图(内含源码)
  6. 为什么学习Python数据分析,python数据分析有什么用?
  7. 工厂供电MATLAB仿真,工厂供电课程设计---基于MATLAB的电力电子系统仿真
  8. 【网络流24题】【LOJ6010】数字梯形(费用流)
  9. 网页脚本基本java语法_JSP学习(一)JSP基础语法
  10. Spark 共享变量详解
  11. 电路基础学习笔记2:串并联电路
  12. 用华为模拟器ENSP构造校园网(第二天)配置总网络拓扑DHCP中继
  13. unbuntu20.04安装mysql5.7
  14. 远程云服务器闪退_远程服务器连接 闪退
  15. 原码、反码、补码二进制表示
  16. Lifecycle使用及原理讲解
  17. BLE蓝牙5.2-PHY6222系统级芯片(SoC)智能手表/手环
  18. 对于RE文件管理器打开安卓手机的Sqlite文件速度很慢的解决办法
  19. ORAN专题系列-21:5G协议栈功能切分选项与O-RAN白盒化
  20. python自动发outlook邮件_使用python自动发邮件(163、QQ、outlook邮箱)

热门文章

  1. bcedit双系统更改启动项名称_Win7下双系统修改BCD启动项名称
  2. 用c语言统计给定的n个数中,负数、零和正数的个数。
  3. HTML学习笔记 2
  4. c语言中.dat是什么文件,c 盘目录下的windata.dat是什么文件 可以删吗
  5. python雪花_用 Python 实现雪花效果
  6. 故事,零落,,,,,
  7. windows7英文版,变为中文版
  8. 电视连续剧——穿帮大汇总
  9. * What went wrong:A problem occurred evaluating project ‘:app‘.> Failed to apply plugin ‘com.andro
  10. oop三大特性--封装性