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
        • ResourceQuota (常用):整个名称空间下的资源配额总量
          • 可以再某一个新的名称空间下定义一个新的类型为ResourceQuota 资源
            • 限制一个名称空间下可以定义多少个资源
            • 比如可以定义 此名称空间下可以跑N个Pod,N个Service,N个Deploy等
            • 也可以明确指定说所以Pod加起来多消耗的核心不能超过多少,以及总消耗的内存不能超过多少G
          • 从总量上限制一个名称空间的计算资源及存储资源及各种各样的K8S资源的可用数量
        • 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
posted @ 2021-06-20 13:07  SRE运维充电站  阅读(124)  评论(0编辑  收藏  举报