k8s的Pod安全策略
微信公众号搜索 DevOps和k8s全栈技术 ,即可关注公众号,也可扫描文章最后的二维码关注公众号,每天会分享技术文章供大家阅读参考哈~前言PodSecurityPolicy类型的对象能...
微信公众号搜索 DevOps和k8s全栈技术 ,即可关注公众号,也可扫描文章最后的二维码关注公众号,每天会分享技术文章供大家阅读参考哈~
前言
PodSecurityPolicy类型的对象能够控制,是否可以向Pod发送请求,该Pod能够影响被应用到Pod和容器的SecurityContext。
什么是 Pod 安全策略?
Pod安全策略是集群级别的资源,它能够控制Pod运行的行为,以及它具有访问什么的能力。PodSecurityPolicy对象定义了一组条件,指示Pod必须按系统所能接受的顺序运行。它们允许管理员控制如下方面:
Pod安全策略由设置和策略组成,它们能够控制Pod访问的安全特征。这些设置分为如下三类:
基于布尔值控制 :这种类型的字段默认为最严格限制的值。
基于被允许的值集合控制 :这种类型的字段会与这组值进行对比,以确认值被允许。
基于策略控制 :设置项通过一种策略提供的机制来生成该值,这种机制能够确保指定的值落在被允许的这组值中。
RunAsUser
MustRunAs - 必须配置一个
range
。使用该范围内的第一个值作为默认值。验证是否不在配置的该范围内。MustRunAsNonRoot - 要求提交的 Pod 具有非零
runAsUser
值,或在镜像中定义了USER
环境变量。不提供默认值。RunAsAny - 没有提供默认值。允许指定任何
runAsUser
。
SELinux
MustRunAs - 如果没有使用预分配的值,必须配置
seLinuxOptions
。默认使用seLinuxOptions
。验证seLinuxOptions
。RunAsAny - 没有提供默认值。允许任意指定的
seLinuxOptions
ID。
SupplementalGroups
MustRunAs - 至少需要指定一个范围。默认使用第一个范围的最小值。验证所有范围的值。
RunAsAny - 没有提供默认值。允许任意指定的
supplementalGroups
ID。
FSGroup
MustRunAs - 至少需要指定一个范围。默认使用第一个范围的最小值。验证在第一个范围内的第一个 ID。
RunAsAny - 没有提供默认值。允许任意指定的
fsGroup
ID。
控制卷
通过设置 PSP 卷字段,能够控制具体卷类型的使用。当创建一个卷的时候,与该字段相关的已定义卷可以允许设置如下值:
azureFile
azureDisk
flocker
flexVolume
hostPath
emptyDir
gcePersistentDisk
awsElasticBlockStore
gitRepo
secret
nfs
iscsi
glusterfs
persistentVolumeClaim
rbd
cinder
cephFS
downwardAPI
fc
configMap
vsphereVolume
quobyte
projected
portworxVolume
scaleIO
storageos
* (allow all volumes)
对新的 PSP,推荐允许的卷的最小集合包括:configMap、downwardAPI、emptyDir、persistentVolumeClaim、secret 和 projected。
主机网络
HostPorts,默认为empty。HostPortRange 列表通过 min(包含) and max(包含) 来定义,指定了被允许的主机端口。
允许的主机路径
AllowedHostPaths 是一个被允许的主机路径前缀的白名单。空值表示所有的主机路径都可以使用。
许可
包含 PodSecurityPolicy 的 许可控制,允许控制集群资源的创建和修改,基于这些资源在集群范围内被许可的能力。
许可使用如下的方式为 Pod 创建最终的安全上下文:
检索所有可用的 PSP。
生成在请求中没有指定的安全上下文设置的字段值。
基于可用的策略,验证最终的设置。
如果某个策略能够匹配上,该 Pod 就被接受。如果请求与 PSP 不匹配,则 Pod 被拒绝。
Pod 必须基于 PSP 验证每个字段。
创建一个策略和一个 Pod
在一个文件中定义 PodSecurityPolicy 对象实例。这里的策略只是用来禁止创建有特权 要求的 Pods。
policy/example-psp.yaml
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: example
spec:
privileged: false # Don't allow privileged pods!
# The rest fills in some required fields.
seLinux:
rule: RunAsAny
supplementalGroups:
rule: RunAsAny
runAsUser:
rule: RunAsAny
fsGroup:
rule: RunAsAny
volumes:
- '*'
使用 kubectl 执行创建操作:
kubectl-admin create -f example-psp.yaml
获取 Pod 安全策略列表
获取已存在策略列表,使用 kubectl get:
kubectl get psp
NAME PRIV CAPS SELINUX RUNASUSER FSGROUP SUPGROUP READONLYROOTFS VOLUMES
permissive false [] RunAsAny RunAsAny RunAsAny RunAsAny false [*]
privileged true [] RunAsAny RunAsAny RunAsAny RunAsAny false [*]
restricted false [] RunAsAny MustRunAsNonRoot RunAsAny RunAsAny false
修改 Pod 安全策略
通过交互方式修改策略,使用 kubectl edit:
$ kubectl edit psp permissive
该命令将打开一个默认文本编辑器,在这里能够修改策略。
删除 Pod 安全策略
一旦不再需要一个策略,很容易通过 kubectl
删除它:
$ kubectl delete psp permissive
podsecuritypolicy "permissive" deleted
启用 Pod 安全策略
为了能够在集群中使用 Pod 安全策略,必须确保满足如下条件:
已经启用 API 类型 extensions/v1beta1/podsecuritypolicy(仅对 1.6 之前的版本)
已经启用许可控制器 PodSecurityPolicy
已经定义了自己的策略
往期精彩文章
kubernetes全栈技术+企业案例演示【带你快速掌握和使用k8s】
Prometheus+Grafana+Alertmanager搭建全方位的监控告警系统-超详细文档
k8s1.18多master节点高可用集群安装-超详细中文官方文档
jenkins+kubernetes+harbor+gitlab构建企业级devops平台
通过kubeconfig登陆k8s的dashboard ui界面
prometheus operator监控k8s集群之外的haproxy组件
技术交流群
学无止境,了解更多关于kubernetes/docker/devops/openstack/openshift/linux/IaaS/PaaS相关内容,想要获取更多资料和免费视频,可按如下方式进入技术交流群
扫码加群????
微信:luckylucky421302
微信公众号
长按指纹关注公众号????
点击在看少个 bug????
更多推荐
所有评论(0)