Kubernetes系统安全-准入控制(admission control)

                                     作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。 

 

 

 

一.准入控制(admission control)概述

1>.常见的准入控制器(Admission Controllers)

  AlwaysAdmit(DEPRECATED):
    该准入控制器已被废弃,总是允许,所有的请求(包括不符合定义)的规则都允许,如果有不符合的规则请求会日志记录而已,和临时关闭selinux的功能有点像。
  AlwaysPullImages:
    无论你拉取镜像的规则定义成什么类型,总是会去拉取镜像,也就是强制避免使用本地镜像,即无视本地镜像定义的拉取规则。
  AlwaysDeny(DEPRECATED):
    该准入控制器已被废弃,和AlwaysAdmit相反,所有请求(包括符合定义)的规则拒绝。
  DefaultStorageClass:
    指定默认的存储类。
  DefaultTolerationSeconds
  DenyEscalatingExec
  EventRateLimit(alpha)
  ExtendedResourceToleration
  ImagePolicyWebhook
  Initializers(alpha)
  LimitPodHardAnitiAffinityTopology
  LimitRanger:
    允许在名称空间中创建一个LimitRange资源,任何Pod都需要指定一个资源上限和下限的范围,若未指定会使用默认值。

  MutaingAdmission Webhook(beta in 1.9)
  NamespaceAutoProvision
  NamespaceExists:
    检查名称空间是否存在的控制器。
  NamespaceLifecycle
  NodeRestriction
  OwnerReferencesPermissionEnforcement
  PodNodeSelector
  PersistentVolumeClaimResize
  PodPreset
  PodSecurityPolicy:
    为Pod定义安全策略。

  PodTolerationRestriction
  Priority
  ResourceQuota:
    允许在名称空间中创建一个ResourceQuota资源,可以明确指定Pod使用资源的配额,比如内存不允许超过20G,允许使用的总的PVC数量等K8S集群资源。

  SecurityContextDeny
  ServiceAccount:
    比如创建的Pod内部默认有一个存储卷,每个存储卷对应了一个secret用于ApiServer认证,这就是ServiceAccount来定义的。

  Storage Object in Use Protection
  ValidatingAdmission Webhook(alpha in 1.8;beta in 1.9)  

2>.打开或者关闭控制器

  Kubernetes API server标志enable adminimission plugins接受在修改集群中的对象之前要调用的许可控制插件的逗号分隔列表。使用"--enable-admission-plugins="指定,如下图所示。

  Kubernetes API服务器标志disable admission plugins接受一个逗号分隔的要禁用的许可控制插件列表,即使它们在默认启用的插件列表中。使用"--disable-admission-plugins="

Kubernetes系统安全-准入控制(admission control)

 

二.LimitRange and LimitRanger

  Pod 对象虽然支持使用requests和limits进行可用计算资源配置,但它们却非强制选项;

  LimitRange的主要目的是确保请求和/限制根据其规范自动关联到容器;

  如果容器是在具有默认内存限制的命名空间中创建的,并且该容器未指定其自己的内存限制,则会为该容器分配默认内存限制;

  由limit range对象定义的限制范围枚举pod和container级别的命名空间中的计算资源约束,并指定pod或container可以消耗的资源量。

  对项目中的每个LimitRange对象评估所有资源创建和修改请求,如果资源未设置显式值,并且约束支持默认值,则将默认值应用于资源。

  LimitRanger将观察传入的请求,并确保它不违反命名空间中LimitRange对象中枚举的任何约束:
    所有资源创建和修改请求都是根据命名空间中的每个LimitRange对象计算的;
    如果资源违反任何枚举约束,则资源将被拒绝。
    如果资源未设置显式值,并且约束支持默认值,则将默认值应用于资源。

  LimitRanger还可用于将默认资源请求应用于未指定任何的pod;当前,默认LimitRanger将0.1 CPU需求应用于默认命名空间中的所有pod。

1>.创建LimitRange资源

[root@master200.yinzhengjie.org.cn ~]# vim /yinzhengjie/data/k8s/manifests/limitrange-demo.yaml 
[root@master200.yinzhengjie.org.cn ~]# 
[root@master200.yinzhengjie.org.cn ~]# cat /yinzhengjie/data/k8s/manifests/limitrange-demo.yaml 
apiVersion: v1
kind: LimitRange
metadata:
  name: cpu-limit-range
  namespace: yinzhengjie-admission-control
spec:
  limits:
  - default:
      cpu: 1000m
    defaultRequest:
      cpu: 1000m
    min:
      cpu: 500m
    max:
      cpu: 2000m
    maxLimitRequestRatio:
      cpu: 4
    type: Container
[root@master200.yinzhengjie.org.cn ~]# 
[root@master200.yinzhengjie.org.cn ~]# vim /yinzhengjie/data/k8s/manifests/limitrange-demo.yaml

相关文章: