18.准入控制器

18.准入控制器

Admission Controller准入控制器作为把手kubernetes系统安全的最后一道关卡,对已知且有权限用户的操作合规性验证是缺一不可的!

1.什么是准入控制器?

准入控制器(Admission Controller)位于API Server中,在对象被持久化之前,准入控制器拦截对API Server的请求,一般用来做身份验证和授权。

其中包含两个特殊的控制器钩子:

MutatingAdmissionWebhook和ValidatingAdmissionWebhook

1.变更(Mutating)准入控制

工作逻辑为修改请求的对象
2.验证(Validating)准入控制

工作逻辑为验证请求的对象

以上两类控制器可以分而治之,也能合作运行

2.为什么我们需要它?

就像我在上一章节提到的那样,准入控制器的引入可以很好的帮助我们运维人员,站在一个集群管理者的角度,去“限定”和规划集群资源的合理利用策略和期望状态。

同时,很多kubernetes的高级功能,也是基于准入控制器之上进行建设的。

3.常用的准入控制器

1.AlwaysPullImages

总是拉取远端镜像;

好处:可以避免本地系统处于非安全状态时,被别人恶意篡改了本地的容器镜像

2.LimitRanger

此准入控制器将确保所有资源请求不会超过namespace级别的LimitRange(定义Pod级别的资源限额,如cpu、mem)

3.ResourceQuota

此准入控制器负责集群的计算资源配额,并确保用户不违反命名空间的ResourceQuota对象中列举的任何约束
(定义名称空间级别的配额,如pod数量)

4.PodSecurityPolicy

此准入控制器用于创建和修改pod,
并根据请求的安全上下文和可用的Pod安全策略确定是否应该允许它。

4.如何开启准入控制器

在kubernetes环境中,你可以使用kube-apiserver命令结合enable-admission-plugins的flag,后面需要跟上以逗号分割的准入控制器清单,如下所示:

kube-apiserver --enable-admission-plugins=NamespaceLifecycle,LimitRanger …

5.如何关闭准入控制器

同理,你可以使用flag:disable-admission-plugins,来关闭不想要的准入控制器,如下所示:

kube-apiserver --disable-admission-plugins=PodNodeSelector,AlwaysDeny …

6.实战:控制器的使用

1.LimitRanger

1)首先,编辑limitrange-demo.yaml文件,我们定义了一个cpu的准入控制器。
其中定义了默认值、最小值和最大值等。

apiVersion: v1
kind: LimitRange
metadata:
  name: cpu-limit-range
  namespace: myns
spec:
  limits:
  - default:            #默认上限
      cpu: 1000m
    defaultRequest:
      cpu: 1000m
    min:
      cpu: 500m
    max:
      cpu: 2000m
    maxLimitRequestRatio:       #定义最大值是最小值的几倍,当前为4倍
      cpu: 4
    type: Container

2)apply -f之后,我们可以通过get命令来查看LimitRange的配置详情

[root@centos-1 dingqishi]# kubectl get LimitRange cpu-limit-range -n myns
NAME              CREATED AT
cpu-limit-range   2021-10-10T07:38:29Z

[root@centos-1 dingqishi]# kubectl describe LimitRange cpu-limit-range -n myns
Name:       cpu-limit-range
Namespace:  myns
Type        Resource  Min   Max  Default Request  Default Limit  Max Limit/Request Ratio
----        --------  ---   ---  ---------------  -------------  -----------------------
Container   cpu       500m  2    1                1              4

2.ResourceQuota

1)同理,编辑配置文件resoucequota-demo.yaml,并apply;
其中,我们定义了myns名称空间下的资源配额。

apiVersion: v1
kind: ResourceQuota
metadata:
  name: quota-example
  namespace: myns
spec:
  hard:
    pods: "5"
    requests.cpu: "1"
    requests.memory: 1Gi
    limits.cpu: "2"
    limits.memory: 2Gi
    count/deployments.apps: "2"
    count/deployments.extensions: "2"
    persistentvolumeclaims: "2"

2)此时,也可以查看到ResourceQuota的相关配置,是否生效

[root@centos-1 dingqishi]# kubectl get ResourceQuota -n myns
NAME            CREATED AT
quota-example   2021-10-10T08:23:54Z

[root@centos-1 dingqishi]# kubectl describe ResourceQuota quota-example -n myns
Name:                         quota-example
Namespace:                    myns
Resource                      Used  Hard
--------                      ----  ----
count/deployments.apps        0     2
count/deployments.extensions  0     2
limits.cpu                    0     2
limits.memory                 0     2Gi
persistentvolumeclaims        0     2
pods                          0     5
requests.cpu                  0     1
requests.memory               0     1Gi

大家可以将生效后的控制器,结合相关pod自行测试资源配额的申请、限制和使用的情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

湫一刀

希望大家多多支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值