20-K8S Basic-准入控制器基础应用(未完)
一、准入控制模块介绍
- 认证、授权、准入控制
- 典型认证模块(一票通过)
- client cert
- username / password
- token
- 典型授权模块(一票通过)
- Node
- ABAC
- RBAC
- WobHook
- 典型认证模块(一票通过)
- 准入控制模块(准入控制器 → adminission controller)(一票否决)仅对修改类操作的权限生效
- 变异型模块 :
- 主要实现按照模块中的规范修改用户提交的关于功能属性的提供,一般不会拒绝用户的操作请求,仅是修改用户的操作请求
- 校验型模块 :
- 主要验证用户给定的配置信息是否符合系统已有的某种规范,一般用于检验用户提交的修改的操作是否被准许,如果用户的修改请求符合准入控制器的规范则被通过,如果不符合准入控制器的规范则被拒绝
- 校验型准入控制器有很多以下为基本准入控制器
- AlwaysAdmit (DEPRECATED 被废弃的) : 总是允许
- AlwaysDeny (DEPRECATED 被废弃的) : 总是拒绝
- AlwaysPullmages : 无论Pod的镜像获取测试定义为哪种都将自动拉取镜像并不使用本地镜像(强制避免使用本地镜像)
- DefaultStorageClass :默认存储类
- DefaultTolerationSeconds
- DenyEscalatingExec
- EventRateLimit(alpha)
- ExtendedResourceToleration
- ImagePolicyWebhook
- Initalizers(alpha)
- LimitPodHardAntiAffinityTopology
- LimitRanger (常用):单个Pod限制范围
- Pod的资源限制即计算资源限制(Pod Computing Resources)
- CPU 资源上限及资源下限 requests , limits
- Memory 资源上限及资源下限 requests , limits
- Pod的资源限制即计算资源限制(Pod Computing Resources)
- ResourceQuota (常用):整个名称空间下的资源配额总量
- 可以再某一个新的名称空间下定义一个新的类型为ResourceQuota 资源
- 限制一个名称空间下可以定义多少个资源
- 比如可以定义 此名称空间下可以跑N个Pod,N个Service,N个Deploy等
- 也可以明确指定说所以Pod加起来多消耗的核心不能超过多少,以及总消耗的内存不能超过多少G
- 从总量上限制一个名称空间的计算资源及存储资源及各种各样的K8S资源的可用数量
- 可以再某一个新的名称空间下定义一个新的类型为ResourceQuota 资源
- ServiceAccount
- 启动的Pod默认都会挂载一个Volume,所以所有启动的Pod都会被附加一个ServiceAccount,名称为default-account,每一个ServiceAccount应该都会有一个secrets,都用于Pod认证到API Server,都是借助于ServiceAccount控制器实现的
- SecurityContextDent
- NameSpaceExists
- 创建的任何资源都要属于某个名称空间,如果创建的资源没有找到此名称空间时则报错,也是借助于此控制器实现的。
- PodPreset
- PodSecurityPolicy : Pod的安全策略
- 定义Pod时可以定义SecurityContextDent以确保Pod不会违反我们指定的安全策略以免引入安全风险
- PodSecurityPolicy也是一种标准的资源类型,限制运行再集群上的Pod都要满足在PodSecurityPolicy安全运行策略,如果有违反则拒绝。
- ValidatingAdmission Webhook : 自定义校验型的准入控制器
- 变异型模块 :
二、准入控制器使用实例
- 默认K8S集群启用的准入控制是有限的
2.1、如何修改使用kubeadm安装的K8s集群准入控制
~]# cd /etc/kubernetes/manifests/
manifests]# cat kube-apiserver.yaml
apiVersion: v1
kind: Pod
metadata:
annotations:
kubeadm.kubernetes.io/kube-apiserver.advertise-address.endpoint: 192.168.20.236:6443
creationTimestamp: null
labels:
component: kube-apiserver
tier: control-plane
name: kube-apiserver
namespace: kube-system
spec:
containers:
- command:
- kube-apiserver
- --advertise-address=192.168.20.236
- --allow-privileged=true
- --authorization-mode=Node,RBAC
- --client-ca-file=/etc/kubernetes/pki/ca.crt
- --enable-admission-plugins=NodeRestriction # 启动的准入控制器
2.2、LimitRange 及 LimitRanger使用方式
- LimitRange : 主要使用方式,在名称空间级别去为创建每一个Pod设定三个维度的属性
- 1、如果Pod及容器没有所谓的默认资源请求及资源限制,可以为Pod自动附加一个默认的资源做大限制及资源最小限制(requests , limits)
- 2、如果Pod已经存在资源限定值则默认资源限定则不生效,可以指定每一个资源的每一个资源限制的requests
向往的地方很远,喜欢的东西很贵,这就是我努力的目标。