污点是什么?
污点(Taint)是使节点与Pod产生排斥的一类规则.
污点策略是什么?
污点策略托过嵌合在键值对上的污点标签进行声明
污点标签
尽量不调度 :PreferNoSchedule
不被调度: NoSchedule
驱逐污点: NoExecute
管理污点标签
污点标签必须绑定在键值对上,格式如下:
key=value:[污点标签]
查看污点标签:
kubectl describe nodes [节点名字]
设置污点标签:
kubectl taint node [节点名字] key=value:污点标签
删除污点标签:
kubectl taint node [节点名字] key=value:节点标签-
容忍是什么?
容忍刚好与污点相反,某些时候我们需要在有污点的节点上运行Pod,这种无视污点标签的调度方式称为容忍.
...... #配置容忍策略示例
spec:
terminationGracePeriodSeconds: 0
restartPolicy: Always
tolerations: #定义容忍策略
- opperator: "Equal" #匹配方式,必选(Equal,Exists)
key: "k1" #设置键值对的值为key,为空代表任意键值对
value: "v1" #设置values的值
effect: "NoSchedule" #设置容忍的标签,为空代表所有污点标签
(在上表中,Equal代表精确容忍策略,Exists代表模糊容忍策略)
优先级是什么?
优先级表示一个Pod相对于其他Pod的重要性.可以保证重要的Pod被调度运行.
如何使用优先级和抢占?
首先配置优先级类 PriorityClass,创建Pod时为其设置对应的优先级
PriorityClass
PriorityClass是一个全局资源对象,它定义了聪优先级类名称到优先级整数值的映射.优先级在Value字段中指定,可以设置小于10亿的整数值.
PriorityClass还有两个可选字段:
globalDefault用于设置默认优先级状态,如果没有任何优先级设置Pod的优先级为0
description用来配置描述性信息,告诉用户优先级的用途.
优先级策略
非抢占优先:指的是在调度阶段优先进行调度分配,一旦容器调度完成就不可以抢占,资源不足时,只能等待.
抢占优先: 强制调度一个Pod,如果资源不足无法被调度,调度程序会抢占(删除)较低优先级的Pod的资源,来保证高优先级Pod的运行.
非抢占优先级与抢占优先,一般使用非抢占优先.
非抢占优先级
定义优先级资源对象,高优先级定义
---
kind: PriorityClass
apiVersion: scheduling.k8s.io/v1
metadata:
name: high-non #优先级名称
globalDefault: false #是否定义默认优先级(唯一)
preemptionPolicy: Never #策略: 非抢占
value: 1000 #优先级
description: non-preemptive #描述信息
Pod安全
什么是特权容器?
容器是通过名称空间技术隔离的,有时候我们执行一些应用服务,需要使用或修改敏感的系统信息,这时容器需要突破隔离限制,获取更高的权限,这类容器统称特权容器.
运行特权容器会有一些安全风险,这种模式下运行容器对宿主机拥有root访问权限,可以突破隔离直接控制宿主机的资源配置.
特权容器(修改主机名和hosts文件)
---
kind: Pod
apiVersion: v1
metadata:
name: root
spec:
terminationGracePeriodSeconds: 0
restartPolicy: Always
hostname: myhost #修改主机名
hostAliases: #修改hosts
- ip: 192.168.1.30 #IP地址
hostnames: #名称键值对
- harbor #主机名
containers:
- name: apache
image: myos:httpd
root特权容器
---
kind: Pod
apiVersion: v1
metadata:
name: root
spec:
termainationGracePeriodSeconds: 0
restartPolicy: Always
hostPID: true #共享系统进程
hostNetwork: true #共享主机网络
containers:
- name: apache
image: myos:httpd
securityContext: #安全上下文值
privileged: true #root容器
什么是Pod安全策略?
Pod安全策略是集群级别的资源,它能够控制Pod运行的行为,以及它具有访问什么的能力.
如何使用Pod安全策略?
kubernetes服务版本必须不低于版本v1.22
确保PodSecuriy特性门控被启用
Pod安全策略
PodSecurity提供一种内置的Pod安全性准入控制器,作为PodSecurityPolicies特性的后继演化版本.Pod安全性限制是在Pod被创建时,在名字空间层面实施的.
Pod安全性标准定义了三种不同的策略(Policy), 以广泛覆盖安全应用场景.这些策略是渐进式的,安全及别从高度宽松至高度受限.
Pod安全策略(LEVEL)
privileged: 不受限制的策略,提供最大可能范围的权限许可,此策略允许特权提升.
baseline: 弱限制性的策略,禁止已知的策略提升权限.允许使用默认的Pod配置.
restricted: 非常严格的限制性策略,遵循当前的保护Pod的最佳实践.
Pod准入控制标签(MODE)
Kubernetes定义莉一组标签,你可以设置这些标签来定义某个名字空间上Pod安全性标准级别.你所选择的标签定义了检测到潜在违例时,所要采取的动作.
enforce: 策略违例会导致Pod被拒绝.
audit: 策略违例会触发审计日志,但是Pod仍可被接受.
warn: 策略违例会触发用户可见的警告信息,但是Pod仍是被接受的
pod-security.kubernetes.io/<MODE>: <LEVEL>
案例:最安全的Pod
---
kind: Pod
apiVersion: v1
metadata:
name: nonroot
spec:
terminationGracePeriodSeconds: 0
restartPolicy: Always
containers:
- name: php
image: myos:php-fpm
securityContext:
allowPrivilegeEscalation: false
runAsNonRoot: true
runAsUser: 65534
seccompProfile:
type: "RuntimeDefault"
capabilities:
drop: ["ALL"]