微信公众号搜索 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 卷字段,能够控制具体卷类型的使用。当创建一个卷的时候,与该字段相关的已定义卷可以允许设置如下值:

  1. azureFile

  2. azureDisk

  3. flocker

  4. flexVolume

  5. hostPath

  6. emptyDir

  7. gcePersistentDisk

  8. awsElasticBlockStore

  9. gitRepo

  10. secret

  11. nfs

  12. iscsi

  13. glusterfs

  14. persistentVolumeClaim

  15. rbd

  16. cinder

  17. cephFS

  18. downwardAPI

  19. fc

  20. configMap

  21. vsphereVolume

  22. quobyte

  23. projected

  24. portworxVolume

  25. scaleIO

  26. storageos

  27. * (allow all volumes)

对新的 PSP,推荐允许的卷的最小集合包括:configMap、downwardAPI、emptyDir、persistentVolumeClaim、secret 和 projected。

主机网络

HostPorts,默认为empty。HostPortRange 列表通过 min(包含) and max(包含) 来定义,指定了被允许的主机端口。

允许的主机路径

AllowedHostPaths 是一个被允许的主机路径前缀的白名单。空值表示所有的主机路径都可以使用。

许可

包含 PodSecurityPolicy 的 许可控制,允许控制集群资源的创建和修改,基于这些资源在集群范围内被许可的能力。

许可使用如下的方式为 Pod 创建最终的安全上下文:

  1. 检索所有可用的 PSP。

  2. 生成在请求中没有指定的安全上下文设置的字段值。

  3. 基于可用的策略,验证最终的设置。

如果某个策略能够匹配上,该 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 安全策略,必须确保满足如下条件:

  1. 已经启用 API 类型 extensions/v1beta1/podsecuritypolicy(仅对 1.6 之前的版本)

  2. 已经启用许可控制器 PodSecurityPolicy

  3. 已经定义了自己的策略

往期精彩文章

kubernetes全栈技术+企业案例演示【带你快速掌握和使用k8s】

python运维开发实战

kubernetes面试题汇总

DevOps视频和资料免费领取

kubernetes技术分享-可用于企业内部培训

谈谈我的IT发展之路

kubernetes系列文章第一篇-k8s基本介绍

kubernetes系列文章第二篇-kubectl

了解pod和pod的生命周期-这一篇文章就够了

Kubernetes中部署MySQL高可用集群

Prometheus+Grafana+Alertmanager搭建全方位的监控告警系统-超详细文档

k8s1.18多master节点高可用集群安装-超详细中文官方文档

k8s中蓝绿部署、金丝雀发布、滚动更新汇总

运维常见问题汇总-tomcat篇

关于linux内核参数的调优,你需要知道

kubernetes持久化存储volume

kubernetes挂载ceph rbd和cephfs

报警神器Alertmanager发送报警到多个渠道

jenkins+kubernetes+harbor+gitlab构建企业级devops平台

kubernetes网络插件-flannel篇

kubernetes网络插件-calico篇

kubernetes认证、授权、准入控制

限制不同的用户操作k8s资源

面试真题&技术资料免费领取-覆盖面超全~

Prometheus监控MySQL

Prometheus监控Nginx

Prometheus监控Tomcat

linux面试题汇总

测试通过storageclass动态生成pv

通过编写k8s的资源清单yaml文件部署gitlab服务

helm安装和使用-通过helm部署k8s应用

Prometheus Operator-上篇-安装和使用篇

Prometheus Operator-下篇

通过kubeconfig登陆k8s的dashboard ui界面

通过token令牌登陆k8s dashboard ui界面 

kubernetes集群的etcd数据库详细介绍

Linux网络流量监控工具

kubernetes搭建EFK日志管理系统

prometheus operator监控k8s集群之外的haproxy组件         

kubernetes ConfigMap存储卷                                            

技术交流群

学无止境,了解更多关于kubernetes/docker/devops/openstack/openshift/linux/IaaS/PaaS相关内容,想要获取更多资料和免费视频,可按如下方式进入技术交流群

                            扫码加群????

微信:luckylucky421302

微信公众号

                                     长按指纹关注公众号????

                                       

                                       点击在看少个 bug????

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐