K8s最近更新了v1.21,说会把PSP会移除掉,完全移除在v1.25版本。再不学习它就学不到了。https://kubernetes.io/docs/concepts/policy/pod-security-policy/
什么是PSP : Pod Security Policy 是 kubernetes中一种集群级别的资源,它定义了用户能否在Pod中使用各种安全相关的特性,举例来说PSP可以做的事情:
image.png是否允许Pod使用宿主节点的PID,IPC,网络命名空间
Pod是否允许绑定到宿主节点端口
容器运行时允许使用的用户ID
是否允许特权模式的POD
首先要在api-server里面启用:--enable-admission-plugins=PodSecurityPolicy
什么叫特权模式容器:默认情况下,容器是不允许访问主机上的任何设备。但是特权容器被赋予了权限。有助于容器使用linux的一些特性。
创建一个允许创建特权的PodSecurityPolicy:
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: privileged
spec:
privileged: true -----允许创建特权容器
runAsUser:
rule: RunAsAny
fsGroup:
rule: RunAsAny
supplementalGroups:
rule: RunAsAny
seLinux:
rule: RunAsAny
volumes:
- '*'
创建一个不允许特权的PodSecurityPolicy:
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: default
spec:
hostIPC: false
hostPID: false
hostNetwork: false
hostPorts:
- min: 10000
max: 11000
- min: 13000
max: 14000
privileged: false ----不允许部署特权容器
readOnlyRootFilesystem: true
runAsUser:
rule: RunAsAny
fsGroup:
rule: RunAsAny
supplementalGroups:
rule: RunAsAny
seLinux:
rule: RunAsAny
volumes:
- '*'
特权pod需要在yaml里指定:
securityContext:
privileged: true
kubectl create -f privileged.yaml/default.yaml
将psp绑定到clusterrole。
kubectl create clusterrole psp-default --verb=use --resource=podsecuritypolicies --resource-name=default // 不能创建特权
kubectl create clusterrole psp-privilege --verb=use --resource=podsecuritypolicies --resource-name=privilege
将用户和clusterrole绑定。
kubectl create clusterrolebinding psp-all-user --clusterrole=psp-default --group=system:authenticated
kubectl create clusterrolebinding psp-jaymz --clusterrole=psp-privilege --user=jaymz
那么只有用户jaymz才能创建特权pod。
kubectl --user jaymz create -f xxx.yaml来验证是否能够创建。
网友评论