目录
一、PodSecurityPolicy的工作机制 1.25已被弃用
1、Pod 安全策略 由设置和策略组成,它们能够控制 Pod 访问的安全特征。
为了更精细的控制pod启动或者更新时的安全管理,kubernetes从1.5版本开始引入podSecurityPolicy资源对象对pod安全策略进行管理。podSecurityPolicy是集群范围内的资源对象,不属于命名空间范围。
一、PodSecurityPolicy的工作机制 1.25已被弃用
若需要启用PodSecurityPolicy机制,则首先需要设置 kube-apiserver 服务的启动参数,
--enable-admission-plugins 来开启 PodSecurityPolicy 准入控制器 --enable-admission-plugins=PodSecurityPolicy
1、Pod 安全策略 由设置和策略组成,它们能够控制 Pod 访问的安全特征。
这些设置分为如下三类:
- 基于布尔值控制 :这种类型的字段默认为最严格限制的值
- 基于被允许的值集合控制 :这种类型的字段会与这组值进行对比,以确认值被允许
- 基于策略控制 :设置项通过一种策略提供的机制来生成该值,这种机制能够确保指定的值落在被允许的这组值中。
2、使用流程
- 启用PSP准入控制器
- 创建PSP
- 创建ClusterRole或者Role授权PSP使用
- 创建ClusterRoleBinding或者RoleBinding
二、开启PodSecurityPolicy
1、开启pod安全策略
系统默认为:--enable-admission-plugins=NodeRestriction
添加:--enable-admission-plugins=PodSecurityPolicy
在开启PodSecurityPolicy准入控制器后,k8s默认不允许创建任何Pod,需要创建PodSecurityPolicy和RBAC授权策略,Pod才能创建成功。
2、测试:
vim test.yaml
apiVersion: v1
kind: Pod
metadata:
name: test
spec:
contsiners:
name: nginx
image: nginx:1.17.1
imagePullPolicy: IfNotPresent
使用kubectl创建时候 会提示 禁止创建,
3、创建PodSecurityPolicy
vim psp.yaml
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: psp-non-privileged
spec:
privileged: false #不允许特权模式的Pod
seLinux:
rule: RunAsAny
supplementalGroups:
rule: RunAsAny
runAsUser:
rule: RunAsAny
fsGroup:
rule: RunAsAny
volumes:
- '*'
kubectl apply -f psp.yaml
查看psp
kubectl get psp 或者 kubectl get PodSecurityPolicy
此时就可以创建pod了。
上边的psp.yaml,设置了不允许创建特权的pod,例如,在下面的YAML配置文件pod-privileged.yaml中为Pod设置了特权模式:
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
securityContext:
privileged: true
此时创建时候就会报错,