kubernetes pod podsecurityPolicies(PSP)

网友投稿 984 2022-08-30

kubernetes pod podsecurityPolicies(PSP)

kubernetes pod podsecurityPolicies(PSP)

kubernetes pod podsecurityPolicies

tags: 资源对象,pod

文章目录

​​kubernetes pod podsecurityPolicies​​

​​1. 简介​​​​2. API 版本对照表​​​​3. 支持的控制项​​​​4. 实例​​

​​4.1 控制是否允许超出父进程特权​​​​4.2 限制端口​​​​4.3 限制只允许使用 lvm 和 cifs 等 flexVolume 插件​​

美剧《开发者》(Devs)颠覆感藏在最后。

1. 简介

​​Pod Security Policies​​(PSP)是集群级的 Pod 安全策略,自动为集群内的 Pod 和 Volume 设置 Security Context。

使用 PSP 需要 API Server 开启 extensions/v1beta1/podsecuritypolicy,并且配置 PodSecurityPolicy admission 控制器。

注意: PodSecurityPolicy 自 Kubernetes v1.21 起已弃用,并将在 v1.25 中删除。我们建议迁移到​​Pod Security Admission​​​或 3rd party admission 插件。有关迁移指南,请参阅​​从 PodSecurityPolicy 迁移到内置 PodSecurity 准入控制器​​​。有关弃用的更多信息,请参阅​​PodSecurityPolicy 弃用:过去、现在和未来​​。

2. API 版本对照表

Kubernetes 版本

Extension 版本

v1.5-v1.15

extensions/v1beta1

v1.10+

policy/v1beta1

3. 支持的控制项

控制项

说明

privileged

运行特权容器

defaultAddCapabilities

可添加到容器的 Capabilities

requiredDropCapabilities

会从容器中删除的 Capabilities

allowedCapabilities

允许使用的 Capabilities 列表

volumes

控制容器可以使用哪些 volume

hostNetwork

允许使用 host 网络

hostPorts

允许的 host 端口列表

hostPID

使用 host PID namespace

hostIPC

使用 host IPC namespace

seLinux

SELinux Context

runAsUser

user ID

supplementalGroups

允许的补充用户组

fsGroup

volume FSGroup

readOnlyRootFilesystem

只读根文件系统

allowedHostPaths

允许 hostPath 插件使用的路径列表

allowedFlexVolumes

允许使用的 flexVolume 插件列表

allowPrivilegeEscalation

允许容器进程设置 no_new_privs

defaultAllowPrivilegeEscalation

默认是否允许特权升级

4. 实例

4.1 控制是否允许超出父进程特权

​​allowPrivilegeEscalation​​​:控制进程是否可以获得超出其父进程的特权。 此布尔值直接控制是否为容器进程设置 ​​no_new_privs​​​标志。 当容器满足一下条件之一时,​​allowPrivilegeEscalation​​​ 总是为 true: 以特权模式运行,或者 具有 ​​CAP_SYS_ADMIN​​​ 权能 ​​readOnlyRootFilesystem​​:以只读方式加载容器的根文件系统。

root@master:~/cks/securitytext# vim /etc/kubernetes/manifests/kube-apiserver.yaml--- - --enable-admission-plugins=NodeRestriction,PodSecurityPolicy---root@master:~/cks/securitytext# cat psp.yaml apiVersion: policy/v1beta1kind: PodSecurityPolicymetadata: name: defaultspec: allowPrivilegeEscalation: false 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: - '*'root@master:~/cks/securitytext# k create -f psp.yaml podsecuritypolicy.policy/default createdroot@master:~/cks/securitytext# k create deploy nginx --image=nginxdeployment.apps/nginx createdroot@master:~/cks/securitytext# k get deploy nginx -wNAME READY UP-TO-DATE AVAILABLE AGEnginx 0/1 0 0 22s^Croot@master:~/cks/securitytext# k run nginx --image=nginxpod/nginx createdroot@master:~/cks/securitytext# k get pod nginxNAME READY STATUS RESTARTS AGEnginx 1/1 Running 0 44sroot@master:~/cks/securitytext# k create role psp-access --verb=use --resource=podsecuritypoliciesrole.rbac.authorization.k8s.io/psp-access createdroot@master:~/cks/securitytext# k create rolebinding psp-access --role=psp-access --serviceaccount=default:defaultrolebinding.rbac.authorization.k8s.io/psp-access createdroot@master:~/cks/securitytext# k get deploy nginxNAME READY UP-TO-DATE AVAILABLE AGEnginx 0/1 0 0 3m26sroot@master:~/cks/securitytext# k delete deploy nginxdeployment.apps "nginx" deletedroot@master:~/cks/securitytext# k create deploy nginx --image=nginxdeployment.apps/nginx created^Croot@master:~/cks/securitytext# k get deploy nginxNAME READY UP-TO-DATE AVAILABLE AGEnginx 1/1 1 1 20s

allowPrivilegeEscalation设置为rue

root@master:~/cks/securitytext# vim pod.yaml apiVersion: v1kind: Podmetadata: creationTimestamp: null labels: run: pod name: podspec:# securityContext:# runAsUser: 1000# runAsGroup: 3000 containers: - command: - sh - -c - sleep 1d image: busybox name: pod resources: {} securityContext: allowPrivilegeEscalation: true dnsPolicy: ClusterFirst restartPolicy: Alwaysstatus: {}root@master:~/cks/securitytext# k -f pod.yaml createError from server (Forbidden): error when creating "pod.yaml": pods "pod" is forbidden: PodSecurityPolicy: unable to admit pod: [spec.containers[0].securityContext.allowPrivilegeEscalation: Invalid value: true: Allowing privilege escalation for containers is not allowed]

4.2 限制端口

限制容器的 host 端口范围为 8000-8080

apiVersion: extensions/v1beta1kind: PodSecurityPolicymetadata: name: permissivespec: seLinux: rule: RunAsAny supplementalGroups: rule: RunAsAny runAsUser: rule: RunAsAny fsGroup: rule: RunAsAny hostPorts: - min: 8000 max: 8080 volumes: - '*'

4.3 限制只允许使用 lvm 和 cifs 等 flexVolume 插件

apiVersion: extensions/v1beta1kind: PodSecurityPolicymetadata: name: allow-flex-volumesspec: fsGroup: rule: RunAsAny runAsUser: rule: RunAsAny seLinux: rule: RunAsAny supplementalGroups: rule: RunAsAny volumes: - flexVolume allowedFlexVolumes: - driver: example/lvm - driver: example/cifs

参考:

​​Pod Security Policies​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Cakephp的国际化和poEdit的使用
下一篇:基于Go的马蜂窝旅游网分布式IM系统技术实践
相关文章

 发表评论

暂时没有评论,来抢沙发吧~